无人机目标检测模块教学例程 - SiamRPN框选跟踪(没有Nvidia显卡无法使用)

siamrpn.gif

提示

建议阅览以下内容:

环境配置:

运行

  1. 打开终端进入Prometheus根目录,执行以下命令
roslaunch prometheus_demo siamrpn_track_all.launch
  1. 等待程序全部启动完成,2个终端窗口,1个图像窗口

使用步骤

  1. 框选目标

  2. 遥控器解锁无人机,并切换到RC_POS_CONTROL模式,等待无人机起飞并保持悬停(或手动飞行到一定高度)

  3. 遥控器切换到COMMAND_CONTROL。无人机接受程序控制指令,靠近目标,并在距离目标一定距离后保持悬停

程序运行逻辑

image.png 视觉与控制分离为不同的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方向的速度跟踪目标,最后在目标前方保持悬停。