ArUco Markers
DelibFlow uses ArUco markers to give TiAGo a visual anchor point for object grasping.
The tiago_aruco_broadcast package ties together marker detection and TF publishing
so that behavior tree nodes can get the object’s pose directly from the TF tree.
Launch everything at once
The easiest way to get ArUco detection running is through the bringup launch file, which starts it automatically:
ros2 launch tiago_demos tiago_bringup.launch.py
If you need to run it standalone:
ros2 launch tiago_aruco_broadcast aruco.launch.py
There are two nodes involved, each doing a different job.
ArUco Recognition Node
This node reads the camera feed and detects markers in the image.
ros2 run ros2_aruco aruco_node
Topics subscribed
ROS Topic |
Interface |
Description |
|---|---|---|
|
Raw image from the robot’s camera |
|
|
Camera intrinsics and extrinsics (needed for pose estimation) |
Topics published
ROS Topic |
Interface |
Description |
|---|---|---|
|
Array of detected marker poses with their IDs |
|
|
All detected poses in a single message, handy for RViz visualization |
Parameters
Parameter |
Default |
Description |
|---|---|---|
|
|
Physical size of the marker in meters |
|
|
ArUco dictionary used to generate the markers |
|
|
Image topic to subscribe to |
|
|
Camera info topic to subscribe to |
|
(empty) |
Camera optical frame name |
ArUco TF Broadcast Node
This node takes the detected marker poses and broadcasts them as TF transforms. This is
what allows behavior tree nodes to look up the object’s position in the map or
base_link frame.
ros2 run tiago_aruco_broadcast aruco_broadcast
Topics subscribed
ROS Topic |
Interface |
Description |
|---|---|---|
|
Detected marker poses coming from the recognition node |
Topics published
ROS Topic |
Interface |
Description |
|---|---|---|
|
Transform from the camera frame to each detected marker |
How it all fits together
The recognition node detects markers and publishes their poses. The broadcast node
takes those poses and puts them into the TF tree. The behavior tree node
tiago_set_target_using_aruco_marker then reads the TF transform for the target
marker and sets the grasp goal on the blackboard. This is the pipeline that the
pick_object_example demo uses.