Quadrotor目标跟踪飞行模式

时间:2011-09-08 21:18:18

标签: image-processing automation robotics

我正在编写一台四旋翼直升机无人机,使用图像处理自动追逐移动的地面目标。我正在使用的硬件非常有限,所以为了让我的自动命令解释无人机的速度(它不知道它何时移动)我必须手动跟踪目标的相对位置(可以大致相同)转化为无人机的运动。)

所以这就是我在这方面所拥有的:

int lastX = Targets_Last_Position_Xcoord();
int lastY = Targets_Last_Position_Ycoord();
int nowX = Targets_Current_Position_Xcoord();
int nowY = Targets_Current_Position_Ycoord();

int speedModX = (float)(60 - (abs(lastX)-abs(nowX))) / 60.0f; // Image dimension is 120
int speedModY = (float)(73 - (abs(lastY)-abs(nowY))) / 73.0f; // Other dimension is 146

changePitch(((nowX - 60)/60.0f)*(1 + speedModX));
changeRoll(((nowY - 73)/73.0f)*(1 + speedModY));

“changePitch”功能和其他类似功能会使发送到无人机的下一个命令包含预设最大倾斜的指定百分比的音高变化。所以,我告诉无人机倾斜与目标距离屏幕中心的距离直接相关的数量;然后我根据目标移动的位置(目标的最后一个点与其当前点之间的距离)投入乘数。

这是我的意图;这段代码似乎只是帮助了一点,其他因素,如气流和机械不平衡(它不是那里最高质量的设备)可能会干扰,让我只看到我想看到的东西。

我正在使用的方法来说明无人机的速度是否正确,和/或是否有更好的方法来解决这个问题?

编辑:speedModX和speedModY的计算已更改,之前的表单在某些情况下会产生不需要的结果。新公式根据目标与原点的先前距离与目标距离原点的当前距离之间的差异正确创建修改器。

3 个答案:

答案 0 :(得分:1)

如果您无法找到更好的系统建模方法,您可能需要考虑为此调整proportional–integral–derivative (PID) controller。它们是用于处理反馈回路的自动化的通用解决方案。

根据维基百科的文章:

  

PID控制器计算“误差”值,作为测量过程变量和所需设定值之间的差值。控制器尝试通过调整过程控制输入来最小化错误   ...   在缺乏基础过程知识的情况下,PID   控制器是最好的控制器。

答案 1 :(得分:1)

这是一个相当具有挑战性的问题,并且您不太可能通过 ad hoc 控制规则找到一个好的解决方案。在机器人文献中,问题表现为目标跟踪(谷歌“目标跟踪机器人运动规划”,用于一些有趣的阅读。)

我已经为地面轮式机器人实施了目标跟踪,我认为这些方法适用于您的问题。此外,我认为它们可以很好地扩展到您问题中增加的第三维运动。看看实施“潜在领域”。该方法将机器人,目标和/或障碍物模拟为具有电荷的粒子。目标表现出吸引力;障碍以令人厌恶的力量为模型。该模型易于实现,并且对于简单的跟踪/避免任务而言效果非常好。

Here是一组介绍该主题的幻灯片。 Here是一篇关于利用潜在领域避障的相当好的论文。将这些方法应用于跟踪问题应该不是一项任务(只需反转符号!)。最后,here是一篇ACM论文,其中作者描述了解决类似的目标跟踪问题。 (我无法访问PDF,抱歉)。

答案 2 :(得分:1)

所以,你在上面的代码中做的是比例控制器。如果您坚持使用PID控制器,则可能需要添加积分和微分部分。此外,根据传感器的精度和准确度,您还需要考虑使用滤波器来平滑您的值。从一个简单的移动平均线开始,然后转到卡尔曼滤波器(你会学到很多东西)。

这是您工作的另一个很好的参考:
用视觉传感器稳定和控制四旋翼微型无人机 http://contentdm.lib.byu.edu/ETD/image/etd2375.pdf

另一个有趣的参考: http://www.ludep.com/