Conversation
737a8ec to
40001bb
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. @@ Coverage Diff @@
## cc/feat/robot-learning-sdk #3942 +/- ##
==============================================================
+ Coverage 78.37% 79.72% +1.34%
==============================================================
Files 1530 1533 +3
Lines 144292 144355 +63
Branches 12319 12319
==============================================================
+ Hits 113095 115088 +1993
+ Misses 27903 25887 -2016
- Partials 3294 3380 +86
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 41 files with indirect coverage changes 🚀 New features to boost your workflow:
|
40001bb to
fd57995
Compare
d49c11a to
4fee455
Compare
4fee455 to
10ef0d5
Compare
10ef0d5 to
a730b9b
Compare
425713b to
6dff42c
Compare
6dff42c to
c55be53
Compare
4d2448b to
8d34554
Compare
|
| actions={ | ||
| "action": CollectionFeature( | ||
| stream="applied_joint_position_command", | ||
| source_kind="joint_position_updates", |
There was a problem hiding this comment.
The 14-joint action is reconstructed from accepted sparse command updates, but recording can start after an arms-only 12-joint command. Strict preparation then has no targets for left_arm/gripper and right_arm/gripper, emits no samples, and rejects the episode. Seed a complete 14-joint command state or prevent recording until every canonical joint has an accepted target.
Knowledge Base Used: Robot control platform
Artifacts
- The authored script builds strict profile-backed streams with partial and complete accepted commands and runs the real preparation/projection APIs, providing the reproducible check.
- The partial-command run supplied 12 arm joints and shows strict projection rejecting the episode because both gripper targets are absent, confirming the failure.
- The complete-command run supplied all 14 canonical joints and shows strict preparation emitting four valid 14-element action samples, establishing the control result.
| from dimos.robot.manipulators.dual_openyam.learning import DUAL_OPENYAM_COLLECTION | ||
|
|
||
| dual_openyam_quest_collection = autoconnect( | ||
| build_dual_openyam_webxr(visualization=ViserVisualizationConfig(host="0.0.0.0")), |
There was a problem hiding this comment.
This collection blueprint binds Viser to 0.0.0.0, while the visualization path has no authentication setting. A client that can reach the service can load enabled Plan and Execute controls, allowing unauthenticated access to interactive robot planning and execution. Keep the service loopback-only by default, or require an authenticated and authorized network boundary before enabling non-loopback access.
How this was verified: A live all-interface listener rendered enabled Plan and Execute controls with no configured authentication gate.
Artifacts
- This executed Python check reads the changed blueprint and Viser implementation, then starts a real all-interface Viser listener; it is the exact test input used to establish the exposure.
- The successful command output records the all-interface blueprint setting, direct host forwarding, missing auth config fields, real `*:8097` Viser listener, and successful connection; the takeaway is that the configured Viser service is reachable without a configured authentication gate.
- This minimal real Viser server creates the same Plan and Execute panel controls used for the Chromium comparison; it is the executed UI fixture.
- This Playwright script launches Chromium, verifies visible and enabled Plan and Execute controls, captures a poster frame, and records the UI video; it is the exact browser automation input.
- Chromium renders the Viser panel when the server is explicitly bound to `127.0.0.1:8096`, showing the Plan and Execute controls remain local-only in the comparison condition.
Loopback-only Viser panel with Plan and Execute controls
- The Chromium poster frame shows the Viser manipulation panel and its Plan and Execute controls under the loopback-only comparison condition.
- The successful command log shows Viser listening at `127.0.0.1:8096` and Playwright finding visible, enabled Plan and Execute controls; the takeaway is that the baseline scope is loopback-only.
- Chromium renders the Viser panel after binding the server to `0.0.0.0:8095`, visibly showing the interactive Plan and Execute controls in the network-exposed condition.
All-interface Viser panel with Plan and Execute controls
- The Chromium poster frame shows the Viser manipulation panel with the enabled Plan and Execute controls in the all-interface condition.
- The successful command log records `LISTEN 0.0.0.0:8095`, Viser `auth=none`, and Playwright-visible/enabled Plan and Execute controls; the takeaway is that reachable clients can receive this unauthenticated interactive panel.
b79e35e to
ae6cf83
Compare
ae6cf83 to
4ef8f2c
Compare
4ef8f2c to
1f3a407
Compare
1f3a407 to
df14082
Compare
Contribution path
Problem
Solution
DUAL_OPENYAM_COLLECTIONand the ordinarydual-openyam-quest-collectionBlueprint.ViserVisualizationConfig(host="0.0.0.0"). Preserve model, kinematics, control tasks, and the base teleop's local-only default.API shape
CollectionFeature.source_kind:"snapshot"for images/measured state;"joint_position_updates"for accepted commands.samplingalias or automatic recording migration.dual_openyam/blueprints/learning_collection.py.schema.jsonplusrecording.mcaporrecording.db. Capture remains unaligned and native-rate; inspection and preparation share the offline evaluation pipeline.How to Test
With two OpenYAM arms, Quest, and two wrist RGB cameras:
uv run dimos run dual-openyam-quest-collection --daemon --recorder.recording recordings/fold-001 --recorder.format mcap --episodes.task "fold the towel" --controlcoordinator.left-can-port follower_l --controlcoordinator.right-can-port follower_r --left-wrist.hardware.camera-index /dev/video0 --right-wrist.hardware.camera-index /dev/video2 uv run dimos imitation collect--recorder.format sqlite.http://ROBOT_HOST:8095on a trusted network, or pass--manipulationmodule.visualization.host 127.0.0.1.dimos stop.fold-001, evaluated with the updated profile without changing its saved schema: 250 + 171 frames, zero filled, 16.55 ms maximum alignment error.AI assistance
Checklist