ROS Group 产品服务
Product Service 开源代码库
Github 官网
Official website 技术交流
Technological exchanges 激光雷达
LIDAR ROS教程
ROS Tourials 深度学习
Deep Learning 机器视觉
Computer Vision
ROS高效图传的一些方法
-
图传是大家经常会遇到的一个问题,ROS中图传的方法也有很多。下面就总结一下常用到的方法。
1.设置
ROS_MASTER_URI
的方式
通过设置ROS_MASTER_URI
,我们能够直接和远程主机进行通信。这样只要在远程端发出 image topic 然后在本地订阅这个 topic 就可以显示了。下面是一个具体例子
假设远程端已经有一个image topic 名称为/camera_node/image_raw
,远程端计算机名为xiaoqiang-desktop
, 其ip为192.168.0.130
。a. 在本地计算机
/etc/hosts
文件添加192.168.0.130 xiaoqiang-desktop
b. 在本地计算机设置
ROS_MASTER_URI
环境变量export ROS_MASTER_URI=http://xiaoqiang-deskstop:11311
c. 在本地计算机输入
rostopic list
就可以看到远程计算机的topic
了
在本地计算机上输入rosrun image_view image_view image:=/camera_node/image_raw
就可以通过
image_view
打开远程图传了。然而默认的传输方式图像是没有压缩的,占用的带宽非常大。可以通过添加压缩参数来传输。
rosrun image_view image_view image:=/camera_node image_raw compressed
这里实际上使用了image_transport这个包进行了压缩。这个包不仅能够压缩视频图像也可以压缩深度图像信息。不过这个压缩算法是逐帧压缩的,所以压缩的效率并不高,带宽使用率也比较高。但是实时性是比较高的。
2.使用
web_video_server
软件包
在远程端安装这个包。安装方法如下
在自己的工作空间中git clone https://github.com/RobotWebTools/web_video_server cd .. catkin_make
等待编译完成,启动节点
rosrun web_video_server web_video_server
启动后在本地浏览器输入
http://192.168.0.130:8080/stream?topic=/camera_node/image_raw&type=vp8
,就可以在浏览器中打开远程视频了。这种方法也是不仅能够压缩一般图像数据也可以压缩深度图像数据,同时可以设置多种压缩方式。由于视频传输是采用的标准的http格式,所以客户端读取视频的时候可以完全脱离ROS的框架,使用起来也比较容易。这种压缩方式压缩效率也比第一种高很多。但是实际使用中发现实时性要差一点,这个和客户端如果处理数据关系比较大,比如缓存设置的比较大,就会有较大的延时。