Add Franka drawer manipulation tutorial - #513
Conversation
Add a MotionGenerator tutorial for grasping, pulling, and partially closing a passive drawer. Document the contact-rich planning flow and include a reproducible headless simulation recording.
Greptile SummaryThe PR adds an executable Franka tutorial that plans batched approach, pull, and push trajectories against a passive drawer, validates success from measured drawer state, and optionally records headless execution. It also adds a teaching-focused Sphinx page, tutorial navigation, and associated video and poster assets.
Confidence Score: 5/5The PR appears safe to merge; no concrete blocking or independently actionable non-blocking issue was identified. The planner sampling and playback shapes match repository contracts, articulation creation follows its non-optional API, and the optional recording path safely handles directory creation and partial lifecycle cleanup.
|
| Filename | Overview |
|---|---|
| scripts/tutorials/sim/open_drawer.py | Adds a complete batched simulation tutorial with scene setup, seeded IK, TOPPRA planning, contact-phase execution, measured-state validation, argument checks, and safe recorder cleanup; no actionable defect was identified. |
| docs/source/tutorial/robot_articulation.rst | Adds comprehensive tutorial documentation aligned with the executable example, including frame conventions, control boundaries, reproduction commands, and troubleshooting. |
| docs/source/tutorial/index.rst | Inserts the new tutorial into the learning sequence and Sphinx toctree while consistently renumbering subsequent entries. |
| docs/source/_static/tutorials/open_drawer.mp4 | Adds the tutorial recording referenced by the new Sphinx page. |
| docs/source/_static/tutorials/open_drawer_poster.jpg | Adds the poster image used by the embedded tutorial video. |
Flowchart
%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Create Franka and passive drawer] --> B[Read live handle pose]
B --> C[Build pre-grasp and grasp poses]
C --> D[Seeded inverse kinematics]
D --> E[TOPPRA arm trajectory]
E --> F[Execute approach]
F --> G[Close gripper and settle contact]
G --> H[Re-read handle pose]
H --> I[Plan and execute pull]
I --> J[Measure achieved drawer opening]
J --> K{Opening meets threshold?}
K -- No --> L[Raise task failure]
K -- Yes --> M[Plan push from measured opening]
M --> N[Execute half-close push]
N --> O{Final opening within tolerance?}
O -- No --> L
O -- Yes --> P[Hold final pose and save recording]
Reviews (1): Last reviewed commit: "feat(tutorial): add Franka drawer manipu..." | Re-trigger Greptile
Description
This PR adds a contact-rich manipulation tutorial in which a Franka Panda uses
MotionGeneratortrajectories to grasp a passive drawer, pull it open, and push it halfway closed.It includes:
Dependencies: None.
No linked issue.
Type of change
Screenshots
Watch or download the recorded MP4
Validation
black .— 657 files unchangedpython -m py_compile scripts/tutorials/sim/open_drawer.pypython -m sphinx -b html docs/source docs/build/html -q— passed with pre-existing repository warningsChecklist
black .command to format the code base.