首页/文章/ 详情

一文看懂CARLA中的车辆动力学

3月前浏览4251
前言        

         

       

本文详细介绍CARLA的动力学模型,以便开发者能更加得心应手地使用CARLA。

             

什么是车辆动力学?

车辆动力学是研究车辆在不同驾驶条件下的运动和力学特性的学科。它涉及到汽车的运动、操作和控制,以及汽车所受到的各种力和力矩。

在车辆动力学的研究中,需要考虑多种复杂的因素,如车辆的重量、重心位置、空气阻力、摩擦力、惯性等。这些因素会对车辆的运动产生影响,从而影响驾驶者的操控感受和车辆的安全性能。                
车辆动力学主要研究以下几个方面:                
  1. 车辆模型:通常会采用一些简化的车辆模型,如集中质量模型、弹簧-阻尼模型等,以便于分析车辆的动力学特性;
  2. 牛顿运动定律:包括惯性定律、动量定律和能量定律等。这些定律描述了物体运动的基本规律,可以用来分析车辆的运动状态;
  3. 车辆动力学特性:包括车辆的加速度、速度、角速度等运动参数,以及轮胎的力-滑移特性、发动机的扭矩-转速特性等。这些特性决定了车辆在不同条件下的运动表现;
  4. 稳定性分析:稳定性是车辆动力学的一个重要问题,包括纵向稳定性、横向稳定性和垂向稳定性等。稳定性分析可以用来研究车辆在行驶过程中的平衡状态和失稳条件;
  5. 操纵性分析:操纵性是评价车辆动力学性能的重要指标之一,包括转向性能、制动性能和加速性能等。操纵性能的好坏直接影响到驾驶者的操控感受和车辆的安全性能;
  6. 空气动力学:如空气阻力、升力、侧向力和压力分布等。空气动力学对车辆的动力学性能和行驶稳定性有一定的影响;
  7. 轮胎力学:轮胎是车辆与地面接触的唯一部分,其力学特性对车辆的动力学性能有很大的影响。轮胎力学包括轮胎的力-滑移特性、轮胎的侧向力和纵向力等;
为了在仿真世界中实现车辆动力学,首先需要实现物理引擎;下面简要介绍一下CARLA底层采用的Unreal Engine(虚幻引擎,简称UE)的物理引擎。                
       
         

UE的物理引擎

目前业界主要有三大物理引擎,分别是PhysX、Havok、Bullet。                
             
PhysX:由NVIDIA开发的实时物理模拟引擎,广泛用于游戏开发,提供高性能、精确和逼真的物理模拟功能。            
Havok:一款可靠且广泛应用的物理引擎,提供出色的碰撞检测和物体模拟功能,被广泛应用于游戏和影视制作领域。            
Bullet:开源的物理引擎,具有广泛的跨平台支持,并以其稳定性和高性能而闻名,被广泛应用于游戏和动画领域。            
Unreal Engine(简称UE)原生默认支持PhysX物理引擎解决方案,这也是大部分项目常用的技术方案。与此同时,UE 从4.23版本之后,也推出了Unreal Chaos物理系统。对于大多数项目而言,Unreal PhysX基本能够满足需求,可以良好地支持常规场景查询和物理模拟。            
Chaos的主要技术目标是实现大规模物理可破坏组件的使用。如果项目具有大量高级物理模拟和可破碎建筑,那么使用Chaos会带来更稳定和高效的性能。在一般场景查询方面,PhysX的性能优于Chaos,只有在处理高级大规模可破坏物体模拟时,Chaos才能展现其优势。            
CARLA用于模拟车辆在各种复杂交通场景下的自动驾驶性能,较少涉及破碎效果的模拟。因此,对于CARLA来说,PhysX物理系统是个不错的选择(UE从V5开始,抛弃了PhysX,如果要使用UE5或为更长远做打算,也建议选用Chaos)。            

         

UE 的车辆动力学

CARLA当前版本(0.9.15)基于UE4.26,这个版本的UE同时支持PhysXVehicles和ChaosVehicles(前者被标记为deprecated),但基于上面的分析,CARLA中依旧选用了PhysXVehicles。

我们来对比一下这两个插件的组成部分,可以看出二者功能是相似的:

       

可以在 UnrealEditor -> Edit -> Plugins 中搜索到PhysXVehicles插件。

车轮

车轮作为汽车基础部件,被定义在名为VehicleWheel的类中。车轮拥有多个参数,其中部分重要的参数如下:        
  1. 车轮半径(ShapeRadius)
  2. 车轮宽度(ShapeWidth)
  3. 车轮质量(Mass)
  4. 阻尼率(DampingRate):阻尼系数,用于衡量车轮在受到外部冲击时吸收冲击能量的能力。阻尼率的值越大,车轮的减震效果越好,车辆行驶更加平稳。
  5. 转向角度(SteerAngle):车轮与车辆直行方向之间的夹角,以度数表示。
  6. 轮胎摩擦力(TireConfig):轮胎的摩擦系数和摩擦角度。
  7. 横向刚度值(LatStiffValue):轮胎在受到横向力时的刚度表现或者对该横向力的抵抗能力。高横向刚度值表示轮胎具有更好的操控性和稳定性。
  8. 纵向刚度值(LongStiffValue):轮胎在受到纵向力时的刚度表现或者对该纵向力的抵抗能力。较高的纵向刚度值表示轮胎具有更好的加速和制动性能,并能更好地传递动力和提供牵引力。
  9. 最大制动扭矩(MaxBrakeTorque):车轮能够承受的最大制动力矩,反映了车轮和制动系统的极限能力。制动扭矩越大,车辆在制动过程中的减速速度越快,制动距离越短。
  10. 最大手刹制动扭矩(MaxHandBrakeTorque):车轮能够承受的最大手刹制动力矩,用于评估手刹系统的性能和可靠性。
车轮位置(Location)和速度(Velocity)也是车轮参数的一部分,可以用于定位和测量车轮的状态。        

车辆运动组件

       

汽车运动组件的核心在于UWheeledVehicleMovementComponent4W,它实现了四轮车辆的动态表现。其中包含的参数集不容忽视,包括但不限于以下几个:

  1. 车辆引擎数据:涉及车辆引擎性能方面的各种参数,如扭矩曲线、最大转速、转动惯量等。
  2. 车辆差速器数据:车辆前后轮及左右轮之间的扭矩分配比例。
  3. 车辆变速器数据:车辆换挡及各种齿轮比率、换挡时间等参数。
  4. 方向盘曲线:表示允许的最大转向角度与前向速度的关系曲线。随着车速的提高,允许的最大转向角度也相应减小。

车辆引擎

车辆引擎是汽车动力组件中不可或缺的一部分,下面是该部分的各项参数和功能。        
  1. 扭矩曲线(TorqueCurve):用以描述引擎在给定转速下扭矩(Nm)的变化曲线。其对于揭示引擎的动力输出与转速之间的关系具有重要意义。
  2. 最大转速(MaxRPM):该属性代表着引擎的最高转速,以每分钟转数(RPM)为单位进行度量。这个属性限制了引擎最高可以旋转的速率。
  3. 转动惯量(MOI):用于描述引擎在旋转时的惯性,以千克米平方(Kgm^2)为单位。其值的高低对于引擎在不同转速下的稳定性和响应性具有决定性作用。
  4. 阻尼率(DampingRate):阻尼率用于描述物体在振动过程中衰减的速率,对于控制引擎的振动特性具有至关重要的作用。阻尼率在不同转速下也有所不同,可分为全油门、零油门、离合器接合、离合器分离四种状态。
  5. 峰值扭矩(PeakTorque):峰值扭矩是引擎动力输出的最高点,其位置取决于引擎的结构和设计。通过扭矩曲线找到峰值扭矩可用于测算引擎最大动力输出。

变速器

       
变速器是车辆运动组件的一个部分,数据详细如下:        
  1. bUseGearAutoBox:表示是否使用自动变速器。如果为true,则车辆将自动选择最适合当前行驶条件的传动档位;如果为false,则需要手动选择档位。
  2. GearSwitchTime:表示切换档位所需的时间(以秒为单位)。它定义了从一个挡位到另一个挡位的过渡时间。较短的过渡时间意味着换挡速度更快。
  3. GearAutoBoxLatency:表示自动变速器发起换挡所需的最小时间,以秒为单位。在车辆使用自动变速器时,该时间定义了自动变速器检测到需要换挡并实际发起换挡之间的延迟。
  4. FinalRatio:最终挡位比例,用于乘以传动挡位比例。它决定了最终挡位的效果。通过调整这个比例,可以改变车辆的加速性能和最高速度。
  5. ForwardGears:一个存储正向挡位比例的数组。它可以包含多达30个正向挡位。每个正向挡位比例定义了车辆在不同挡位下的传动比例,影响了车辆的速度和加速能力。
  6. ReverseGearRatio:表示倒挡的比例。它定义了车辆在倒挡时的传动比例,用于控制倒车速度。
  7. NeutralGearUpRatio:定义了引擎转速(engineRevs)相对于最大引擎转速(maxEngineRevs)的一个高值比例。当引擎转速达到这个比例时,车辆会递增挡位,正常情况下是从空挡转到第一挡。
  8. ClutchStrength:这个变量表示离合器的强度,以Kgm^2/s为单位。离合器用于控制发动机输出转矩到变速器的传递。离合器强度越大,传递给变速器的转矩越高,车辆的加速能力也就更强。



         

CARLA的车辆动力学


CARLA车辆的基类是CarlaWheeledVehicle,它继承自PhysXVehicle组件的WheeledVehicle。生成车辆时,这个类的构造函数初始化了VehicleBounds和BaseMovementComponent,前者用于保存和获取车辆的长宽高,后者是继承于UE的MovementComponent的移动组件类。在这个类的BeginPlay函数中,设置了车门以及初始化了轮胎摩擦力。另外类中有一些设置(Setter)和获取(Getter)函数,包括车辆状态、控制信号、BoundingBox、物理(动力学)特性等。

CARLA支持UE PhysX车辆动力学,也支持CarSim车辆动力学,默认为前者。

VehicleControl是一个结构体,包括了控制车辆所需的所有变量,即油门、转向、刹车等。当车辆接收到输入的控制信号时,CARLA车辆移动组件会调用ProcessControl函数来将控制信号应用到车辆上。

       
其中第3行GetVehicleMovementComponent函数是PhysXVehicle组件的一个API,用于获取车辆的移动组件:        
       
最后,CARLA车辆的物理特性用VehiclePhysicsControl来表示,其包含了上文中的部分物理特性,另外还有2个关于车辆本身的物理特性:
  1. DragCoefficient:空气阻力系数,是衡量车辆在行驶过程中所受空气阻力的一个重要参数。它是由一定特征面积计算得出的单位面积,表示空气对行驶中的车辆形成的一种反向力。空气阻力与速度的平方成正比,因此,高速车对空气阻力的影响非常明显。如果汽车的风阻系数较高,意味着行驶时所受的空气阻力较大,会导致更高的油耗和更低的车辆稳定性。
  2. CenterOfMass:质心位置,对于车辆的控制比较重要。当质心位置在车辆前方时,会降低车辆的转向灵敏度(Understeering),当质心位置在车辆后方时,会增加车辆的转向灵敏度(Oversteering)。因此如果要调整车辆的转向性能,质心时不可忽视的点。

如果要在CARLA中设置车辆的动力学参数,例如下面这样即可:

CARLA Vehicle的apply_physics_control方法 会在被调用的下一帧将参数应用到车辆上。

 
     
     

总结

   
在对汽车性能进行模拟的场景下,CARLA 提供了丰富的动力学模拟工具。在不过于苛求精确性的仿真场景,这些工具具有良好的适用性。导入外部车辆动力学模型时,如果未明确相关的动力学参数,则可以结合已有模型进行修改,以便优化加速性能和转向性能。比如,当车辆过于敏捷时,可以适当增加轮胎横向刚度,或向前调整质心位置以改善转向表现。当发现车辆动力性能低于实际车辆时,可以进行优化调整,如调整扭矩曲线、降低轮胎摩擦力、降低风阻系数等,以改善加速表现。      
   

来源:孙工自动驾驶
振动碰撞汽车建筑UG自动驾驶传动游戏控制CarSim
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-01-13
最近编辑:3月前
孙工自动驾驶
硕士 专注自动驾驶仿真测试
获赞 15粉丝 14文章 73课程 0
点赞
收藏
未登录
还没有评论

课程
培训
服务
行家

VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈