Detects configured ArUco markers and publishes scene-object poses as ROS 2 detections, TF frames, and optional RViz markers.
Create a workspace virtual environment with ROS packages visible, then install the Python dependencies:
cd ~/ws
uv venv --system-site-packages
uv pip install -r src/aruco_perception/requirements.txtThe YAML launch file is launch/table_setup.launch.yaml:
ros2 launch aruco_perception table_setup.launch.yaml \
publish_markers:=trueIt starts the static RealSense driver, anchors table_anchor from marker 0, and subscribes
object detection to every sensor in the configuration. Drivers for additional cameras must
publish their configured image, camera-info, and TF data separately.
Launch arguments:
config_path: setup YAML; defaults to the installedconfig/table_setup.yml.max_tf_age: seconds a higher-priority sensor remains preferred after observing a marker, and the maximum age of a marker pose used for object detection; defaults to0.5.publish_markers: publish labeled pose arrows on/recognized_object_markers; defaults tofalse.
config/table_setup.yml contains:
sensors: image and camera-info topics for each camera, in priority order. For each marker, the first sensor with a fresh observation is used; later sensors are automatic fallbacks.model: the SceneX model location. Withpath_type: ros,packageandpathare resolved through the ROS package index and converted to an RDF graph at startup.ref_frame: the common output frame, currentlytable_anchor.frames: frame IRIs, marker IDs and sizes, or fixed offsets from marker frames. Frames with an IRI and nofixedentry are inferred from the RDF model relative toref_frameand published as static TFs. Afixedlist defines ordered marker alternatives for a detected movable frame. Translation offsets are metres;roll,pitch, andyaware radians.objects: maps configured frames to names and IRIs published invision_msgs/Detection3DArray.
/recognized_objects(vision_msgs/Detection3DArray): available object poses intable_anchor./tf_static:table_anchor -> camera_linkafter marker 0 is observed, plus RDF-derived fixed frames such asrobot_table_topandrk_table_top./tf: detectedtable_anchor -> marker_<id>transforms and the derivedtable_anchor -> drawer_handletransform while a drawer marker is fresh./recognized_object_markers(visualization_msgs/MarkerArray): optional green pose arrows with white object-name labels./world_pose_node/debug_image: static-camera image with detected marker axes.
The drawer detection and TF are published only while marker 1 or marker 2 is visible and fresh.