I’m currently integrating a ZED camera into a mobile manipulator setup. The ZED is mounted on the end-effector of a robotic arm, and the arm itself is mounted on a mobile base.
I understand from the documentation (e.g., ZED ROS2 Integration Guide: ZED integration on a Robot - Stereolabs) that when use_zed_localization is set to true, the TF tree is built such that <camera_name>_camera_link becomes the parent of base_link. This makes sense when the camera is rigidly mounted to the robot base, but in my case, the camera moves relative to the base as the arm moves.
This causes a TF conflict, because my robot’s URDF defines:
base_link → … → ee_link → zed
My question:
What is the recommended setup for localization for the base when the ZED is mounted on a moving arm? I want to use the ZED’s visual odometry/localization output to estimate the mobile base pose, even though the camera is moving due to the arm’s joints.
Thank you very much for your reply! I understand that zed node always publishes tf camera_link ← odom ← map, for my mobile robot base, I can just add tf base_link← camera_link , then I locate my mobile base easily.
However, right now I want to attach the zed camera to the end effector of my robot arm, which is mounted on the robot mobile base. So I will have the kinematic tree of the mobile base with arm: base_link → arm links → ee_link → zed_camera_link. But from my understanding to the tutorial, if I want to enable zed localization, zed_camera_link should be the parent link of robot, which means I will have: map -> odom -> zed_camera_link -> ee_link -> … -> base_link
which is conflict to my kinematic chain.
So this is my confusing point, can you tell me which chain should I use for the whole robot (mobile base+ arm + zed camera)?
You can create the TF chain that you prefer. The tutorial provides the simplest configuration as an example.
What’s important is that you consider the zed_camera_link as the main frame if you use the TF provided by the ZED ROS2 Wrapper as the main source of localization.