基于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. 解弘艺 17 文章
  2. 高曾谊 16 文章
  3. 胡中天 14 文章
  4. 旺仔牛奶opo 14 文章
  5. LH 14 文章
  6. 罗柏荣 13 文章
  7. Panda-admin 13 文章
  8. 林晨 12 文章