基于ROS2的视频传输

基于ROS2的视频传输,类似于图像传输,但是传输一些连续的图像帧。

视频传输参考链接:https://github.com/MaimonLab/video_io

图像传输是将一张图片发送到topic上,需要的节点会从这个topic上订阅并接收图片,视频传输与图像传输相似,只是视频传输是将视频帧一帧一帧的依次发送到topic上,图像传输发送的只是同一张图片。

include文件夹中是一些头文件,定义了可执行c++文件的一些参数;videos文件夹中是要传输的视频,videos_saved文件夹下是保存的视频;src文件夹中包含了c++运行程序,其中video_publisher.cpp用于创建发布节点并将视频分帧传输到topic上,video_saver.cpp用于创建订阅节点并从topic上下载视频帧并保存。具体代码解释如下:

1. video_publisher.cpp

首先是一些依赖库的导入,其中sensor_msgs用来定义ros中的图像数据格式,是image类型;image_transport发布和订阅图像的传输;cv_bridge用来进行imagecv数据格式和ROS数据格式之间的转换。

attachments-2022-09-gsnurUPn633055220fb97.png

然后是图像发布节点的功能定义,指定了所要传输的视频地址,运行代码需要注意更改此处地址,终端处于哪一文件夹下,此地址为当前文件夹下的相对地址,例如文件的绝对路径为~/HMT_ws/src/video_transport/video/rocket.mp4,根据当前代码指定的这个路径,需要终端处于~/目录下运行。其次视频传输需要设置起始帧为0。如果视频的地址设置存在错误,会报出找不到视频文件的错误。

attachments-2022-09-9lwshHKS6330557458494.png

接下来是一些参数的定义,包括视频流的总帧数,视频帧的宽度和高度,视频的帧率,视频帧的发布频率定位30/秒,以此频率传输所需时间,然后将获取到的这些参数打印到终端上。

attachments-2022-09-j7xE9UKb633055c76565a.png

然后是帧的发布,定义topiccamera/image,设置了质量传输协议QoS,然后定义了一个时间触发器,规定每隔多长时间触发一次publish操作。

attachments-2022-09-1xcvOnhU633055bb3a0f1.png

最后是publish函数,如果当前帧等于视频流的总帧数,就关闭节点不再发布;将读取到的cv格式的视频帧转换为ros可传输的image消息格式并发布到节点上去。

attachments-2022-09-VKw761N2633055ae6d2a3.png

2. video_saver.cpp

开始依然是一些依赖包的导入,并提供了一些可用图像编码转换的格式。

attachments-2022-09-y5Epg9rL6330566410457.png

然后是一些参数的定义,指定订阅topic为与发布者相同的camera/image,视频接收的频率与视频传输的频率一样,都是30/秒,指定视频的编码格式为mjpg,是一种压缩图像格式,然后指定了保存视频的相对路径,此处的路径与发布者的路径注意项一致,都是相对路径。然后下面定义了一些图像编码的格式转换选择,根据选择,输出视频的保存格式都为avi格式。

attachments-2022-09-zVHL4rQ963305656482f4.png

然后也定义了质量传输策略QoS,逐帧保存视频时要打开视频的保存路径,然后接收到的视频帧从ROSimage格式再转换为cv格式并写入。

attachments-2022-09-L7tywHgg633056488aaa6.png

最后,进行视频传输。

#Terminal 1
ros2 run video_transport video_saver

attachments-2022-09-L4bQgfBt6330571696331.png

#Terminal 2
ros2 run video_transport video_publisher

attachments-2022-09-SYDGy6Nr63305722c2daa.png

结果如下,videos_saved文件夹下增加了保存的视频流文件。

attachments-2022-09-GmlejK8r6330573393b4b.png
attachments-2022-09-TRQs26Yh6330573f76fa9.png


相关问题

0 条评论

请先 登录 后评论
王家瑶
王家瑶

5 篇文章

作家榜 »

  1. Panda-admin 37 文章
  2. 解弘艺 17 文章
  3. 高曾谊 16 文章
  4. 旺仔牛奶opo 15 文章
  5. 胡中天 14 文章
  6. LH 14 文章
  7. 罗柏荣 13 文章
  8. 林晨 12 文章