【问题标题】:How to determine new thrust input to move current coordinate to specified coordinate position如何确定新的推力输入以将当前坐标移动到指定坐标位置
【发布时间】:2016-02-18 00:39:53
【问题描述】:

假设我在 X,Y 空间中的已知位置 (X1,Y1) 有一架无人机,相对于坐标系中的原点向右倾斜 45 度(参见下面的示例)。

红色箭头表示无人机的正面,橙色点表示它在空间中的位置 (X1,Y1)。

知道无人机具有向前和向后运动的推力输入(范围从 +1(向前)到 -1(向后);向左和向右运动(范围从 +1(向右)到 -1(向左) ). 关于无人机正面(请参见下面紫色显示的示例)。

考虑到无人机的方向,我将如何确定推力输入以到达坐标系 (X2,Y2) 中的新点。原谅我粗糙的 mspaint 图纸。感谢任何帮助!

【问题讨论】:

    标签: c# vector coordinates trigonometry coordinate-systems


    【解决方案1】:

    按照您提出问题的方式,我假设您不想转动无人机。

    让我们为这些点命名:A = (X1, Y1), B = (X2, Y2)。

    你要移动的方向是 D = normalize(B - A)。

    无人机正面朝向 U = (cos(a), sin(a)),其中 a 是角度。
    无人机右侧面向 V = (sin(a), -cos(a))。

    如果您将前进/后退推进器与 dot(D, U) 成比例地打开,并将左/右推进器与 dot(D, V) 成比例地打开,您将朝您想要的方向移动。 (这称为change of basis。)

    您可以统一缩放 (dot(D, U), dot(D, V)) 以提高或降低速度。

    【讨论】:

    • 我想在未来改变无人机的方向。无论旋转角度如何 (0-360) 以及点可能在哪里,这种方法都适用吗?
    • @SamW 是的,无论位置和旋转如何,它都可以工作。
    • 用“D = normalize(B - A)”来澄清。你的意思是:normailze((X1-X2),(Y1-Y2))?
    • @SamW No. B - A = (X2 - X1, Y2 - Y1)。所以归一化(B - A)=归一化(X2 - X1,Y2 - Y1)。
    • 啊,当然,这是我的一个小疏忽。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-07
    • 2019-01-08
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多