假设您有一个自由漂浮在太空中的物体。您有一个希望此对象指向的矢量,以及一个表示其当前朝向的矢量。从这两个向量中,您可以获得代表方向变化的旋转(矩阵,四元数等),以使两个向量对齐。
如果您仅能够对对象施加扭矩(角速度的导数),那么一种随时间施加扭矩而又不会超出目标的过高算法是什么呢?
(在这种情况下,这是一艘太空船,它希望使用推进器自动将自己定位在行进方向上。滚动无关紧要。)
假设您有一个自由漂浮在太空中的物体。您有一个希望此对象指向的矢量,以及一个表示其当前朝向的矢量。从这两个向量中,您可以获得代表方向变化的旋转(矩阵,四元数等),以使两个向量对齐。
如果您仅能够对对象施加扭矩(角速度的导数),那么一种随时间施加扭矩而又不会超出目标的过高算法是什么呢?
(在这种情况下,这是一艘太空船,它希望使用推进器自动将自己定位在行进方向上。滚动无关紧要。)
Answers:
可以像线性加速度的类似情况一样处理。
首先要注意的事实是:由于船舶以角速度为零开始,因此您希望船舶以角速度为零结束,这意味着速度的总变化必须等于零。
从中我们可以看到,随着时间的推移,加速度的积分必须等于零-必须有与“负加速度”一样多的“正”加速度。
因此,无论解决方案是什么,都必须限制于此属性:向前和向后等于“总”加速度。
以下是随时间变化的加速度曲线图的形状:
以此来看,您的加速度可能有太多可能的形式和形状!让我们对所需的加速度形状进行一些假设,以便给出简单/简洁的答案。
为了简单回答,我将使加速度处于三种状态之一:前进,后退或零。向前和向后将具有相等的幅度,并且状态可以立即切换。(没有逐渐增加的加速度)
您可以使用以下公式找到在给定时间段内给定加速度的距离变化:
s = 0.5*a*t^2
这里最简单的解决方案是加速直到到达中点,然后减速其余部分。
我们将以P
您要移动的总距离为单位:
s = P/2
P/2 = 0.5*a*t^2
P = a*t^2
t^2 = P/a
t = sqrt(P/a)
所以基本上:
a
的sqrt(P/a)
时间单位(单位基于把你的单位的加速度)这不是唯一的解决方案。它将以最快的时间到达您的位置(2*sqrt(P/a)
)。但是,如果您想要更宽松的版本怎么办?
在这种情况下,您可以以1/3的速度加速,以1/3的速度滑行,然后以三分之一的速度减速。或1 / 4th,惯性滑行1/2,也减速1 / 4th。
也许您可以先加速一段固定的时间,然后再减速一段固定的时间,但是要等到到达正确的位置后再开始减速。