usb_cam ros包话题说明,image transport包使用
1. /usb_cam/image_raw
-
类型:
sensor_msgs/Image
-
内容: 摄像头采集的原始图像数据。
-
用途:
-
图像处理和分析,例如使用 OpenCV 处理图像。视频流可达10MB/s
-
图像流查看,例如用
rqt_image_view
进行显示:
-
2.
/usb_cam/image_raw/compressed
-
类型:
sensor_msgs/CompressedImage
-
内容: 对
/usb_cam/image_raw
的压缩版本。 -
压缩格式:
jpeg
或png
,具体取决于参数设置。其中jpeg是有损压缩,压缩率更高更快;png是无损压缩,压缩时间更长,一般视频流用jpeg压缩,图片或者深度图可以用png压缩。且他们都是对单帧图片进行压缩,没有考虑帧之间的联系,因此视频压缩率较低。 -
用途:
-
降低网络带宽占用,用于远程传输视频流。视频流可达1MB/s
-
可以通过
rqt_image_view
或其他工具直接查看压缩图像。
-
-
注意: 此话题默认可能未启用,需通过
image_transport
插件启用压缩功能。
sudo apt install ros-noetic-image-transport-plugins -y
3.
/usb_cam/image_raw/theora
(如果启用 image_transport
和 Theora 插件)
-
类型:
theora_image_transport/TheoraPacket
-
内容: theora(不是H.264) 压缩的视频流。theora是一个开源的编码解码库,相较于H264性能差一些,也不支持硬件加速,默认是cpu软件编码解码。但是是image tranport默认就支持的插件。theora相较于jpeg和png,考虑了帧之间的联系,因此编码后体积更小,我理解每帧只传输了帧之间的差异。
-
用途:
-
实现高效的图像流压缩和传输。视频流可达50KB/s
-
适用于带宽较低的网络环境。
-
-
使用方法: 需启用
image_transport
插件
sudo apt install ros-noetic-image-transport-plugins -y
读取这些话题,除了image_raw可以直接用ros subscriber订阅,其余经过压缩(编码)的图片话题,都不能用ros subscriber以sensor_msgs/Image形式
订阅,而是需要订阅相应的格式并进行解码,这个过程image_transport包已经做好了,在发布和订阅时用image_transport的API替代nodehandle就行:
使用image_transport订阅和发布:
#include <ros/ros.h>
#include <image_transport/image_transport.h>void imageCallback(const sensor_msgs::ImageConstPtr& msg)
{// ...
}ros::NodeHandle nh;
image_transport::ImageTransport it(nh);// 自动会发布带compressed后缀、theora后缀的话题,和image_transport plugins有关
image_transport::Publisher pub = it.advertise("/usb_cam/image_raw", 1);// 订阅压缩后的话题,注意回调函数里仍然是sensor_msgs::Image话题类型,
// 因为image_transport已经自动根据话题名,采用jpeg/png/theora方式解码了
image_transport::Subscriber sub = it.subscribe("/usb_cam/image_raw/compressed", 1, imageCallback);
image_transport::Subscriber sub = it.subscribe("/usb_cam/image_raw/theora", 1, imageCallback);
查看有哪些plugin:
rosrun image_transport list_transports
动态调整压缩参数:
rosrun rqt_reconfigure rqt_reconfigure
如果不使用动态调整工具,可以直接通过 ROS 参数服务器修改相关参数。例如:
rosparam set /image_transport/theora/quality 25
rosparam set /image_transport/theora/keyframe_frequency 30
rosparam set /image_transport/theora/target_bitrate 500000
测试话题带宽:
rostopic bw /usb_cam/image_raw