碰撞
需要:uBotAerial 0.1.x(含依赖 uBotCore),并启用引擎插件 EnhancedInput
了解无人机碰到地面、墙和其他物体时的行为,并用 On Impact 在蓝图里得知撞击。
无人机撞上东西,开始接触且沿表面法线的速度够大时,Movement 组件触发 On Impact:
连线:
- On Impact (Movement) 的 执行,连到 Print String 的 执行
- On Impact (Movement) 的 Impact Speed Meters Per Second,连到 To String (Float) 的 In Double
- To String (Float) 的 Return Value,连到 Print String 的 In String
On Impact (Movement)
uBot Multirotor Movement · UBotAerial
无人机开始接触物体,且撞击速度不低于 Impact Event Min Speed 时触发。
输出
- 执行
- Hit
Hit Result结构体 - Impact Speed Meters Per Second
Float
查看参考UUBotMultirotorMovementComponent.OnImpact
To String (Float)
UE 引擎 · 中文界面:转换为字符串(浮点)
Converts a double value to a string
输入
- In Double
Float (double)
输出
- Return Value
String
查看参考UKismetStringLibrary.Conv_DoubleToString
Print String
UE 引擎 · 中文界面:打印字符串
Prints a string to the log, and optionally, to the screen If Print To Log is true, it will be visible in the Output Log window. Otherwise it will be logged only as 'Verbose', so it generally won't show up.
输入
- 执行
- In String
String - Print to Screen
Boolean - Print to Log
Boolean - Text Color
Linear Color结构体 - Duration
Float - Key
Name
输出
- 执行
查看参考UKismetSystemLibrary.PrintString
-
选中
Movement组件在无人机蓝图的「Components」面板里选中
Movement。 -
添加事件
在「Details」面板的「Events」区点
On Impact旁的「+」,照上图连线。 -
按需调整
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等从外部移动无人机时,飞行模型在下一帧接管新位姿,速度保持。
- uBot Multirotor Movement:
On Impact、Reset Flight和Teleport Multirotor。 - 示例无人机与试飞关卡:试飞关卡里有墙、斜墙、平台和立柱可以撞。