How to use ZED for localization when the camera is mounted on a robot arm end-effector

Hi everyone,

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.

Thanks in advance for your help!

Lee

Hi @PhocidaeGo
the ZED ROS2 Wrapper broadcasts the position of the camera base with respect to the odometry frame, ignoring the base_link:

That is: camera_linkodommap.

If the transform from the base_link to the camera_link changes, it’s not a problem for the ZED node.

Hi Myzhar,

Thank you very much for your reply! I understand that zed node always publishes tf camera_linkodommap, for my mobile robot base, I can just add tf base_linkcamera_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)?

Thanks!

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.

This is the correct chain to use