我可以加快OpenCV的'raspicam_node'发布速度吗?
Can I speed up the 'raspicam_node' publish speed of OpenCV?
我们正在尝试使用ros和turtlebot开发自动驾驶。我正在尝试从raspicam_node获取图像并以车道仪式驾驶,但是在 turtleBot3 上从raspicam_node发布太慢了.当然,从远程 PC 获取它很慢,所以很难获得图像。
因此,我们测试了它,通过仅存储图像并将"接收"打印到控制台中来减慢速度。但是,我们已验证控制台中的文本每 10 秒输出一次。因此,我认为这不是我们实现的代码的开销。
TurtleBot和远程PC之间的连接连接到100Mbps的"IpTime"无线网络机器。
是因为这种缓慢的无线连接还是我必须设置 TurtleBot3 的raspicam_node?
答案不是在Raspberry PI中的OpenCV或ROS上进行任何处理/发布。这是一个非常慢的平台,不允许您执行复杂的操作。
我的建议是在处理大型图像数据时,通过Raspberry 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
您必须保持 -预设的超快 -tune 零延迟打开
这样,延迟应该是最小的,因为您不进行任何处理,而只是通过互联网转发。在GCS中,您可以使用opencv或其他必要的工具来获取http或udp服务器地址。
然后,您可以对地面控制站上的图像流执行任何操作。 例如单目深度估计、物体检测、定位。
如有必要,将相机流的大小减小到640480.,它将加快输出速度。即使是质量最低的无线也应该能够处理压缩的 640 480流。
ros只需要在低更新频率下处理控制命令
- 为什么在读取文件大小时文件IO速度会发生变化
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 两个连续的 OpenMP 并行区域会相互减慢速度
- 查找标准::hash_map与标准::矢量的速度
- 加快在C++中读取/处理日志文件的速度
- 为什么这些算法的运行速度比它们应该的要快?
- 如何提高文件的读取速度?
- 通过libpqxx提高PostgreSQL数据库的更新速度
- 使用 IMFSinkWriter 编码的视频的播放速度会根据宽度而变化
- 计算车辆之间的距离并设置速度,使距离保持不变,例如 5 米
- 如何加快大字符串的解析速度?
- 如何比较两个函数的速度和性能
- 线程相互减慢速度
- 多线程减慢程序速度:无错误共享,无互斥锁,无缓存未命中,无小工作量
- 使用 Unity 构建加快C++构建速度,并减少标头依赖项
- 从 OpenCV 3 切换到 OpenCV 4 会导致网络摄像头以最大 5 fps 的速度录制,而不是通常的 30 f
- 曼德布洛特切片图像以提高速度