跳转到内容

碰撞

需要:uBotAerial 0.1.x(含依赖 uBotCore),并启用引擎插件 EnhancedInput

了解无人机碰到地面、墙和其他物体时的行为,并用 On Impact 在蓝图里得知撞击。

无人机撞上东西,开始接触且沿表面法线的速度够大时,Movement 组件触发 On Impact:

连线:

  1. On Impact (Movement) 的 执行,连到 Print String 的 执行
  2. On Impact (Movement) 的 Impact Speed Meters Per Second,连到 To String (Float) 的 In Double
  3. To String (Float) 的 Return Value,连到 Print String 的 In String
撞击时在屏幕上显示撞击速度(m/s)
  1. 选中 Movement 组件

    在无人机蓝图的「Components」面板里选中 Movement。

  2. 添加事件

    在「Details」面板的「Events」区点 On Impact 旁的「+」,照上图连线。

  3. 按需调整

    Impact Event Min Speed Meters Per Second 决定多慢的撞击不触发事件;Contact Friction 决定沿表面滑动时的损失。

属性 默认值 作用
Impact Event Min Speed Meters Per Second 0.3 m/s 沿表面法线的撞击速度低于它时不触发 On Impact
Contact Friction 0.3 接触时滑动速度减少撞击速度的这个比例

On Impact 的参数是 Hit(命中结果)和 Impact Speed Meters Per Second(撞击速度,m/s)。事件在每帧的 tick 末尾按发生顺序触发,处理函数里可以再发指令。

另有两个节点处理重置和移动:

  • Reset Flight:停止所有运动、清除当前指令,并在当前位姿重新悬停。
  • Teleport Multirotor(New Location, New Rotation, Stop Motion):不扫掠地移动无人机,位置单位是 cm。Stop Motion 为 true(默认)时速度清零并在新位置悬停,否则保持速度继续飞。
  • 地面、墙和其他物体都只是碰撞面:无人机在表面前停住,沿表面滑动,接触期间照常执行每一条指令。没有着陆、起飞或坠毁状态,旋翼在地面上不会停转。
  • 开始时和 Reset Flight 之后,无人机都在当前位置悬停,放在地面上也一样。
  • 撞得再重也只触发 On Impact,无人机继续飞行,继续接受指令。
  • 每个物理步长,飞行模型沿运动方向扫掠根组件的碰撞形状,忽略无人机自己;旋转不参与扫掠,起点就嵌在几何体里时被推出。
  • 物理无人机的两种指令不会往最近 50 ms 内接触过的表面里推:速度设定值,以及姿态、角速度模式下不带推力的爬升率。在地面上按住下降键后紧接着上升,无人机立刻升起,不会迟钝。
  • 电机指令和带推力的指令不做这个处理。
  • 用 Set Actor Location 等从外部移动无人机时,飞行模型在下一帧接管新位姿,速度保持。