【发布时间】:2011-09-08 21:18:18
【问题描述】:
我正在编写一个四旋翼直升机无人机,以使用图像处理自动追踪移动的地面目标。我正在使用的硬件非常有限,所以为了让我的自动命令考虑无人机的速度(它不知道它何时移动),我必须手动跟踪目标随时间的相对位置(大致可以是翻译成无人机的运动)。
这就是我在这方面的看法:
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 的计算已更改,以前的表格在某些情况下会产生不需要的结果。新公式根据目标先前与原点的距离与目标与原点的当前距离之间的差值正确创建修饰符。
【问题讨论】:
标签: image-processing automation robotics