跳转到内容

无人机的刚体状态

需要: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 读同一份数据。

状态属于最近一个物理步,最多落后仿真时间一个步长。组件的位姿每帧外推到当前仿真时间,所以物理落后于仿真时间时,位姿和状态相差一个外推量。读状态的传感器因此得到积分器的真值,位置和朝向仍取自组件变换。

  • 只提供根组件。VisualRoot、旋翼和其他组件不是被提供的刚体。
  • 挂在它们下面的传感器沿附着链向上找到根组件,把中间的部分当作刚性连接,传感器相对根组件的位置(杠杆臂)计入速度和加速度。
  • 从组件注册起就占有根组件,BeginPlay 之前读取返回失败。
  • uBotSensor 的位姿、里程计和 IMU 从 0.1.2 起读这份状态,见读取刚体状态。

提供状态的组件同时声明机体归它驱动。把无人机根组件绑给物理后端的 Bind 会被拒绝,与 BeginPlay 的先后无关。无人机的动力学已经由 Movement 计算,不需要再交给别的后端。