ROS交流群
ROS Group
产品服务
Product Service
开源代码库
Github
官网
Official website
技术交流
Technological exchanges
激光雷达
LIDAR
ROS教程
ROS Tourials
深度学习
Deep Learning
机器视觉
Computer Vision

ROS高效图传的一些方法


  • administrators

    图传是大家经常会遇到的一个问题,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的框架,使用起来也比较容易。这种压缩方式压缩效率也比第一种高很多。但是实际使用中发现实时性要差一点,这个和客户端如果处理数据关系比较大,比如缓存设置的比较大,就会有较大的延时。

    参考资料:
    ROS wiki: image_transport
    ROS wiki: web_video_server