参考资料:
https://github.com/leggedrobotics/darknet_ros
https://gitee.com/robin_shaun/XTDrone
https://www.yuque.com/xtdrone/manual_cn/target_detection_tracking
https://blog.csdn.net/qq_42145185/article/details/105730256
无人机仿真平台的搭建以及目标识别与追踪用到了肖昆的XTDrone项目,十分感谢,相关网页:https://gitee.com/robin_shaun/XTDrone,我这里只是对darknet_ros的安装以及在仿真无人机上的使用做了个总结。
如果有造成侵权请联系我。
请从官网下载:http://wiki.ros.org/Installation/Ubuntu安装时注意ROS与Ubuntu版本的对应,如果对gazebo版本有要求的话安装时请在执行(以18.04对应的melodilc为例) sudo apt-get install ros-melodic-desktop-full指令时改为 sudo apt-get install ros-melodic-desktop然后再安装gazebo
ros安装完成之后在主目录创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
OpenCV下载官网:https://opencv.org/releases/
boost下载官网:https://www.boost.org/
ROS安装时已经安装了OpenCV 3.2,可以选择不装,如果想另外再安装请安装3.3以下的版本,版本过高的话可能在编译darknet_ros时会出现错误,这个问题后面也会提到。
要使用usb摄像头作为输入的话,需要使用ROS的usb_cam,其网址为https://github.com/bosch-ros-pkg/usb_cam。安装与否不影响后面无人机仿真目标识别与追踪的使用
下载usb_cam并配置环境
cd ~/catkin_ws/src
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ..
catkin_make_isolated
source ~/catkin_ws/devel/setup.bash
编译usb_cam
cd src/usb_cam
mkdir build
cd build
cmake ..
make
测试一下usb摄像头
1.打开launch文件,根据摄像头编号对文件进行修改。一般笔记本自身的摄像头是video0,usb摄像头是video1。
cd ~/catkin_ws/src/usb_cam/launch
gedit launch
2.打开新的终端,运行roscore
roscore
3.运行测试
cd ~/catkin_ws/src/usb_cam/launch
roslaunch usb_cam usb_cam-test.launch
若成功显示图像,说明运行正确。可以使用ctrl+c中断程序。
运行时可能会出错需要多加一行代码
source /home/youruser/catkin_ws/devel/setup.bash
cd ~/catkin_ws/src/usb_cam/launch
roslaunch usb_cam usb_cam-test.launch
为了不必每次均输入source命令,将该行代码写入.bashrc
cd ~
gedit .bashrc
在最后一行添加source /home/youruser/catkin_ws/devel/setup.bash,此后就不必每次输入该行代码了。
darknet_ros源码网页 :https://github.com/leggedrobotics/darknet_ros
在gitclone前请先设置SSH,否则无法顺利从github上下载源码
cd catkin_ws/src
git clone --recursive [email protected]:leggedrobotics/darknet_ros.git
cd ../
如果出现这样的错误,说明没有设置好SSH key,SSH key设置教程:
https://blog.csdn.net/qq_45067735/article/details/108027310
编译darkne_ros
catkin_make -DCMAKE_BUILD_TYPE=Release
编译时可能会出现这样的错误
这是OpenCV的版本原因,我这里安装OpenCV 4.4出现这样的错误,安装Opencv 3.2后就没有这样的错误了,这也是我前面建议安装OpenCV 3.3版本以下的原因
运行darknet_ros
执行darknet_ros进行检测,在运行检测之前需要更改一下配置文件,使得darknet_ros订阅的话题与usb_cam发布的图片话题对应。
打开catkin_ws/src/darknet_ros/darknet_ros/config/ros.yaml文件,修改:
subscribers:
camera_reading:
topic: /camera/rgb/image_raw
queue_size: 1
改成
subscribers:
camera_reading:
topic: /usb_cam/image_raw
queue_size: 1
设置编写环境变量
cd ~/catkin_ws
source devel/setup.bash
为了方便不用每次都设置环境变量,可以直接在barshc中修改
sudo gedit ~/.bashrc
在barshc中最下面加上
source ~/catkin_ws/devel/setup.bash
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/
重启barshc
source ~/.bashrc
echo $ROS_PACKAGE_PATH #若显示路径,则表示设置成功
启用YOLO
roslaunch darknet_ros darknet_ros.launch
运行时可能会出现这样的报错:
这个问题困扰我很长时间,我也咨询了一些人,他们给了我一些说法和解决方案,有的成功有的不成功,考虑到每个人的原因可能不同,我这边还是都列举出来:
1、权重文件的问题。从官网下载权重文件可以解决。
2、darknet_ros代码下载的问题。从gitee上下载再运行可以解决。
3、ROS的问题。我尝试了前两种方法发现没有解决,后来发现可能是ROS的问题,我当时ROS是用的国内安装源下载运行时出现了这个问题,后来从官网下载之后运行就没有问题了。
成功运行后会出现画面:
虽然这里显示的是YOLO V3,但是实际上是YOLOv2-tiny,检测结果有些问题,我们需要把预训练集换成YOLO v3的来检测,更换如下:找到config文件可以看到一些数据集,我们需要修改launch文件来启用YOLOv3
打开launch文件
修改 darknet_ros.launch
arg name="network_param_file" default="$(find darknet_ros)/config/yolov2-tiny.yaml"/
改为
arg name="network_param_file" default="$(find darknet_ros)/config/yolov3.yaml"/
roslaunch darknet_ros darknet_ros.launch
不用英伟达显卡的话fps比较低在0.1左右,为了能达到实时需要修改darknet的makefile,在此之前请先安装英伟达显卡驱动已经CUDA、CUDNN。
在/catkin_ws/src/darknet_ros/darknet中找到Makefile文件。
根据需求自己做出修改:
GPU=1 使用CUDA和GPU(CUDA默认路径为/usr/local/cuda)
CUDNN=1使用CUDNN v5-v7加速网络(CUDNN默认路径/usr/local/cudnn)
OPENCV=1 使用OpenCV 4.x/3.x/2.4.x,运行检测视频和摄像机
OPENMP=1 使用OpenMP利用多CPU加速
DEBUG=1 编译调试版本
完成修改之后需要到工作空间下进行编译:
cd ~/catkin_ws
catkin_make
再启动darknet_ros,可以看到fps已经提高了很多
可以参照我之前的博客:https://blog.csdn.net/qq_45067735/article/details/107303796
再度编译darknet_ros
cp -r XTDrone/sensing/object_detection_and_tracking/YOLO/* ~/catkin_ws/src/
cd ~/catkin_ws
catkin_make
启用YOLO
source devel/setup.bash
roslaunch darknet_ros px4_tracking.launch
此时先是加载网络参数,然后等待图像到来
然后启动PX4室外场景仿真,此时YOLO收到了图像,开始进行目标检测
cd ~/PX4_Firmware
roslaunch px4 outdoor1.launch
一开始会看到水,是因为摄像头有一部分浸没在地面,而地面以下是海洋。这个场景比较大加载出来之后把场景向右进行拖动,红色箭头指的是无人机的初始位置。
建立通信
cd ~/XTDrone/communication
python multirotor_communication.py typhoon_h480 0
控制无人机起飞
cd ~/XTDrone/control
python multirotor_keyboard_control.py typhoon_h480 1 vel
启用云台控制
cd ~/XTDrone/sensing/gimbal
python run.py typhoon_h480 0
您可以选择在原地等待行人走过来,也可以主动控制飞机去找行人。等目标出现后,先关闭multirotor_keyboard_control.py(不然两个程序的指令会冲突),然后启动(注意该脚本中的sys.path.append(’/home/robin/catkin_ws/devel/lib/python2.7/dist-packages’)路径要对应修改)
cd ~/XTDrone/control
python yolo_human_tracking.py typhoon_h480 0
然后飞机会自动跟踪检测到的行人。
有的时候草坪的贴图会显示不出来,但不影响仿真进行,只是不太美观。
参考资料:
https://github.com/leggedrobotics/darknet_ros
https://gitee.com/robin_shaun/XTDrone
https://www.yuque.com/xtdrone/manual_cn/target_detection_tracking
https://blog.csdn.net/qq_42145185/article/details/105730256