Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/MRRP-lab/arm-demos/llms.txt

Use this file to discover all available pages before exploring further.

The ARM Demos suite communicates through a set of well-defined ROS 2 topics, services, and TF frames. Understanding these interfaces lets you integrate additional nodes, debug data flow with ros2 topic echo, or call services directly with ros2 service call. All nodes run in the default namespace unless otherwise noted.

Topics

Published topics

TopicMessage typePublisher nodeRateDetails
/oakd_pro/rgb/imagesensor_msgs/ImageCameraPublisher30 Hz1280 × 720 RGB frames captured from the OAK-D Pro wrist camera. Encoding: bgr8. Frame ID: oakd_pro_camera_rgb_optical_frame_wrist. QoS: sensor data profile.
/oakd_pro/rgb/camera_infosensor_msgs/CameraInfoCameraPublisher30 HzIntrinsic calibration matrix sourced directly from the OAK-D Pro on-device calibration. Distortion model: plumb_bob with zero coefficients (undistorted output). Stamped with the same timestamp as the paired image message.
/yolo/annotatedsensor_msgs/ImageDetectionNode20 HzRGB image with YOLO instance-segmentation annotations drawn by ultralytics. Driven by a 0.05 s timer; publishes only when an image has been received from /oakd_pro/rgb/image. Encoding: bgr8.

Subscribed topics

TopicMessage typeSubscriber nodePurpose
/oakd_pro/rgb/imagesensor_msgs/ImageDetectionNodeReceives raw camera frames for YOLO inference. The latest frame is cached and processed on the 20 Hz detection timer.
The CameraInfoRepublisher node additionally subscribes to /oakd_pro/left/camera_info and /oakd_pro/right/camera_info, and republishes calibrated stereo info to /oakd_pro/left/camera_info_calibrated and /oakd_pro/right/camera_info_calibrated. It is not launched by default but is available in the colman_perception package.

Services

ServiceTypeProvider nodeDescription
/stopstd_srvs/TriggerStopControl (in both arm_demo and pick_and_place)Immediately halts trajectory execution by calling stop_execution(auto_clear=True) on the MoveIt trajectory execution manager, and sets an internal stop event that prevents new motions. Returns success=true with message "Stopped" (arm_demo) or "Successfully Stopped" (pick_and_place).
/io_and_status_controller/set_iour_msgs/SetIOUR ROS 2 driver (client in VacuumControl)Controls digital I/O on the UR controller. The VacuumControl node calls this service with fun=FUN_SET_DIGITAL_OUT=1, pin=0 to toggle the vacuum gripper on and off.

Calling the stop service

You can trigger an emergency stop from the command line at any time:
ros2 service call /stop std_srvs/srv/Trigger

Calling the vacuum service

Toggle the vacuum on (state 1.0) or off (state 0.0):
# Turn vacuum on
ros2 service call /io_and_status_controller/set_io ur_msgs/srv/SetIO \
  "{fun: 1, pin: 0, state: 1.0}"

# Turn vacuum off
ros2 service call /io_and_status_controller/set_io ur_msgs/srv/SetIO \
  "{fun: 1, pin: 0, state: 0.0}"
The /io_and_status_controller/set_io service is only available when the UR robot driver is running and connected to the robot. It is not available in mock hardware mode.

TF frames

The following coordinate frames are relevant across the ARM Demos nodes. All frames are expressed relative to base_link in the TF tree.
FrameDescription
base_linkRoot frame of the robot. All Cartesian pose goals in go_to_pose are expressed in this frame.
tool0End-effector tool flange as defined in the UR URDF. Used as the pose_link in arm_demo.py.
vacuum_tip_linkTip of the vacuum gripper. Used as the pose_link in pick_and_place.py so that Cartesian goals target the vacuum cup rather than the flange.
oakd_pro_camera_rgb_optical_frame_wristOptical frame of the wrist-mounted OAK-D Pro RGB camera. All image and camera_info messages are stamped with this frame ID.
tag_1TF frame published by the AprilTag detector for tag ID 1. Used by TagLookup.get_tag_pose() in pick_and_place.py as the pick target.
tag_20TF frame for AprilTag ID 20. Used during eye-in-hand calibration to relate the camera to the robot base.
To inspect live TF data, run ros2 run tf2_tools view_frames while the robot driver and bringup nodes are active. The resulting PDF shows the full frame tree including all AprilTag frames when the detector is running.

Build docs developers (and LLMs) love