Aruco Localization Package
This is the aruco_localization package, which runs a ROS2 node that takes images from camera topics CAMERA_X/camera_info and CAMERA_X/image_raw, processes the ArUco code, and publishes the result in the /TF of the detected ArUco marker, mimicking Volvo's logic for tracking robot positions and generating navigation routes. A launch file is provided to run multiple nodes, with each node dedicated and assigned to a single camera.
The camera_enabled_ids variable found in config.sh is used to control which cameras are enabled.
Note: The marker link is named based on the camera. For example, if camera 164 detects an ArUco marker with ID of 12, the marker link in /tf is named camera_164_marker_12. This is not the final link that is used. The result from different cameras are accumulated and merged as a single frame with parent as robot_agent_12/odom and child robot_agent_12/baselink.
Note: The marker ID is tightly linked with the name for the robots, meaning an ArUco with marker_ID=1 will detect the robot with name: {namespace}/{marker_ID}. For example 'robot_agent_1'.
Important points to pay attention to:
- If two cameras are pointed at the same ArUco code, the system does not alternate between them, but instead shows the midpoint between the two detections.
- Inside the aruco_node, a callback logs the relative position of the newly created
aruco_linkfrom thebase_link. - Multiple cameras can be linked to the same ArUco code simultaneously.
Important launch files
aruco_detection_node.py: Handles ArUco detection and publishes the TF between the camera and marker. (e.g.camera_164_marker_12)aruco_pose_pub.py: A new node that listens to all transforms ofcamera_164_marker_12as input, and outputs the transform to either TF or ODOM asrobot_agent_12/odomand childrobot_agent_12/baselink.multi_detection.launch.py: Launch file for the new node.
Odom
These have to be valid for both humanoid and pallet trucks
- world: is the origin (0,0,0)
- odom: is in the initial pose of the robot
- base_link: tracks the movement of the robot relative to the odom
