已安装显卡驱动
https://blog.csdn.net/qq_45067735/article/details/108014941
一、安装usb_cam
要使用usb摄像头作为输入的话,需要使用ROS的usb_cam,其网址为https://github.com/bosch-ros-pkg/usb_cam。安装与否不影响后面无人机仿真目标识别与追踪的使用。
1、下载usb_cam并配置环境
sudo apt-get install ros-melodic-camera-info-manager
sudo apt-get install ros-melodic-image-view
下载usb_cam放在catkin_ws/src文件夹下(其他方法不是找不到包,就是编译失败)
替换launch文件
cd ~/catkin_ws/src/usb_cam/launch
gedit usb_cam-test.launch
换成
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="mjpeg" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>
可以根据摄像头编号对文件进行修改。一般笔记本自身的摄像头是video0,usb外接摄像头是video1。
2、编译usb_cam
在catkin_ws文件夹下catkin_make
cd ~/catkin_ws
catkin_make
可能会报错:缺失libv4l
sudo apt-get install libv4l-dev
继续:
cd ~/catkin_ws
source ~/catkin_cd src/usb_cam
cd src/usb_cam
mkdir build
cd build
cmake ..
make
3、测试摄像头
1.打开launch文件,根据摄像头编号对文件进行修改。一般笔记本自身的摄像头是video0,usb外接摄像头是video1。
cd ~/catkin_ws/src/usb_cam/launch
gedit usb_cam-test.launch
2.运行测试
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中最下面加上
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/
重启barshc
source ~/.bashrc
echo $ROS_PACKAGE_PATH #若显示路径,则表示设置成功
二、darknet_ros下载安装(后面还会删除,从XTDrone中复制,此处应该可以不下载,我没试过)
1、从XTDrone中复制
把XTdrone里的darknet_ros复制到catkin_ws中
cp -r ~/XTDrone/sensing/object_detection_and_tracking/ ~/catkin_ws/src/
编译
cd ~/catkin_ws
catkin_make
启用YOLO
roslaunch darknet_ros darknet_ros.launch
同时打开另一个终端启用usb_cam
roslaunch usb_cam usb_cam-test.launch
会启动电脑摄像头
虚拟机记得连接摄像头:
2、下载(挺麻烦,后面还都会删了,只能证明可以实现)
在gitclone前请先设置SSH,否则无法顺利从github上下载源码
https://blog.csdn.net/qq_45067735/article/details/108027310
cd ~/catkin_ws/src
git clone --recursive git@github.com:leggedrobotics/darknet_ros.git
cd ../
提供了下载完的darknet_ros的压缩文件,放在cd ~/catkin_ws/src 文件夹下。
编译darkne_ros
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE=Release
运行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
不用英伟达显卡的话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已经提高了很多
三、无人机仿真平台的目标检测与追踪
XTdrone仿真中有darknet_ros,下面代码是把XTdrone里的darknet_ros复制到catkin_ws中,上面编译的darknet_ros会被覆盖掉。XTdrone里的darknet_ros是XTdrone作者修改过的可以运行Yolov4,我之前仿真的时候还没有这个修改。这可能会导致在无人机仿真运行darknet_ros的时候可能会出现问题,同时为了到时候节省时间,请把上文的权重文件复制备份省的编译的时候要再度下载耗时间。若是有问题请到XTdrone官网(https://www.yuque.com/xtdrone/manual_cn/target_detection_tracking)去看看有没有解决方法
删除darknet_ros后,再度编译darknet_ros(如果是下载安装的):
cp -r ~/XTDrone/sensing/object_detection_and_tracking/ ~/catkin_ws/src/
cd ~/catkin_ws
catkin_make
启用YOLO
source devel/setup.bash
roslaunch darknet_ros task1.launch
此时先是加载网络参数,然后等待图像到来
然后启动PX4室外场景仿真,此时YOLO收到了图像,开始进行目标检测
cd ~/PX4_Firmware
roslaunch px4 outdoor1.launch
然后建立通信
cd ~/XTDrone/communication
python multirotor_communication.py typhoon_h480 0
控制无人机起飞
cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py typhoon_h480 1 vel
启动云台控制(多机的话,使用multi_gimbal_control.sh脚本)
cd ~/XTDrone/sensing/gimbal
python gimbal_control.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