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

时间:2019-06-09 16:43:53

标签: c++ opencv ros

我们正在尝试使用ros和turtlebot开发自动驾驶。我试图从raspicam_node获取图像并通过车道仪式开车,但是从turpicBot3上的raspicam_node发布太慢了,当然,从远程PC获取图像很慢,因此很难获取图像。 / p>

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

TurtleBot和远程PC之间的连接已连接到100Mbps的“ IpTime”无线网络计算机。

是因为无线连接速度慢吗?还是必须设置TurtleBot3的raspicam_node?

1 个答案:

答案 0 :(得分:1)

答案是不对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

您必须保持预设的超快调谐零延迟

通过这种方式,由于您不进行任何处理而是仅通过Internet转发,因此延迟应该最小。在GCS中,您可以使用opencv或其他必要的工具来获取http或udp服务器地址

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

如有必要,将摄像机流的大小减小为640 * 480。它将加快您的输出速度。即使质量最低的无线设备也应该能够处理640 * 480压缩流。

ROS仅需要以较低的更新频率来处理控制命令