我可以加快OpenCV的'raspicam_node'发布速度吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (16)

我们正在尝试使用ros和turtlebot开发自动驾驶。我正试图从raspicam_node获取一个图像并通过一个车道仪式来驱动,但是从turtleBot3上的raspicam_node发布它太慢了。当然,从远程PC获取它的速度很慢,因此很难获得图像。

因此,我们通过仅存储图像并将“已接收”打印到控制台中来测试它以减慢速度。但是,我们已经验证控制台中的文本每10秒输出一次。因此,我认为这不是我们实现的代码的开销。

TurtleBot和远程PC之间的连接连接到100Mbps的'IpTime'无线网络机器。

是因为这种慢速无线连接还是我必须设置TurtleBot3的raspicam_node?

提问于
用户回答回答于

答案是不在Raspberry PI中对OpenCV或ROS进行任何处理/发布。这是一个非常慢的平台,不允许你做复杂的操作。

我的建议是在处理大图像数据时,通过Raspbeery PI上的所有ROS和OpenCV。

(1)如果你真的必须使用ROS,至少要使用来自的压缩流

请看这里了解它是如何完成的http://wiki.ros.org/image_transport

rosrun image_transport republish [in_transport] in:=<in_base_topic> [out_transport] out:=<out_base_topic>

(2)另一种低成本的发送方式是使用v4l2驱动程序,所以它的任何一个

sudo modprobe bcm2835-v4l2
cvlc v4l2:///dev/video0 --v4l2-width 1920 --v4l2-height 1080 --v4l2-chroma h264 --sout '#standard{access=http,mux=ts,dst=0.0.0.0:22322}'

或直接使用ffmpeg发送

ffmpeg -f v4l2 -framerate 30 -video_size 800x448 -i /dev/video0 -i /home/pi/Desktop/sound/logo.png -codec:v h264 -r 30 -s 800x448 -bf 0 -g 30 -bufsize 8000k -maxrate 8000k -filter_complex "[0:v][1:v] overlay=(W-w)/2:(H-h)/2:enable='gte(t,1)'" -preset ultrafast -tune zerolatency -f h264 udp://192.168.5.10:23003

你必须保持-PRESET超快-tune zerolatency

通过这种方式,滞后应该是最小的,因为你不做任何处理,而只是通过互联网转发。在GCS中,您可以使用opencv或从http或udp服务器地址获取所需的其他工具

然后,您可以使用地面控制站上的图像流执行任何操作。例如单眼深度估计,物体检测,定位。

如果需要,将摄像机流的尺寸减小到640 * 480,它将加快输出速度。即使是质量最低的无线也应该能够处理压缩的640 * 480流。

ros只需要在低更新频率下处理控制命令

扫码关注云+社区

领取腾讯云代金券