将四旋翼引向目标


9

我正在研究四旋翼。我知道它的位置- ,在那里我想去-目标位置b,并从我计算矢量c ^ -将带我去我的目标的单位向量:abc

c = b - a
c = normalize(c)

由于四旋翼飞机可以在没有旋转的情况下向任何方向移动,所以我试图做的是

  1. 通过机器人偏航角旋转c
  2. 将其分为分量x,y
  3. 将它们作为侧倾角和俯仰角传递给机器人。

问题在于,如果偏航角为0°±5,则此方法有效,但如果偏航角接近+90或-90,则它将失败并转向错误的方向。我的问题是我在这里缺少明显的东西吗?


1
您如何计算偏航角?另外,您正在使用什么控制器,以及如何发送数据?
DaemonMaker

有趣的问题@Hamza,欢迎来到Robotics
Mark Booth

@Hamza,您使用什么语言和系统?我还使用Atmega328和Ada编程语言开发四轴飞行器。如果您有关于该项目的博客,请分享。

您是正确的@MarkBooth,我打开了两个标签,并打算将其他帖子标记为重复。我错误地标记了这个,没有办法撤消它。鉴于需要多于一票才能将其关闭,我认为这不会成为问题。但是,我没有意识到它代表我发表了评论。
DaemonMaker 2013年

没问题@DaemonMaker这些事情发生了。现在,“关闭为重复投票”会自动发布评论,我认为这是一个有用的功能,因为它会提示人们在自己进行关闭投票之前先审查另一个问题。
Mark Booth

Answers:


6

重新实现您的解决方案,我得到了:

向量之间的角度

AB2点之间的角度

θ=math.atan2(BxAx,ByAy)

车辆偏航角

ψθ

标题与偏航

y

罗盘玫瑰

x

极坐标图

这些测量之间的90度重叠,再加上(而不是减去)所需的偏航角,可能就是为什么当目标在±5°范围内且在±90°范围内表现不佳时,事情仍然有效的原因。

转换为组件X和Y

(θψ)xy

PID控制

通过将PID控制回路用于车辆的侧倾和俯仰,可以为您提供最好的服务。就是说,一旦您修复了代码并能够达到目标,我的猜测是您将开始超调它-来回摆动。正确调整的PID可以防止这种情况的发生,同时仍然允许您快速接近目标。

xy


那是一些编辑,超过90%并完全改变了答案(从PID到ATAN2)。但是,您浮华的图形公式技能是野兽!
Spiked3 2012年

我仍然推荐PID(它在底部),我只是在问题的开始部分进行了工作,以确保我的假设是正确的。图形公式是Latex格式的一部分,值得一看。
伊恩

“罗盘航向是从y轴的正方向开始并沿顺时针方向增加,而偏航方向是从x轴的正方向开始并沿逆时针方向增加”参考?“将(θ-ψ)的x分量转换为滚动,将y分量转换为俯仰”我一点都不明白,请提供更多解释(我错过了一些东西)。
Spiked3 2012年

最初的问题提到“将[x和y分量]作为侧倾角和俯仰角传递给机器人”,对我而言,这表明四轴飞行器通过改变侧倾角左右移动,并通过改变俯仰角向前和向后移动。我将添加一些清晰度。
伊恩

整齐。我从来没有见过那样做过。我已经看到并做了自己,只需翻转cos / sin即可获得相同的结果。我将不得不在滚动/音调上再考虑一些。是的,那会引起运动,但是我不确定这与您的位置和去向有什么关系,除了您到达那里的速度。谢谢。
Spiked3 2012年

5

我假设您在这里谈论的是3D矢量。可以normalize()这样概括吗?这很常见吗(我从来没有见过,如果有的话,这对我来说是新闻)。否则,明显的指南针环绕问题将应用于X和Y分量。为什么不称它们为滚动和/或俯仰和/或偏航?(混合使用3D和2D命名法会混淆这个问题)。

我的2D规范化看起来像这样。

int Pilot_QuickestTurnTo(int hdgNow, int hdgNew)
{
    hdgNow = Pilot_Hdg360(hdgNow);
    hdgNew = Pilot_Hdg360(hdgNew);
    if (hdgNow < hdgNew)
        hdgNow += 360;
    int left = hdgNow - hdgNew;
        return (left < 181 ? -left : 360 - left);
}

如果确实是四边形,那么我假设您的X和Y分量确实是YAW,海拔((X,Y)&Z)。您将需要处理YAW(X, Y)2D,并简单地降低或增加Z的高度(这也是我怀疑归一化比您拥有的更重要的原因)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.