RoboMaster

标题: 【求助帖】ROS节点间发送图像的优化 [打印本页]

作者: 猫猫猫猫猫猫猫    时间: 2021-12-8 22:28
标题: 【求助帖】ROS节点间发送图像的优化
目前我们学校自瞄算法用的是传统算法+ROS,最近给跑了性能分析,发现图像用cv_bridge转换成图像消息再发送的时间占了大头(甚至比识别算法都慢)
想了好几天解决方案,没想出来太好的,想请教一下大家都是怎么做的
(目前有个想法是做共享内存,用一个标志位标识现在这块内存的读写情况,但感觉两个进程间要想办法同步,做不好可能还没有直接发送快)



作者: debug    时间: 2021-12-26 16:19
推荐ROS2, 利用composition机制把所有Node运行在一个进程中,DDS貌似会做相应优化。
作者: TOE_Rio    时间: 2022-2-12 15:02
大佬能不能解答一下为啥用ros,单纯做视觉不会更慢吗(来自一个手边没有设备测试的小白的疑惑
作者: shadowdancer    时间: 2022-2-12 23:09
之前查资料的时候偶然看见,cv::mat进行读写的话,直接用指针访问像素会比用迭代器快几十倍(但我不确定cvbridge是不是真的用迭代器读取的)。有没有想过不用cvbridge,直接把图片通过指针访问,按照二进制放到sensor_msg/image里呢?
作者: shadowdancer    时间: 2022-2-12 23:16
debug 发表于 2021-12-26 16:19
推荐ROS2, 利用composition机制把所有Node运行在一个进程中,DDS貌似会做相应优化。 ...

cv_bridge好像不是一个node吧?
作者: debug    时间: 2022-2-16 22:07
shadowdancer 发表于 2022-2-12 23:16
cv_bridge好像不是一个node吧?

嗯嗯,楼主的意思是cv_bridge+ros发送消息整个占大头,cv_bridge如果不采用压缩的格式的话,就是个内存copy,效率再怎么低,也不至于占大头,ros通信机制确实会引入延迟,我估计这部分可能占了大头。ROS2中的composition机制可以降低通信延迟,另外ROS2的某些DDS支持共享内存模式通信,和楼主的解决想法一样。
作者: shadowdancer    时间: 2022-2-17 10:13
debug 发表于 2022-2-16 22:07
嗯嗯,楼主的意思是cv_bridge+ros发送消息整个占大头,cv_bridge如果不采用压缩的格式的话,就是个内存co ...

牛啊!学到了!




欢迎光临 RoboMaster (https://bbs.robomaster.com/) Powered by Discuz! X3.2