目录
概述
ros_rtsp功能包可以将ros视频流以rtsp形式推送
web_video_server功能包可以将ros视频话题推HTTP流
rocon_rtsp_camera_relay可以接受同一网段下的rtsp视频流输出为ros话题信息,进行再处理
工具
ubuntu系统PC
接发工具为siyi遥控器,siyi云台相机等
siyi遥控器带安卓系统,里面的qgc地面站可以接收rtsp视频流,而siyi云台连接网口后会自动发送rtsp流
ros_rtsp
提前建好工作空间
cd catkin_ws
git clone https://github.com/CircusMonkey/ros_rtsp.git
cd ..
catkin_make -DCATKIN_WHITELIST_PACKAGES="ros_rtsp" #这行指令为单独编译这个包
进入config修改配置文件
更改下面的source参数为相机话题
终端输入
roslaunch ros_rtsp rtsp_streams.launch
在浏览器中输入
rtsp://0.0.0.0:8554/front
会直接打开视频,较高延迟
接受流
对于一些设备自带接受rtsp流视频的软件
或者直接在浏览器输入
web_video_server
源码安装
cd catkin_ws/src
git clone https://github.com/RobotWebTools/web_video_server.git
cd ..
catkin_make
二进制安装
sudo apt-get install ros-$ROS_DISTRO-web-video-server
建议源码安装,方便更改IP地址和话题
进入launch编辑启动文件web_video_server.launch
<launch>
<node pkg="web_video_server" type="web_video_server" name="web_video_server" output="screen">
<param name="port" type="int" value="8080" />
<param name="address" type="string" value="10.255.77.205" />
<param name="server_threads" type="int" value="1" />
<param name="ros_threads" type="string" value="2" />
<param name="width" type="int" value="1280" />
<param name="height" type="int" value="1080" />
<param name="quality" type="int" value="90" />
</node>
</launch>
port为端口,默认8080
address为ip地址,一般为自己电脑地址
打开一个相机驱动launch(任意相机都可)
roslaunch usb_acm usb_cam.launch
然后输入
roslaunch web_video_server web_video_server.launch
他会自动将相机图像话题推流
在同一局域网下的设备进入浏览器输入
10.255.77.205:8080
会打开
这里有所有的相机话题,延迟很低
ros接收rtsp视频流
git clone https://github.com/robotics-in-concert/rocon_devices
进入catkin_ws进行编译
catkin_make -DCATKIN_WHITELIST_PACKAGES="rocon_rtsp_camera_relay"
这行指令为单独编译这个包
修改launch文件
<launch>
<arg name="video_stream_url" default="rtsp://0.0.0.0:8554/back"/>
<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>
更改ip即可
输入
roslaunch rocon_rtsp_camera_relay rtsp_camera_relay.launch
可以查看话题
和普通相机驱动一样,可以查看画面和内参(camera_info)
不过这里内参是空的,是由于他无法读取ros标定的相机参数,可以在代码里进行修改
读取文件或直接复制内参
增加如下代码进行手动赋值
ci.distortion_model = "head_camera";
ci.D = {0.03893528054100122, -0.3485441168559756, 0.03216230030094155, 0.003306613122592447, 0};
ci.K = {666.7638040975144, 0, 307.7119479657995, 0, 675.2068368652186, 292.3638681443858, 0, 0, 1};
ci.R = {1, 0, 0, 0, 1, 0, 0, 0, 1};
ci.P = {665.2471923828125, 0, 308.53816715844, 0, 0, 662.948486328125, 302.4687334700211, 0, 0, 0, 1, 0};
这里的内参如何而来,可以用ros自带的相机标定工具,标定完成后生成的head_camera文件内有相机内参。
文件在/.ros/camera_info里
一行一行复制过来即可。
这样话题就有数据了。
总结
对于大部分相机或图像信息推送rtsp流的形式,直接用网线连接省去了wifi这一步骤,所以就需要进行ros接受流来处理图像信息,可以进行识别或图像处理的二次开发。
(http流是否也可以直接连网线,本人没有试过)
感谢观看!