使用放置在其上的引擎保持物理对象直立

时间:2015-02-04 00:56:31

标签: physics

所以,我正在为一个3D物理对象编写一个自动驾驶仪,即sorta。

允许玩家随意放置任意数量的引擎。然后,自动驾驶仪应该使用发动机保持该物体直立,控制每个发动机的推力量0-100%。因此,如果它向右倾斜,它应该向右发射所有引擎。如果它向前倾斜,但只是略微向右倾斜,那么它倾斜方向的所有发动机应该发射得更多,所以物体再次直立。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:2)

  1. 确定电机使用情况

    • 您必须列出您的电机使用情况
    • 将所有电机按方向分组
    • 你应该有左,右,上,下,前,后的电机
    • 问题是你可能会遗漏一些......在这种情况下,你被搞砸了,无法完成任务
    • 对于非轴对齐的任意电机,组排序不容易
    • 简化这个只是做电机方向和组方向的点积
    • 并且最大值属于该组的电机
    • 最小值(负)属于相反方向
    • 所以用组
    • 标记每个电机
    • 并尝试选择它们,以便每组至少有一个马达
  2. 控制

    • 只需使用任何类型的规则P,PI,PID ......来维持位置
    • 应该非常简单
    • 例如x组中的电动机,具有P(比例调节)
    • thrust_x = c0 + c1 * (object_x-wanted_x)
    • 其中c1是响应常量,以实现想要的响应
    • 太大会导致振荡
    • 太小会导致反应迟缓
    • c0是像重力一样令人振奋的外力场
    • 两个c0,c1都取决于群体力量,物体质量......
  3. 如果您还需要控制方向

    • 然后你只需要添加更多组
  4. [注释]

    • 电机使用情况可能随时间变化(物体可以旋转)
    • 因此您可以将所需位置转换为对象本地坐标系
    • 或偶尔重新计算群组