-
Notifications
You must be signed in to change notification settings - Fork 10
Feature: Detection3D and Object support to Manipulation Module #1236
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…sotm method implementation
…ator' into feature/mustafa-detection3d-pcd-manipulation
…izer (#1227) * with seperate preview urdf * running meshcat on its dedicated thread allows for real time preview update * added meshcat viz executor shutdown * removed sleep on meshcat thread now time.sleep is only called in rpc thread * preview urdf is now persistent and does not disappear after preview * wrapped meshcat threadexecutor in its class
Greptile OverviewGreptile SummaryThis PR integrates 3D object detection from perception into the manipulation planning system, enabling collision-aware motion planning around detected objects. Key additions:
The implementation demonstrates good engineering practices: async subscription prevents blocking, convex hull computation happens outside locks, eager TF init avoids Dask worker deadlock, and centered mesh coordinates prevent transform bugs. Confidence Score: 4/5
Important Files Changed
Sequence DiagramsequenceDiagram
participant Perception as ObjectSceneRegistration
participant ManipModule as ManipulationModule
participant ObsMonitor as WorldObstacleMonitor
participant Drake as DrakeWorld
participant Client as ManipulationClient
Note over Perception: Camera captures RGB-D
Perception->>Perception: YOLO-E detection
Perception->>Perception: ObjectDB deduplication
Perception->>ManipModule: publish(objects) via port
ManipModule->>ObsMonitor: on_objects(objects)
ObsMonitor->>ObsMonitor: Cache objects with timestamps
Note over Client: User calls refresh(min_duration)
Client->>ManipModule: RPC: refresh_obstacles(5.0)
ManipModule->>ObsMonitor: refresh_obstacles(5.0)
ObsMonitor->>ObsMonitor: Filter objects by duration
ObsMonitor->>ObsMonitor: Compute convex hulls (outside lock)
ObsMonitor->>Drake: add_obstacle(mesh) for each
Drake->>Drake: Register geometry with proximity props
ObsMonitor-->>Client: List of added obstacles
Client->>ManipModule: RPC: goto_object("cup", dz=0.1)
ManipModule->>ManipModule: plan_to_pose(center + offset)
ManipModule->>Drake: IK + motion planning (with obstacles)
ManipModule-->>Client: Success
Client->>ManipModule: RPC: preview()
ManipModule->>Drake: animate_path() on preview robot
Client->>ManipModule: RPC: execute()
ManipModule->>ManipModule: Coordinator.task_invoke("traj_arm")
loop 10Hz TF publishing
ManipModule->>Drake: get_ee_pose() + get_link_pose("link7")
ManipModule->>ManipModule: tf.publish(EE, link7)
end
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
12 files reviewed, no comments
Problem
Detected 3D objects from perception cannot be used as collision obstacles for motion planning.
ManipulationModule lacks TF publishing needed for eye-in-hand camera transform chains.
Solution
ObjectSceneRegistration publishes deduplicated objects via new objects output port with pointclouds.
ManipulationModule subscribes async via observable() and caches objects in WorldObstacleMonitor.
Dedicated 10Hz TF thread publishes EE and tf_extra_links poses using scratch_context().
Eager self.tf init prevents autoconf() blocking in Dask workers.
WorldObstacleMonitor syncs BOX obstacles to Drake on refresh() with opt-in convex hull meshes.
pointcloud_to_convex_hull_obj centers points at origin to avoid double-transform with pose.
ManipulationClient adds refresh(), detections(), goto_object(), and perception status commands.
xarm_perception blueprint wires xArm7 + eye-in-hand RealSense + ObjectSceneRegistration + Foxglove.
Breaking Changes
None.
How to Test
closes DIM-353
closes DIM-397
closes DIM-396