我在太空中有一个3D点,我需要知道如何俯仰/偏航/滚动我当前的航向(以3d单位矢量的形式)来面对一个点。我熟悉四元数和旋转矩阵,我知道如何表示获得所需答案所需的总旋转量。
然而,我只能控制俯仰,偏航和滚转速度(我可以'瞬间'设置各自的角速度),并且只能偶尔更新我的新方向(每秒一次左右)。最终目标是使用某种PID控制器(或者三个分离的控制器,但我怀疑它不会那样工作)控制我当前的方向。最终效果将是一个缓慢(并且有希望收敛)摆动到目的地方向的稳定状态。
我不知道如何将当前所需的四元数/旋转矩阵转换为一组俯仰 - 偏转 - 角度速度(某种四元数导数或什么?)。我甚至不确定要搜索什么。我也不确定如何将PID控制器应用到这个系统,因为我怀疑三重奏需要一个控制器而不是独立地对待它们(虽然直觉上我觉得这应该是可能的)。任何人都可以提供任何指导吗?
作为旁注,如果有一个解决方案只涉及二重奏(俯仰/偏航,滚动/俯仰等),那么它也可以正常工作。我只需要2个旋转自由度,但这远离我熟悉的领域,所以我不太自信地形成围绕它的问题。
答案 0 :(得分:0)
首先看一下你的问题是否可以使用四元数SLERP [1]来解决,它可以让你指定一个介于0和1之间的标量作为从q1移动的控件 - > q2。
如果仍需要使用角度旋转进行控制,则可以按照Nico Schertler的建议计算误差四元数。 从该错误四元数中,您可以使用四元数的导数属性(http://www.ecsutton.ece.ufl.edu/ens/handouts/quaternions.pdf [2]的第4节)来计算出所需的角速率。
我很确定它会起作用,但如果没有,你也可以看看使用SLERP衍生物(http://www.geometrictools.com/Documentation/Quaternions.pdf [3]的等式23)并将其等同于右手边源[2]中的等式再次获得角速率。这样做的缺点是需要四元数取幂和对数运算的代码实现。