首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >摄像机跟踪目标;PID控制;鹦鹉AR无人机2

摄像机跟踪目标;PID控制;鹦鹉AR无人机2
EN

Stack Overflow用户
提问于 2016-01-11 03:06:08
回答 1查看 4.2K关注 0票数 1

我正在做一个项目,在那里我应该实现目标跟踪技术,使用鹦鹉AR无人机2.0摄像头。因此,主要的想法是,无人机应该能够识别特定的颜色,然后通过保持一定距离来跟踪它。

我正在使用opencv API建立与无人机的通信。这个API提供了以下功能:

代码语言:javascript
运行
复制
ARDrone::move3D(double vx, double vy, double vz, double vr)

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

  • vx: X速度m/s
  • Y速度m/s
  • vz: Z速度m/s
  • vr:转速rad/s

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

现在,,我正在挣扎的部分,正在寻找一种技术,我应该使用它来找到要发送到move3D函数的速度。我读过,常用的控制方法是使用PID控制。然而,我读过这方面的文章,却不明白它与这个问题有何关系。

总之,我的问题是如何将机器人移向摄像机中检测到的物体?如何从摄像机中找到特定物体的坐标?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-23 01:11:33

编辑:

所以,我刚刚意识到你使用的是无人机和你的坐标系统WRT无人机很可能是x前进到图像,y的左边图像(图像列),z向上垂直(图像行)。我的答案是坐标WRT相机x=列,y=行,z=深度(进入图像),记住,当你阅读我的大纲。而且,我写的所有东西都是psuedo代码,如果没有很多修改,它就不会运行。

原始邮政

PID控制器是一种比例积分微分控制器.它根据您的特定错误确定操作顺序。

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

代码语言:javascript
运行
复制
x_ideal = image_width / 2
y_ideal = image_height / 2
area_ideal = image_width * image_height * 0.3

现在,假设您的边界框有4个参数。

代码语言:javascript
运行
复制
(x_bounding, y_bounding, width_bounding_box, height_bounding_box)

您的错误可能是这样的:

代码语言:javascript
运行
复制
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:意味着bot太近,需要减速,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轴做同样的事情。现在,我们使用这个错误为bot创建一个命令序列。

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

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

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34713594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档