一、可选方法
本次使用到的硬件有:
- Intel Realsense D435i深度相机
- 思翼MK15E手持地面站和天空端
- NUC11TNKi5 作为机载电脑
任务需求:
- 将D435i的RGB视频回传
可以选用的方法:
- D435i连接NUC,NUC的RJ45网口连接MK15E天空端,局域网内发布RTSP
- D435i连接NUC,NUC的RJ45网口连接MK15E天空端,局域网使用Nomachine远程桌面
- D435i连接NUC,NUC的HDMI连接MK15E天空端HDMI转接器,回传桌面
本次使用的是方法1
二、NUC安装ROS
NUC安装Ubuntu 18.04系统和ROS Melodic,建立catkin_ws。
ROS安装使用鱼香ROS,参考自fishros.com
wget http://fishros.com/install -O fishros && . fishros
建立catkin_ws参考我以前的博客。
三、NUC安装D435i驱动和SDK
使用原装USB3.0数据线连接D435i和NUC,为NUC安装相机的驱动和ROS包,参考自
https://blog.csdn.net/gyxx1998/article/details/121204091
3.1 安装 RealSense SDK
3.1.1 克隆SDK
打开终端
git clone https://github.com/IntelRealSense/librealsense
cd librealsense
3.1.2 安装相关依赖
在原先的终端下,分别输入以下命令完成相关依赖的安装
sudo apt-get install libudev-dev pkg-config libgtk-3-dev
sudo apt-get install libusb-1.0-0-dev pkg-config
sudo apt-get install libglfw3-dev
sudo apt-get install libssl-dev
3.1.3 安装权限脚本
在原先的终端下,分别输入以下命令完成相关依赖的安装
sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm trigger
3.1.4 进行编译与安装
执行以下命令实现编译与安装
mkdir build
cd build
cmake ../ -DBUILD_EXAMPLES=true
make
sudo make install
3.1.5 测试安装是否成功
打开新的终端,在终端中输入以下命令验证相机驱动是否安装成功
cd librealsense/build/examples/capture
./rs-capture
或直接使用realsense-viewer工具查看效果:
realsense-viewer
3.2 安装RealSense-ROS
这里直接在~/catkin_ws/src目录下从github下载相关的包,然后进行编译:
cd ur_ws/src
git clone https://github.com/IntelRealSense/realsense-ros.git
git clone https://github.com/pal-robotics/ddynamic_reconfigure.git
cd ~/ur_ws && catkin_make
编译完成后,使用如下命令测试:
roslaunch realsense2_camera demo_pointcloud.launch
此时使用
rostopic list
可以查看我们需要的话题/camera/color/image_raw
已经发布出来了
四、NUC安装ROS-RTSP包
这里参考ROS-RTSP官方GitHub
https://github.com/CircusMonkey/ros_rtsp
4.1 安装依赖
gstreamer 库
sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev libgstrtspserver-1.0-dev gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad
4.2 克隆并编译项目
在~/catkin_ws/src目录下
git clone https://github.com/CircusMonkey/ros_rtsp.git
cd ..
catkin_make pkg:=ros_rtsp
4.3 配置文件
配置文件在config/stream_setup.yaml
streams:
stream2:
type: topic # topic - Image is sourced from a sensor_msgs::Image topic
source: /camera/color/image_raw # The ROS topic to subscribe to
mountpoint: /back # Choose the mountpoint for the rtsp stream. This will be able to be accessed from rtsp://<server_ip>/back
caps: video/x-raw,framerate=10/1,width=640,height=480 # Set the caps to be applied after getting the ROS Image and before the x265 encoder.
bitrate: 500
4.4 启动ROS-RTSP服务
roslaunch ros_rtsp rtsp_streams.launch
4.5 查看RTSP流
注意:
RTSP的播放软件很多,但我在使用EasyPlayer和VLC都有问题,只有gstreamer可以用
安装gstreamer
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
接收RTSP,里面的RTSP地址要换成发布者的IP
gst-launch-1.0 -v rtspsrc location=rtsp://192.168.144.152:8554/back drop-on-latency=true use-pipeline-clock=true do-retransmission=false latency=0 protocols=GST_RTSP_LOWER_TRANS_UDP ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink sync=true
五、综合调试
5.1 使用网线连接NUC和MK15E天空端
这里需要定制一根网线,一端是RJ45水晶头,另一头是GH1.25带锁的接口,TX+ TX- ,RX+,RX-,分别对应水晶头上的1236接口,其他线不用接。
5.2 手持地面站设置
手持地面站需要打开“以太网”
MK15E上可以接收RTSP的APP有SIYI FPV、ACfly和QGC,经测试只有QGC好用。
设置如下,长宽比改为1.3333333333
此时应可以看见视频。
5.3 使用电脑观看视频
开启MK15E遥控器的热点,用笔记本电脑连接热点。
在Ubuntu 18.04安装gstreamer 库
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
接收RTSP,里面的RTSP地址要换成发布者的IP
gst-launch-1.0 -v rtspsrc location=rtsp://192.168.144.152:8554/back drop-on-latency=true use-pipeline-clock=true do-retransmission=false latency=0 protocols=GST_RTSP_LOWER_TRANS_UDP ! rtph264depay ! h264parse ! avdec_h264 ! autovideosink sync=true