ZED2i ROS IMU Topic lost


We are using two ZED2i with ROS wrappers. They are connected to Xavier NX onboard ports and operated by zed_multicam_single_nodelet.launch.

We are using them in an offload environment. But the cameras continuously lost the IMU signal, and it’s random. Sometimes camera1 doesn’t give IMU topic, sometimes camera2, and sometimes both. This situation usually happens when the platform starts moving and the cameras vibrate.

Here’s our question:

  1. Do you have any idea about this situation? How can the connection be stabilized in such a harsh environment?
  2. I realized the IMU’s polling rate is very high (~450hz), and I think it might be helpful to drop the rate to a reasonable range (~100hz). How can I modify it?

Thank you!

Processing: Untitled picture.png…

Hi @heesup
if you are sending the IMU topics over the network maybe you are saturating the bandwidth. Furthermore, if you are connecting more than a camera to the same Xavier NX.
You could try to use the throttle tool to reduce the frequency of the transmitted topics:

Thank you for your reply.

The cameras were connected via USB ports, and I’ve checked that both cameras were connected and sent IMU and image data. But sometimes, one of IMU topics are no longer published after the 90s ~ 5mins.

The ROS throttle function seems a promising solution, and I’ll try it.
I also found const double mSensPubRate = 400.0 variable in the zed_nodelets/src/zed_nodelet/include/zed_wrapper_nodelet.hpp. Would it better to use ROS throttle function rather than edit the variable and recompile the library?

Thank you in advance.

No, mSensPubRate is a variable that was introduced for a feature of the SDK that has not been added.
So do not change it.


I tried ROS throttle but it also dropped one IMU signal of two camera.

I replaced the launch file from zed_multicam_single_nodelet.launch to zed_multi_cam.launch and it showed more reliable connection with IMU signals.

What’s the main difference between two launch files?

Thank you.

The first launch uses the nodelet to run each node in a single process, the second create a separated process for each node.