无人机的刚体状态
需要:uBotAerial 0.1.x(含依赖 uBotCore),并启用引擎插件 EnhancedInput
无人机的 Movement 组件是一个刚体状态源(Body State Source),它为根组件报告机体的真值,读状态的代码(例如传感器)不必再对位姿做差分,这一行为从 uBotAerial 0.1.1 起提供。
| 内容 | 说明 |
|---|---|
| 位置、姿态、线速度、线加速度 | 与 Get Multirotor State 同一份,来自最近一个物理步,世界轴,SI 单位 |
| 角速度 | 世界系,单位 rad/s。Get Multirotor State 里的角速度在机体系,状态里是它转到世界系的结果 |
| 角加速度 | 世界系,单位 rad/s²:该物理步里世界角速度的变化除以步长。Reset Flight 和停止运动的 Teleport Multirotor 把它和线加速度一起清零 |
| 时间戳 | 这个物理步的 uBot 仿真时间 |
接口 IUBotBodyStateSource 只能在 C++ 里使用,蓝图里没有对应的节点;蓝图里用 Get Multirotor State 读同一份数据。
状态不是呈现的位姿
Section titled “状态不是呈现的位姿”状态属于最近一个物理步,最多落后仿真时间一个步长。组件的位姿每帧外推到当前仿真时间,所以物理落后于仿真时间时,位姿和状态相差一个外推量。读状态的传感器因此得到积分器的真值,位置和朝向仍取自组件变换。
提供哪个组件
Section titled “提供哪个组件”- 只提供根组件。
VisualRoot、旋翼和其他组件不是被提供的刚体。 - 挂在它们下面的传感器沿附着链向上找到根组件,把中间的部分当作刚性连接,传感器相对根组件的位置(杠杆臂)计入速度和加速度。
- 从组件注册起就占有根组件,BeginPlay 之前读取返回失败。
- uBotSensor 的位姿、里程计和 IMU 从 0.1.2 起读这份状态,见读取刚体状态。
不能绑定给物理后端
Section titled “不能绑定给物理后端”提供状态的组件同时声明机体归它驱动。把无人机根组件绑给物理后端的 Bind 会被拒绝,与 BeginPlay 的先后无关。无人机的动力学已经由 Movement 计算,不需要再交给别的后端。
- 读取刚体状态:传感器怎样使用状态。
- uBotPhysics:绑定与所有权规则。
- 用速度指令飞导航无人机:
Tilt Mode与传感器的姿态。