Skip to content

feat: add SO101 support and reference pose visualizer#22

Open
johncaipa wants to merge 2 commits into
DipFlip:mainfrom
johncaipa:feat/so101-support
Open

feat: add SO101 support and reference pose visualizer#22
johncaipa wants to merge 2 commits into
DipFlip:mainfrom
johncaipa:feat/so101-support

Conversation

@johncaipa
Copy link
Copy Markdown

Changes

SO101 URDF support in PyBulletVisualizer

  • _map_joints(): fallback to direct semantic name matching when
    numeric names ("1"–"6") are not found — allows SO101 URDFs which
    already use shoulder_pan, shoulder_lift, etc.
  • _find_end_effector(): checks a list of candidate link names
    (SO100: Fixed_Jaw_tip, SO101: gripper_frame_link)
  • setup(): auto-detects SO101 by filename and applies +90° Z-rotation
    so arms face +Y, matching the SO100 visual layout

New: visualize_poses.py

Standalone script to validate reference_poses.json poses visually
using the same PyBullet+URDF setup as production.
Supports --urdf, --auto, --delay flags. Works with SO100 and SO101.

Tested with URDF/SO100/so100.urdf and URDF/SO101/so101_new_calib.urdf.

John Caipa and others added 2 commits May 1, 2026 10:26
The SO101 URDF uses semantic joint names (shoulder_pan, shoulder_lift,
etc.) directly, while SO100 uses numeric names ("1"–"6"). This caused
all joints to fail mapping when switching to SO101.

Three changes in PyBulletVisualizer:
- _map_joints: add fallback to direct semantic name matching after the
  numeric URDF_TO_INTERNAL_NAME_MAP lookup, so SO101 joints resolve
  correctly without modifying config
- _find_end_effector: accept a list of candidate link names
  (Fixed_Jaw_tip, gripper_frame_link, moving_jaw_so101_v1_link) instead
  of a single hardcoded name, covering SO100 and SO101 end-effectors
- setup: detect SO101 by URDF filename and apply a +90° Z-rotation as
  base orientation so arms face +Y, matching the SO100 visual layout

SO100 behaviour is unchanged (numeric mapping succeeds on first pass,
identity orientation applied, Fixed_Jaw_tip found as before).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
New standalone script to visually validate poses stored in
reference_poses.json using the same PyBullet+URDF setup as production.

Features:
- Loads both left and right arm poses from the JSON file
- Applies each pose to the corresponding robot instance in PyBullet GUI
- Overlays arm name, pose index, and per-joint angles as debug text in
  the 3D window
- Manual mode (default): press Enter to advance between poses
- Auto mode (--auto): cycles automatically with configurable delay
- --urdf flag to select any supported URDF (SO100 default, SO101 works
  with the base-orientation fix applied in the companion commit)
- Loops continuously until Ctrl+C; disconnects PyBullet cleanly on exit

Usage:
  python visualize_poses.py
  python visualize_poses.py --urdf URDF/SO101/so101_new_calib.urdf
  python visualize_poses.py --auto --delay 2.5

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant