无人机目标检测模块教学例程 - YOLOv5+SiamRPN点击跟踪(没有Nvidia显卡无法使用)
提示
建议阅览以下内容:
已支持YOLOv7(动图见末尾)
此demo以支持使用使用YOLOv7作为目标识别,即YOLOv7+SiamRPN点击跟踪。 拥有更好的demo交互逻辑:
- 同时支持框选跟踪和点击跟踪,可点击目标框,也可框选目标进行目标跟踪
- 双击恢复目标检测,跟踪过程中双击可以恢复目标检测,停止目标跟踪
使用流程:
# 获取最新代码 git pull # 切换Prometheus分支 git checkout yolov7 # 更新submodule获取yolov7代码,完成后就能在Modules/obect_detection/yolov7路径下看到相关代码 git submodule update --init --recursive # 重新编译 ./complie_detection.sh # 运行测试 ./Scripts/simulation/tutorial_demo/yolov7_track.sh
安装说明
- 进入Prometheus根目录,运行如下脚本
./Scripts/installation/object_detection/install_detection_yolov5tensorrt.sh
注意:确保以上脚本成功完成
运行
- 打开终端进入Prometheus根目录,执行以下命令
roslaunch prometheus_demo yolov5_track_all.launch
# 另外开一个窗口运行进入Modules/object_detection_YOLOv5tensorrt路径
# 注意在prometheus_python3环境下执行领命,比如我的就是:
# (prometheus_python3) onx@onx:~$ python3 yolov5_tensorrt_client.py
python3 yolov5_trt_ros.py --image_topic /prometheus/sensor/monocular_front/image_raw
- 等待程序全部启动完成,2个终端窗口,1个图像窗口
使用步骤
-
点击目标
-
遥控器解锁无人机,并切换到
RC_POS_CONTROL
模式,等待无人机起飞并保持悬停(或手动飞行到一定高度) -
遥控器切换到
COMMAND_CONTROL
。无人机接受程序控制指令,靠近目标,并在距离目标一定距离后保持悬停
程序核心逻辑
检测与跟踪模型加载
检测模型(YOLOv5的TensorRT版本)和跟踪模型(SiamRPN)在如下程序中加载(可自行修改替换):
Modules/object_detection_yolov5tensorrt/yolov5_trt_ros.py
注意:由于仿真环境,本程序的YOLOv5使用的x86分支版本,如果想要在NX等ARM的设备上使用切换分支。
程序支持从摄像头获取图像和从ros话题中获取图像(两种方式),如需测试,可使用如下命令:
python3 yolov5_trt_ros.py --no_tcp
程序运行逻辑
程序首先使用YOLOv5进行目标识别,在鼠标点击相应目标框后,将目标框的图像截取放入SiamRPN进行目标跟踪
注意:识别和跟踪的区别:识别,同一时刻,区分不同类别。跟踪,当前时刻与上时刻是否同一个物体,但不一定知道类别。
对于检测&跟踪的信息通过TCP协议发送,信息主要包括,类别、所在图像位置、当前所出状态(检测/跟踪)。
与ROS的接口定义
-
yolov5_tensorrt_client.py
接收yolov5_trt_ros.py
发送的TCP数据,转换为Modules/common/prometheus_msgs/msg/DetectionInfo.msg
ROS消息发送。 -
Modules/tutorial_demo/advanced/siamrpn_track/src/siamrpn_track.cpp
接受目标信息控制无人机接近目标。
无人机控制
同SiamRPN框选跟踪相同
YOLOv7演示