Skip to content

Add dual-arm teleoperation and VR hand guidance - #1

Merged
vamsikalagaturu merged 11 commits into
openarm-vr-teleop-simfrom
dual-arm-teleop
Sep 29, 2026
Merged

vamsikalagaturu merged 11 commits into
openarm-vr-teleop-simfrom
dual-arm-teleop

Conversation

@lightonray

@lightonray lightonray commented Sep 21, 2026 •

Copy link
Copy Markdown
Member

Add independent left- and right-arm control with separate grip, trigger, and calibration.
Allow movement to start from a comfortable hand position.
Add hand-orientation guides that turn green when ready to make it easier for the ui.
Show temporary recovery instructions when limits are reached or tracking pauses.
Fix false tracking timeouts caused by headset timestamp changes.
Update setup documentation and add regression tests.


Add guarded OpenArm hardware teleoperation alongside simulation

  • Separate real and simulated launch paths while sharing the existing IK
  • Bridge VR targets to ROS controllers using live motor feedback
  • Add CAN pacing, feedback validation, fault handling, and diagnostics
  • Tune physical teleoperation for one-to-one hand translation
  • Add guarded return-to-zero, cancellation, and position-status commands
  • Handle small elbow and gripper zero offsets without recalibration
  • Add regression tests and hardware setup documentation

lightonray and others added 10 commits September 21, 2026 16:57
- Separate real and simulated launch paths while sharing the existing IK
- Bridge VR targets to ROS controllers using live motor feedback
- Add CAN pacing, feedback validation, fault handling, and diagnostics
- Tune physical teleoperation for one-to-one hand translation
- Add guarded return-to-zero, cancellation, and position-status commands
- Handle small elbow and gripper zero offsets without recalibration
- Add regression tests and hardware setup documentation
- Move real-arm engagement from side grip to rear trigger
- Reset progress tracking when the end-effector target moves
- Hide intrusive recovery panels for advisory reach warnings
- Update headset instructions and regression tests
The store is generated from the Dual-Arm Supermarket shelving and scanned
products (pinned upstream commit), fully stocked, and enclosed with walls,
ceiling panels, chilled cabinets, produce and checkouts. TIAGo comes from
the Menagerie with its arm tucked through joint refs.

scene_export now writes each mesh asset once per material and places every
use as a child instance node; the store's glb drops from ~2 GB to 119 MB,
and scenes without repeats export as before.

SceneNode takes actuator commands on ~/ctrl for the actuators named in
ctrl_actuators, zeroed after ctrl_timeout_s of silence; sim.launch.py
passes ctrl_actuators through. tiago_patrol.py follows the world's
patrol.yaml with pure pursuit on the wheels.
0.4.0 is a breaking release: robots and loops go through an Env, and
ensure_plugins_loaded() and a Robot's index maps are internal.

SceneNode loads its world through Env::adopt inside init_env, which loads
the plugins first, and frees the adopted pair itself. OpenArmIk builds its
chain in a private Env running on a copy of the model and reads the qpos,
dof and actuator indices from the model directly, with the same actuator
lookup 0.3 used.

find_package asks for 0.4, as the package now matches within a minor
version only; dependencies.repos pins v0.4.0, and the OpenArm launcher
and docs name the MuJoCo 3.14.0 library.
A gripper closed on an object stops moving while the bridge's command kept
closing, passing the 8 mm following check within ~0.5 s and disarming both
arms. The command now leads the measured finger position by at most 4 mm,
so a stalled grip holds a bounded squeeze; joint-limit checks are unchanged.

on_activate re-arms the first-read fresh-reply wait and the first-write
dt allowance, which previously applied to the first activation only.

With motion bounds off, a held first delta reported translation_limit or
rotation_limit; the reason now comes from the check that fired.

PollWorldLock set the label colour before its null check; UpdateLockLabel
already sets it, guarded.

The hardware doc gave an 8 ms CAN batch limit; the code uses 30 ms.
@vamsikalagaturu
vamsikalagaturu merged commit 5a314f9 into openarm-vr-teleop-sim Sep 29, 2026
2 checks passed
@vamsikalagaturu
vamsikalagaturu deleted the dual-arm-teleop branch September 29, 2026 15:48
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.

2 participants