从相机跟踪物体; PID控制;鹦鹉 AR 无人机 2

Posted

技术标签:

【中文标题】从相机跟踪物体; PID控制;鹦鹉 AR 无人机 2【英文标题】:Tracking objects from camera; PID controlling; Parrot AR Drone 2 【发布时间】:2016-01-11 03:06:08 【问题描述】:

我正在做一个项目,我应该使用 Parrot AR Drone 2.0 的相机实现对象跟踪技术。所以主要思想是,无人机应该能够识别指定的颜色,然后保持一定距离跟随它。

我正在使用opencv API 与无人机建立通信。该API提供功能:

ARDrone::move3D(double vx, double vy, double vz, double vr)

在 3D 空间中移动 AR.Drone 的位置和位置

vx:X 速度 [m/s] vy:Y 速度 [m/s] vz:Z 速度 [m/s] vr:旋转速度 [rad/s]

我编写了一个应用程序,它使用 OpenCV 对从无人机的摄像头获得的图像进行简单的图像处理,并找到要跟踪的对象的所需轮廓。请参见下面的示例:

现在我正在努力的部分正在寻找我应该找到速度的技术发送到 move3D 函数。我已经阅读了进行控制的常用方法是使用 PID 控制。但是,我已经阅读了相关内容,但无法理解它与此问题的关系。

总而言之,我的问题是如何将机器人移向其相机中检测到的物体?如何从相机中找到某些物体的坐标?

【问题讨论】:

【参考方案1】:

编辑: 因此,我刚刚意识到您正在使用无人机,并且您的坐标系 WRT 无人机很可能是 x 向前进入图像,y 位于图像左侧(图像列),z 垂直向上(图像行)。我的答案有坐标 WRT 相机 x = 列,y = 行,z = 深度(进入图像) 当你阅读我的大纲时,请记住这一点。另外我写的都是伪代码,不做很多修改就无法运行

原帖: PID 控制器是比例-积分-微分控制器。它会根据您的具体错误决定一个操作顺序。

对于您的问题,我们假设最佳跟踪意味着矩形位于图像的中心,并且它占用了大约 30% 的像素空间。这意味着您移动您的相机/机器人,直到满足这些条件。我们将这些目标参数称为

x_ideal = image_width / 2
y_ideal = image_height / 2
area_ideal = image_width * image_height * 0.3

现在假设你的边界框有 4 个参数

(x_bounding, y_bounding, width_bounding_box, height_bounding_box)

你的错误大概是这样的:

x_err = x_bounding - x_ideal;
y_err = y_bounding - y_ideal;
z_err = area_ideal - (width_bounding_box * height_bounding_box)

请注意,我已将 z 距离(深度)与对象的大小联系起来。这假设被跟踪的对象是刚性的并且不会改变大小。大小的任何变化都是由于物体到相机的距离(较大的边界框意味着物体很近,一个小的边界框意味着物体很远)。这有点估计,但在相机或物体本身没有任何参数的情况下,我们只能做出这些一般性的陈述。

在创建控制序列时,我们需要牢记符号,这就是为什么在做减法时顺序很重要。让我们从逻辑上考虑一下。 x_err 确定边界框与所需位置的水平距离。在我们的例子中,这应该是正数,这意味着机器人应该向左移动,以便对象更靠近图像的中心。盒子太小,表示物体距离太远等。

z_err z_err = 0 :保持速度指令不变,无变化 z_err > 0 : 我们需要靠近,Vz 应该增加

x_err x_err = 0 : 保持 X 中的速度不变,Vx 不变 x_err > 0 : 表示bot在左边,需要右转(增加x),Vx应该增加

我们可以对每个 y 轴做同样的事情。现在我们使用这个错误来为机器人创建一个命令序列。

这种描述听起来很像 PID 控制器。观察一个状态,找出一个错误,创建一个控制序列来减少错误,然后一遍又一遍地重复这个过程。在您的情况下,速度将是您的算法输出的动作。您将基本上运行 3 个 PID

    X 的 PID Y 的 PID Z 的 PID

因为它们本质上是正交的,所以我们可以说每个系统都是独立的(理想情况下确实如此),沿 x 方向移动不应影响 Y 方向。这个例子也完全忽略了方位信息(Vr),但这只是一个思考练习,而不是一个完整的解决方案

校正的确切速度由您的 PID 系数决定,这就是事情变得有点棘手的地方。 Here 是一个易于阅读(几乎没有数学)的概述或 PID 控制。您将不得不通过一些实验来使用您的系统(也就是“调整”您的参数)。这变得更加困难,因为相机不是完整的 3d 传感器,因此我们无法从环境中提取真实的测量值。在不了解有关您的传感器/环境的更多信息的情况下,很难将 ~30 pixels 的错误转换为 m/s,但我希望这能让您大致了解如何继续

【讨论】:

感谢您的回答,它清楚地回答了我的所有问题。而且您对无人机坐标系的假设是正确的。我不太明白你所说的“轴承信息”。您是指可能影响其运动、风等或其他方面的因素吗? “轴承信息”是指角度。在 AR 无人机功能中,它是角速度。据我所知,这是无人机 x 轴的行进角度(在 xy 平面上,我希望这是有道理的)。您可能可以使用该角度以及水平移动来帮助跟踪目标。但在我的小例子中,我只假设你可以在 y 轴上滑动。不改变角度方向/方位

以上是关于从相机跟踪物体; PID控制;鹦鹉 AR 无人机 2的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV学习和总结1

迷你无人机怎么配对?

相机位姿求解——P3P问题

如何用 Matlab 立体计算机视觉测量运动物体的距离和质心?

Unity(ar)手势控制物体旋转缩放 -- Vuforia

无人飞行器巡检输电线路的杆塔和导线跟踪算法