MoveIt manipulation with a perception-fed planning scene, related 3D lifting of 2D vision output and improvements to motion detection. - #38
Open
aleph-ra wants to merge 95 commits into
Open
Conversation
…/trackings from multiple cameras
…r detections3d output
…dds validators to all literals
… before activation
…c to resize incoming input and sets correct param for ncpu
… as well (irrelevant for perf though)
…removes unnecessary utils
… adds blurring before frame difference calculation
…to make motion detection more robust
…based motion detection
…obots rotating in please similar to robots with above threshold speed
…motion is detected from video
… arrived to avoid frame mismatch
…utation of motion detection
…ting a depth detector
…s in motion detection
…in base component overload
… give depth images in the right format for zero copy
…s calculation perception3d utils
…on and filtering happens in core
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds classical, collision-aware manipulation to EmbodiedAgents: a MoveIt component that plans and executes through a running
move_group, and the perception pipeline that lets it plan around what the robot's cameras actually see. Requires sugarcoat with the external-launch support (automatika-robotics/sugarcoat#61, merged).The MoveIt component (
MoveManipulatoraction server)pose,joints,named(SRDF targets read from the livemove_group),cartesian(fraction-checked), and the sequence modespickandplace. Pose goals carrying an explicit orientation plan on a dedicated oriented IK group with a snug tolerance (oriented_group_name,oriented_orientation_tolerance) — the default tolerance stays deliberately wide so unoriented goals remain solvable on underactuated arms, which would otherwise make an explicit attitude request vacuous.pick: resolve the target (scene id → detection label by best rank → nearest to a pose withintarget_match_radius) → approach → open → straight-line descent with contact permitted, holding the orientation the approach achieved → grasp → attach with SRDF-derivedtouch_linksat the measured extents (planning padding comes off the thing the arm holds) → lift.approach_mode="side"serves grippers whose mouths take objects horizontally: pre-grasp behind the target at grasp height along the base→target bearing, the descent becomes the slide in, and the lift goes straight up, position-only.grasp_orientationgives unoriented picks the arm's known-good attitude, rotated to the target's bearing so one calibration serves every direction.placeis the inverse; the released object stays in the scene where it was set down.placearound detach→retreat. After an interrupted pick or place the allowance and a scene freeze persist until a motion succeeds, so the arm can always retreat from the object it is parked against (no more start-state-in-collision deadlocks).cartesian_group_namepairs position-only IK for pose goals with orientation-tracking IK for the Cartesian validator's hardcoded per-step precision; an FK client holds the current end-effector orientation wherever none is requested.GripperCommand; all capabilities exposed as component actions, discoverable as tools by Cortex.The planning scene
Detections3Dinput mirrored into move_group as named collision objects (det__<label>_<rank>), refreshedmanually,on_goal, orcontinuously — always as a single diff, with TTL eviction bridging detection dropouts and a label allow-list (scene_detection_labels) keeping background furniture out. Scene failures degrade, never abort a motion.clear_octomapas component actions.Perception: 2D → metric 3D
Bbox3D/Detections3Dmessages (map 1:1 ontovision_msgs/BoundingBox3Dand MoveIt BOX primitives), with callback, type wrapper and frame ids on all vision messages.CameraInfoaux inputs, robust depth statistics, per-boxdepth_validity, boxes published directly in the consumer's planning frame.det__the red mug_0→pick, target_object: "the red mug"with no glue. Arun_taskcomponent action runs the configured task once on a planner's query and returns what was published, including located objects with metric centers;describestays pinned to general VQA.Memory and language context
Detections3Dlayer and stores one observation per box at the object's own position instead of one text blob at the robot's — which also makes emem's entity merging by spatial radius behave as designed. Contract: publish the layer in the position topic's world frame (the lift'sdetections_framedoes the transform).Detections3Das prompt context; its context string carries the metric positions ("In odom: orange at (2.00, 3.00, 0.05)"). The 2D detection strings were simplified to plain label joins, retiring the vendored pluralization module (−600 lines).RoboBrain2defaults to theBAAI/RoboBrain2.0-3Bcheckpoint.Motion detection
frame_difference, and an unset or unknown estimator is rejected at configuration — previously the defaultNonesilently declared motion on every frame.frame_differenceis now the textbook version: blur, signed difference, a fixed changed-pixel threshold, and a gated global-shift removal so auto-exposure/white-balance steps and lights switching — which move the whole frame at once — do not register as motion.optical_flowthresholds on flow magnitude, so leftward and upward motion count and both estimators share the meaning ofthreshold.mono8, RealSense infrared) and 16-bit mono are processed (fixed rescale) instead of crashing in the color conversion.ego_turn_threshold, derived from odometry heading — a robot turning in place has no linear speed while the whole image sweeps), and resets its reference frame during the pause so stopping does not register as motion.video_preroll_frames, message references only, bounded) and close with the debounce tail, so a clip shows the scene before and after the event.image_scaledownscales frames before estimation (default 0.5: optical flow ~5× cheaper at VGA, the ROI polygon scales along). With a position topic wired, cloud history is not accumulated before the first odometry reading, which used to produce a false motion burst at startup.