1

我正在做一个项目,我应该使用 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控制。但是,我已经阅读了相关内容,但无法了解它与此问题的关系。

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

4

1 回答 1

5

编辑:
所以,我刚刚意识到您正在使用无人机,并且您的坐标系 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 < 0 : 表示机器人距离太近需要减速, Vz 应该减小
z_err = 0 : 保持速度指令不变, 不变
z_err > 0 : 我们需要靠得更近, Vz 应该增加

x_err < 0 : 表示 bot 向右, 需要向左转(减小 x), Vx 应该减小
x_err = 0 : 保持 X 的速度不变, Vx
不变 x_err > 0 : 表示 bot 向左并且需要右转(增加x),Vx应该增加

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

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

  1. X 的 PID
  2. Y 的 PID
  3. Z 的 PID

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

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

于 2016-01-23T01:11:33.140 回答