最主要的功能在于把相机的 rtsp 视频流
转换为 ros topic
发布出来,使其他节点可以通过订阅的形式获取视频流数据。
注:官网的安装命令 sudo apt-get install ros-
已失效。
前提:需已安装配置好 catkin
cd ~/catkin_ws/src
git clone https://github.com/robotics-in-concert/rocon_devices
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="rocon_rtsp_camera_relay"
source devel/setup.bash
其中 git clone https://github.com/robotics-in-concert/rocon_devices
如果下不动,也可以手动在可以访问 github
的电脑上下载好代码,解压并放在 ~/catkin_ws/src
路径下。
打开 ~/catkin_ws/src/rocon_devices/rocon_rtsp_camera_relay/launch
路径下的 rtsp_camera_relay.launch
文件
该文件原内容如下:
<launch>
<arg name="video_stream_url" default="$(env ROCON_RTSP_CAMERA_RELAY_URL)"/>
<node pkg="rocon_rtsp_camera_relay" name="rtsp_camera_relay" type="rocon_rtsp_camera_relay_node">
<param name="video_stream_url" value="$(arg video_stream_url)"/>
node>
launch>
修改其中 default="$(env ROCON_RTSP_CAMERA_RELAY_URL)"
的值为现实中用到的 rtsp 视频流地址
,示例如下:
<launch>
<arg name="video_stream_url" default="rtsp://admin:[email protected]:3/h264/ch1/main/av_stream"/>
<node pkg="rocon_rtsp_camera_relay" name="rtsp_camera_relay" type="rocon_rtsp_camera_relay_node">
<param name="video_stream_url" value="$(arg video_stream_url)"/>
node>
launch>
最后启动 rtsp_camera_relay
节点,注意该节点需要常驻运行,所以最好将其运行在后台:
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch --screen
新打开一个终端窗口,使用 rqt_image_view
查看所订阅的视频画面
对于多视频源,我自己摸索到的方法是创建多个 .launch
文件,并以此启动多个 rtsp_camera_relay
节点。
首先创建多个 .launch
文件,主要不同之处在于 rtsp 视频流地址
和 node name
:
第一个 .launch
文件内容如下:
<launch>
<arg name="video_stream_url" default="rtsp://admin:[email protected]:3/h264/ch1/main/av_stream"/>
<node pkg="rocon_rtsp_camera_relay" name="rtsp_camera_relay_1" type="rocon_rtsp_camera_relay_node">
<param name="video_stream_url" value="$(arg video_stream_url)"/>
node>
launch>
第二个 .launch
文件内容如下,其他文件以此类推:
<launch>
<arg name="video_stream_url" default="rtsp://admin:[email protected]:3/h264/ch2/main/av_stream"/>
<node pkg="rocon_rtsp_camera_relay" name="rtsp_camera_relay_2" type="rocon_rtsp_camera_relay_node">
<param name="video_stream_url" value="$(arg video_stream_url)"/>
node>
launch>
最后启动多个 rtsp_camera_relay
节点,注意这些节点需要常驻运行,所以最好将它们分别运行在后台:
# 启动第一个节点
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay_1.launch --screen
# 启动第二个节点
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay_2.launch --screen
用了半个多月,发现 rocon_rtsp_camera_relay
订阅视频流再发布为 rostopic
的形式,比起原视频流似乎会有 0.3-0.5s 的延迟。