无人机目标检测模块教学例程 - SiamRPN框选跟踪(没有Nvidia显卡无法使用)
提示
建议阅览以下内容:
环境配置:
- 请根据目标检测模块介绍进行相应到依赖安装(不要配置tensorrt环境)
运行
- 打开终端进入Prometheus根目录,执行以下命令
roslaunch prometheus_demo siamrpn_track_all.launch
- 等待程序全部启动完成,2个终端窗口,1个图像窗口
使用步骤
-
框选目标
-
遥控器解锁无人机,并切换到
RC_POS_CONTROL
模式,等待无人机起飞并保持悬停(或手动飞行到一定高度) -
遥控器切换到
COMMAND_CONTROL
。无人机接受程序控制指令,靠近目标,并在距离目标一定距离后保持悬停
程序运行逻辑
视觉与控制分离为不同的ros节点。视觉节点从图像数据上提取目标信息(如目标类别,位姿等)并将消息发送出来;控制节点从视觉节点中拿到数据,控制无人机执行相应指令,实现视觉、控制的功能复用。
加载siamrpn跟踪模型接收图像话题,发布Modules/common/prometheus_msgs/msg/DetectionInfo.msg
消息。
Modules/object_detection/py_nodes/siamrpn_tracker/siam_rpn.py
接收发布的目标消息,控制无人机跟踪框选目标。
Modules/tutorial_demo/advanced/siamrpn_track/src/siamrpn_track.cpp
Modules/common/prometheus_msgs/msg/DetectionInfo.msg
: 包含对目标位置,姿态,视角的估计值。
无人机控制
在视觉节点中,我们假设框选到的目标是人并且假定人的身高为1.7m。结合相机内参,目标框的高度估算相机到目标到直线距离,再根据目标中心到画面中心的像素误差计算,获得目标载相机坐标系下的位置。控制节点接收到消息后,结合相机质心到无人机质心的距离,转换为机体惯性系下的坐标。无人机根据目标的坐标动态控制x、y、z方向的速度跟踪目标,最后在目标前方保持悬停。