如何使用usb_cam和image_transport_plugins插件进行usb摄像头的视频获取和实时图像传输


前言

最近因为项目驱动需要进行一套多机无人系统的搭建,由于需要实现多机系统信息交互,所以选择使用ROS2(这里我使用的是foxy版本),在这套无人系统中设计到多无人机和多无人车的图传问题,这就需要使用ros2的通讯机制(ros2相比于ros1取消了master的节点形式,通信起来会很容易),同时还需要将主机上的摄像头画面通过usb_cam这个驱动程序获得,并通过image_transport_plugins插件压缩后进行实时传输(这里不进行压缩的话传输所占用的带宽太大了,可能会有卡顿)。


一、使用usb_cam驱动进行usb摄像头的图像获取

这里先新建自己的工作空间,然后将usb_cam的驱动包源码下载下来
下载地址:

https://github.com/ros-drivers/usb_cam/tree/ros2

下载以后编译,然后在图示界面开终端执行 . install/setup.bash
在这里插入图片描述
然后执行ros2 run usb_cam usb_cam_node_exe这时会提示无法打开和找到某个yaml文件的错误和警告,可以忽略,没影响。
在这里插入图片描述
这时开一个终端,使用ros2 topic list命令查看topic可以看到有image_raw的topic
然后可以有两种方式查看摄像头的画面
1.在终端执行ros2 run usb_cam demo_launch.py
就会有一个image的窗口出现,显示摄像头的图像界面
在这里插入图片描述
2.打开rviz2,add topic,然后选择image,左下角会显示no image,此时只需要把Fixed Frame改为default_cam即可(需要手动输入),然后image窗口就有图像了。
在这里插入图片描述
注意:这里可能会出现有些同学执行完上面的步骤以后打开的图像很模糊,不清晰的情况,这是因为像素没有调整对,如果有请按下面的步骤调整一下
1.执行完ros2 run usb_cam usb_cam_node_exe命令后都会有推荐的像素格式,这里我用的摄像头是1920*1080,进入如图所示的文件目录,打开图中的代码:
在这里插入图片描述
2.找到62.63行在这里插入图片描述
修改为你的相机最佳的像素规格。
3.然后重新编译,执行. install/setup.bash,然后重新打开相机驱动,获取图像,这个时候就是清晰的画面了。

二、使用image_transport_plugins插件进行图像压缩传输

1.安装image-transport-plugins插件

sudo apt install ros-galactic-image-transport-plugins

2.重新运行usb_cam驱动程序

ros2 run usb_cam usb_cam_node_exe
这个时候在使用ros2 topic list查看topic可以看到image_raw/compressed这个topic在这里插入图片描述
但是可惜的是还没有rviz2使用image_transport。我确定有人可能正在某个地方从事这项工作。
你可以通过rqt来查看这个topic下的图像
在这里插入图片描述
通过rqt可以清晰的看出压缩后的画质变差了一点点,但是完全不影响观感。重要的是压缩后该topic的传输所占的带宽下降了很多。

3.在另外的电脑上面查看topic并且显示画面

通过ros2的通信机制进行通信以后,就可以在其他电脑上面通过ros2 topic list也查看到上面image_raw和image_raw/compressed这两个topic,后续可以通过rqt的方式查看摄像头端的实时视频传输画面。

这里附上查看压缩前和压缩后所占用的带宽
在这里插入图片描述
可以看到压缩后该topic所占的带宽比原来未压缩的topic小的多的多,传输起来会流畅很多,多机传输也不成问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值