如何利用SUMO的加速度/速度数据设置UE4中车辆的油门输入
UE4与SUMO仿真车辆速度同步的可行方案
方案1:基于物理引擎的速度直接设置(推荐,平滑度最高)
如果你的UE4车辆对象搭载了物理碰撞组件(不管是原生载具模板的WheeledVehicleMovement组件,还是普通Actor绑定的带物理模拟的骨骼网格体),可以直接调用物理速度设置接口:
- C++ 调用方式:使用
UPrimitiveComponent::SetPhysicsLinearVelocity()设置线速度,UPrimitiveComponent::SetPhysicsAngularVelocityInDegrees()设置角速度,参数直接传入从SUMO同步来的对应矢量即可,注意要提前做坐标系转换:SUMO为右手坐标系,UE4为左手坐标系,需要对应翻转X轴与Z轴的数值符号,避免速度方向偏移。 - 蓝图调用方式:直接搜索并使用「Set Physics Linear Velocity」「Set Physics Angular Velocity in Degrees」节点即可,不需要手动计算位移,UE4物理引擎会自动根据给定的速度值驱动车辆平滑移动,完全不会出现teleport的跳变感。
方案2:基于时间步长的位移累加(适合无物理模拟的场景)
如果你的车辆没有开启物理模拟,也可以通过每帧位移叠加实现平滑移动:
- 两边提前对齐固定仿真步长(建议统一设置为10ms/20ms的固定步长,不要使用可变帧长),UE4每帧Tick时,用SUMO同步来的线速度乘以当前帧的
DeltaTime得到单帧位移量,调用Add Actor World Offset节点叠加该位移,同时同步设置车辆旋转角度即可。 - 若出现轻微位置偏差,不要直接硬设位置修正,可以给当前线速度增加一个和误差值正相关的小补偿量,几帧内就会平滑对齐,不会出现跳变。
关键注意点
务必先对齐两端的时间轴,建议采用SUMO单步仿真推进→推数据到UE4→UE4更新车辆状态的同步逻辑,避免两端时间步差导致的位移、转向不同步。转向同步可以额外同步SUMO的车辆横摆角速度,直接设置UE4车辆的角速度,比逐帧硬设转角的平滑度高很多。
内容的提问来源于stack exchange,提问作者Peter Y
相关产品推荐
相关产品推荐

