darknet_ros安装的以及在PX4无人机仿真平台的目标检测

darknet_ros的安装以及在PX4无人机仿真平台的目标检测

参考资料:
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的安装以及在仿真无人机上的使用做了个总结。
如果有造成侵权请联系我。

一、安装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和boost

OpenCV下载官网:https://opencv.org/releases/
boost下载官网:https://www.boost.org/
ROS安装时已经安装了OpenCV 3.2,可以选择不装,如果想另外再安装请安装3.3以下的版本,版本过高的话可能在编译darknet_ros时会出现错误,这个问题后面也会提到。

三、安装usb_cam

要使用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

为了方便不用每次都设置环境变量,可以直接在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 #若显示路径,则表示设置成功

四、darknet_ros下载安装

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
在这里插入图片描述
由于下载太慢我这里提供了下载完的darknet_ros的压缩文件,下载完毕后在catkin_ws/src中解压提取即可:https://download.csdn.net/download/qq_45067735/12713492

编译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

启用YOLO

roslaunch darknet_ros darknet_ros.launch

同时打开另一个终端启用usb_cam

roslaunch usb_cam usb_cam-test.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"/

如图:
在这里插入图片描述
重新启动YOLO v3

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

猜你喜欢

转载自blog.csdn.net/qq_45067735/article/details/108014941