我有一个ROS节点,它从摄像机传感器获取图像帧,并将图像消息发布到sensor_msgs::image类型的主题中。我运行一个部署节点的ros2可执行文件。我注意到,相机传感器提供帧的速率是30 fps,但是由"ros2主题hz“返回的帧速率相对较低,即大约10 Hz。我使用"ros2主题回显“的输出验证了这一点,其中只有大约10条消息以相同的"sec”(第二)值发布。
因此,主题发布机制似乎涉及很大的开销。最有可能的是,整个图像帧被复制,导致低fps。我想确认的是,是否确实如此,即ros2是否在发布到主题时复制整个消息?如果是的话,有什么解决办法呢?使用进程内通信(使用组件)似乎是一种解决办法。但是请注意,我只部署了一个节点并将消息发布到其中的某个主题,也就是说,还没有第二个节点正在使用这些消息。
问候
发布于 2022-03-15 21:51:36
我可以想到几个原因,为什么ros2 topic hz
报告的频率比预期的要低。
Python发布程序和大数据(如图像)存在已知的性能问题。已经作出了改进,但仍然存在于较早版本的ROS 2(银河或更早版本) (相关的Github问题)中。我不知道这些问题是否会影响Python订阅,但我认为从C转换到Python ( ros2 topic hz
正在做的)会有一些开销。您可以尝试订阅一个C++节点,并查看这是否有任何不同。
底层机器人中间件(RMW)也可能是延迟增加的一个来源。在试图发送大数据的过程中,已经记录了各种各样的问题。在为用例调优中间件时,您可以查阅以下文档:https://docs.ros.org/en/rolling/How-To-Guides/DDS-tuning.html
为了利用进程内的通信,我建议在C++中将发布节点和订阅节点编写为组件,它们具有在自己的进程中运行或加载到公共进程中的灵活性(允许它们使用指针传递数据)。您也可以将RMW配置为使用共享内存(不知道您是如何使用ROS的),但是我不会在这里讨论这个问题,因为它取决于您使用的是什么RMW。
发布于 2022-09-07 19:59:54
你可以试着用usbcam来获取相机的馈电。此pkg位于cpp和传感器QoS中。所以你应该得到最好的速度。
安装:
sudo apt get install ros-<ros2-distro>-usb-cam
ros2 run usb_cam usb_cam_node_exe
ros2 run image_transport republish compressed raw --ros-args --remap in/compressed:=image_raw/compressed --remap out:=image_raw/uncompressed
您可以回显主题:图像_raw/未压缩
连接连接。
https://stackoverflow.com/questions/71420154
复制相似问题