首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在ros2中发布图像消息时的低帧速率

在ros2中发布图像消息时的低帧速率
EN

Stack Overflow用户
提问于 2022-03-10 07:18:02
回答 2查看 922关注 0票数 1

我有一个ROS节点,它从摄像机传感器获取图像帧,并将图像消息发布到sensor_msgs::image类型的主题中。我运行一个部署节点的ros2可执行文件。我注意到,相机传感器提供帧的速率是30 fps,但是由"ros2主题hz“返回的帧速率相对较低,即大约10 Hz。我使用"ros2主题回显“的输出验证了这一点,其中只有大约10条消息以相同的"sec”(第二)值发布。

因此,主题发布机制似乎涉及很大的开销。最有可能的是,整个图像帧被复制,导致低fps。我想确认的是,是否确实如此,即ros2是否在发布到主题时复制整个消息?如果是的话,有什么解决办法呢?使用进程内通信(使用组件)似乎是一种解决办法。但是请注意,我只部署了一个节点并将消息发布到其中的某个主题,也就是说,还没有第二个节点正在使用这些消息。

问候

EN

回答 2

Stack Overflow用户

发布于 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。

票数 2
EN

Stack Overflow用户

发布于 2022-09-07 19:59:54

你可以试着用usbcam来获取相机的馈电。此pkg位于cpp和传感器QoS中。所以你应该得到最好的速度。

安装:

代码语言:javascript
代码运行次数:0
运行
复制
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/未压缩

连接连接。

凸轮/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71420154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档