ROS+Bebop2无人机+YOLO算法实现无人机视角的实时目标检测

前言:

很久之前,用TK1玩过一段时间的ROS,再加上各种硬件(Arduino、激光雷达、编码电机等),模仿着做过Turtlebot小车,实现了部分Turtlebot部分的功能,最后因为雷达被我玩烧了,所以,就玩完了。
最近,身边有几台Bebop2无人机,然后又在玩深度学习的目标检测,因此,就尝试了一下将目标检测算法和无人机结合在一起玩一玩。
话不多说,先看玩成功的视频链接:
B站:https://www.bilibili.com/video/av37356955?from=search&seid=10773049982467763230
YouTube:https://www.youtube.com/watch?v=sgqNDEImGak&t=206s
效果图

目录:
第一部分:系统框架简介;
第二部分:系统架构搭建详解;
第三部分:相关算法以及功能包代码的修改;
第四部分:框架整体测试(无人机控制+无人机图像处理(yolo实时检测算法))

第一部分:系统框架简介
控制系统采用:ROS(robot operate system) 版本为:kinetic(貌似ubuntu16.04系统只支持kinetic版本的ros)
控制端介绍(华硕笔记本):i7-7700HQ,GTX-1050(4G), 16G-DDr4,等……(大致电脑配置,并不一定要这么高的配置,只是为了介绍而已)
无人机介绍:Parrot——Bebop-2无人机;
无人机开发包:bebop_autonomy, teleop_twist_keyboard;(均可在GitHub 上clone下来)
检测算法:Yolo-V3(版本可以自行根据需求改动v1,v2 both ok,萝卜白菜各有喜爱);

第二部分:系统架构搭建详解
ROS-kinetic安装(参考:http://wiki.ros.org/kinetic/Installation/Ubuntu)
1. setup source.list

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

2. setup your keys

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key
421C365BD9FF1F717815A3895523BAEEB01FA116

3. installation

sudo apt-get update
sudo apt-get install ros-kintic-desktop-full

4. initialize rosdep

sudo rosdep init
rosdep update

5. environment setup

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc$ source ~/.bashrc

工作空间的创建以及相关资源包的编译
Workspace的创建与bebop-2的安装
(参考: https://www.ncnynl.com/archives/201701/1259.html)

  1. 依赖包的安装
sudo apt-get install build-essential python-rosdep python-catkin-tools
  1. 创建和initialize workspace
mkdir -p ~/bebop_ws/src && cd ~/bebop_ws
catkin init
cd src
git clone https://github.com/AutonomyLab/bebop_autonomy.git src/bebop_autonomy 
  1. 更新赖库和安装依赖(包括parrot_arsdk)
rosdep update
rosdep install --from-paths src -i
  1. 编译工作空间
catkin build -DCMAKE_BUILD_TYPE=RelWithDebInfo

Teleop_twist_keyboard下载及编译

cd ~/bebop_ws/src
git clone https://github.com/ros-teleop/teleop_twist_keyboard.git
cd teleop_twist_keyboard
mkdir build 
cd build 
cmake ..
make -j8

Darknet-ros下载及编译

cd ~/bebop_ws/src
git clone https://github.com/leggedrobotics/darknet_ros.git
cd ..
catkin_make -DCMAKE_BUILD_TYPE=Release
catkin build darknet_ros -DCMAKE_BUILD_TYPE=Release

到此,整个系统的搭建已经完成,接下即为具体代码的调试过程介绍,如果中间安装遇到相关问题,请自行百度;在编译yolo算法,会涉及到电脑整体环境问题(cuda,cudnn,opencv的安装可看我上一篇博客),请自行按照需求安装好。
接下来所做的调试,我会假定你已经将上述所有的环境安装以及编译成功;

第三部分:相关算法以及功能包代码的调整
【在编辑此部分内容之前,需要简单介绍一下。在ROS操作系统里面,相关信息的获取是采用消息的订阅以及发布的形式来进行数据传输的,因此,我们只需要了解好各个功能的节点,通过其他算法订阅节点信息来实现我们所需要的功能。
当然,这是整个思路,具体的实现过程,还需要仔细分析代码,同时利用ROS的附加功能去检查整体的节点框架(rqt_graph),通过分析节点图来进行相关数据的获取。】
在进行接下来的代码修改前,我已经对bebop_autonomy开发包做了简单的了解,以及节点的分析;
1. 控制部分代码调整
该部分代码修改较为简单,进入teleop_twist_keyboard文件夹下,打开teleop_twist_keyboard.py代码,找到节点消息发布相关代码,将这行代码修改如下:

Pub = rospy.Publisher(‘bebop/cmd_vel’, Twist, queue_size = 1)

改完这行代码,请重新编译整个工作空间,当然也可单独编译改功能包;
2. yolo检测算法代码部分修改
进入darknet_ros文件夹下,找到config文件夹,并且进入打开ros.yaml文件,打开后,找到camera_reading这段代码,将topic修改为:

/bebop/image_raw

修改完后,我们已经完成了yolo算法对视屏流的订阅,只要无人机视频传输回笔记本,我们启动检测算法,算法会自动对传输回来的视频流进行检测;(注意:改完代码后需重新编译工作空间,可以用catkin
build指令对整个工作空间编译,也可单独编译这一个文件夹)

在这里插入图片描述
第四部分:整体框架基本功能的测试(无人机控制+yolov3检测算法demo)在测试整体算法之前,带上无人机,找一个空旷的地带,安全第一

  1. 打开无人机,让笔记本与无人机Wi-Fi连接;
  2. 启动ROS操作系统—打开一个新的终端,输入指令:
roscore 
  1. 启动无人机图传—打开一个新的终端,首先source一下工作空间:
source ~/bebop_ws/devel/setup.bash
roslaunch bebop_tools bebop_nodelet_iv.launch

(运行完这行代码后,无人机的图传会显示在笔记本桌面端,若无显示请检查问题)

  1. 让无人机起飞/降落—再开一个终端,并且输入指令:
source ~/bebop_ws/devel/setup.bash
rostopic pub –once bebop/takeoff std_msgs/Empty   (起飞)
rostopic pub –once bebop/land std_msgs/Empty   (降落)
  1. 启动无人机控制代码—开启一个新的终端,并输入指令:
source ~/bebop_ws/devel/setup.bash
rosrun teleop_twist_keyboard teleop_twist_keyboard.py

此时,控制端已经开启,操作方式为键盘操作:
[i]:控制无人机前进; [k]:中断飞行指令;[,]:控制无人机后退;
[j]:控制无人机左转;[l]:控制无人机右转;
还有几个控制指令,不做详述;[u],[o],[m],[.]
控制指令还可调节为大写,如何控制请自行操作设置;

6.启动yolo检测算法对无人机视频进行实时检测—开启一个新的终端,并输入指令:

source ~/bebop_ws/devel/setup.bash
roslaunch darknet_ros yolov3.launch

此时,检测算法已启动,终端会弹出新的窗口,显示算法的实时检测效果;

备注:控制无人机摄像头移动指令为: rostopic pub –once bebop/camera_control geometry_msgs/Twist 再按下tab按键自动补齐即可
至此,无人机的整个环境已经搭建成功,同时,也通过测试了。

道路千万条,安全第一条!!! 切记!!!!无人机的通信采用的是WiFi,所以测试时注意外界干扰以及控制距离,切记,切记!!!!!

该文档内所有的资源均来自github以及其它相关论坛,均为开源算法,相关链接已经贴在步骤内,若有不足请多多谅解。当你搭建好后,你可以训练自己的模型,可用来做其他物体的检测,或者做目标的跟踪,或者视觉slam,你喜欢怎么做就怎么做。

猜你喜欢

转载自blog.csdn.net/weixin_38106878/article/details/88166969