使用放置在其上的引擎保持物理对象直立
Keep physics object upright using engines placed on it
所以,我正在为 3D 物理对象编写自动驾驶仪。
玩家可以随心所欲地放置任意数量的引擎。然后,自动驾驶仪应该使用发动机使这个物体保持直立,控制每个发动机的推力量 0-100%。所以如果它向右倾斜,它应该向右更多地点燃所有引擎。如果它向前倾斜,但只是稍微向右倾斜,则所有朝它倾斜方向的引擎都应该发射更多,因此物体会再次直立。
我该怎么做?
确定电机使用情况
- 你必须列出你的电机的用途
- 所以把所有电机按方向分组
- 你应该有左、右、上、下、前进、后退的马达
- 问题是你可能会遗漏一些......在那种情况下你就完蛋了,无法完成任务
- 对于非轴对齐的任意电机,分组排序并不容易
- 为了简化这个只做电机方向和组方向的点积
- 并且最大值属于该组的电机
- 最小值(负)属于相反方向
- 所以用组标记每个电机
- 并尝试 select 他们这样每组至少有一个马达
控制
- 好吧,只需使用任何类型的调节 P、PI、PID... 来保持位置
- 应该很简单
- 例如x组带P(比例调节)的电机
thrust_x = c0 + c1 * (object_x-wanted_x)
- 其中
c1
是响应常数 用它来实现想要的响应
- 太大会引起震荡
- 太小反应慢
c0
正在消灭重力等外力场
- 两者
c0,c1
都取决于群体强度、物体质量、...
如果你还需要控制方向
- 那么你只需要添加更多的组
[注释]
- 电机的使用可以随时间变化(物体可以旋转)
- 所以你可以将所需的位置转换为对象局部坐标系
- 或者偶尔重新计算分组
所以,我正在为 3D 物理对象编写自动驾驶仪。
玩家可以随心所欲地放置任意数量的引擎。然后,自动驾驶仪应该使用发动机使这个物体保持直立,控制每个发动机的推力量 0-100%。所以如果它向右倾斜,它应该向右更多地点燃所有引擎。如果它向前倾斜,但只是稍微向右倾斜,则所有朝它倾斜方向的引擎都应该发射更多,因此物体会再次直立。
我该怎么做?
确定电机使用情况
- 你必须列出你的电机的用途
- 所以把所有电机按方向分组
- 你应该有左、右、上、下、前进、后退的马达
- 问题是你可能会遗漏一些......在那种情况下你就完蛋了,无法完成任务
- 对于非轴对齐的任意电机,分组排序并不容易
- 为了简化这个只做电机方向和组方向的点积
- 并且最大值属于该组的电机
- 最小值(负)属于相反方向
- 所以用组标记每个电机
- 并尝试 select 他们这样每组至少有一个马达
控制
- 好吧,只需使用任何类型的调节 P、PI、PID... 来保持位置
- 应该很简单
- 例如x组带P(比例调节)的电机
thrust_x = c0 + c1 * (object_x-wanted_x)
- 其中
c1
是响应常数 用它来实现想要的响应 - 太大会引起震荡
- 太小反应慢
c0
正在消灭重力等外力场- 两者
c0,c1
都取决于群体强度、物体质量、...
如果你还需要控制方向
- 那么你只需要添加更多的组
[注释]
- 电机的使用可以随时间变化(物体可以旋转)
- 所以你可以将所需的位置转换为对象局部坐标系
- 或者偶尔重新计算分组