Apollo学习——油门标定方法

在Apollo自动驾驶系统中,油门标定是纵向控制的关键环节,旨在建立油门踏板开度、车速与加速度之间的映射关系,从而为控制算法提供精准的输入参数。


基础:
横向控制的原理:方向盘----->前轮转角----->车的航向角
纵向控制的原理:油门、刹车—>车速
那么踩油门控制的是什么,怎么控制车速?
当踩油门时,发动机的功率会提高,但发动机的功率的提高与车速有什么关系?
P = F ∗ V = F ∗ r ∗ V / r = M ∗ w P = F*V = F*r* V/r = M*w P=FV=FrV/r=Mw
其中:P表示功率,M表示扭矩,W表示角速度。
知识点补充:旋转物体的扭矩计算公式为T=9550P/n,P是功率,单位是KW。n是转速,单位是r/min。扭矩单位为Nm。一般的扭矩就是力*力臂。
扭矩·:扭矩就是圆周运动时的力矩,可以简单理解为作用力迫使物体产生旋转的一种特殊力矩。对应发动机曲轴就是燃料燃烧做功产生的压力驱使曲轴产生旋转,最终将旋转的力矩传递出去。
物理中:力矩=力X力臂(直线)
而在旋转状态下:扭矩(特殊的力矩)=力X旋转半径r,因此要想知道发动机的扭矩那曲轴旋转半径r必须是已知的。
油门控制可以表示为:油门----->功率----->转速/扭矩----->车速/车加速度----->车速度
车辆的纵向控制之标定

一、标定目的与基本原理

  1. 目标
    构建车辆纵向动力学模型,生成标定表(Calibration Table),描述不同车速(v)和加速度(a)下的最优油门开度(Throttle)。
  2. 核心公式
    T h r o t t l e = f ( v , a ) Throttle = f(v, a) Throttle=f(v,a)
    通过实验数据拟合该函数关系,形成三维控制曲面,用于实时控制时反向查询所需油门量。

二、标定条件与数据划分

Apollo将标定数据按以下条件分段处理,以覆盖全工况范围:

  • 速度条件
    • 低速(0~10 m/s)、中速(10~20 m/s)、高速(≥20 m/s)
  • 油门条件
    • 小油门(死区~25%)、中油门(25%~30%)、大油门(≥30%)
  • 刹车条件(联动标定时考虑)
    • 小刹车(死区~20%)、中刹车(20%~25%)、急刹车(≥25%)

三、标定方法步骤

1. 数据采集
  • 工具与平台

    • 使用Carsim搭建车辆动力学模型,通过Matlab/Simulink或Apollo内置脚本(如data_collector.py)进行仿真。
    • 实车标定时需启动Apollo的canbuslocalization等模块,确保GPS信号良好(sol_type=NARROW_INT)。
  • 操作流程

    # 示例:Apollo脚本采集数据
    python data_collector.py 12 1 -15  # 输入油门12%、目标速度1m/s、刹车-15%
    # 文件位置:modules/tools/vehicle_calibration/data_collector.py
    # 可视化采集结果	
    python plot_data.py t10b15r_recorded.csv
    # 处理指定数据文件
    python process_data.py /path/to/raw_data.csv 
    # 输出文件:
    # - /path/to/raw_data.csv.result (单次结果)
    # - result.csv (累积结果)
    

    多次执行以覆盖不同油门-速度组合,生成.csv格式的原始数据文件。

参数说明:
正数表示油门指令,负数表示刹车指令
目标速度决定标定表的覆盖范围

倒车标定中需要修改data_collector.py

def run(self, cmd):
   ...
   print('Send Default Command.')
   self.controlcmd.pad_msg.action = 1
   self.controlcmd.throttle = 0
   self.controlcmd.brake = 0
   self.controlcmd.steering_rate = 100
   self.controlcmd.steering_target = 0
   self.controlcmd.gear_location = chassis_pb2.Chassis.GEAR_DRIVE # 倒车标定需要更换倒车档:GEAR_REVERSE
   ...
2. 数据处理与拟合
  • 数据清洗
    剔除异常值(如车速为0时的无效减速度),填充低车速区间的数据连续性。

  • 插值算法
    采用scatteredInterpolant(Matlab)或griddata(Python)进行三维散点插值,生成平滑的油门控制曲面。

    F = scatteredInterpolant(v', a', thr');  % 三维插值拟合
    vu = 0:0.1:50;  au = 0:0.1:5;
    table = zeros(length(vu), length(au));
    for i = 1:length(vu)
        for j = 1:length(au)
            table(i,j) = F(vu(i), au(j));  % 生成标定表
        end
    end
    
3. 生成标定表
  • 格式转换
    将拟合结果转换为Apollo控制模块所需的Protobuf格式(.pb.txt),存储于modules/calibration/data目录。
    calibration {
      speed: 4.4
      acceleration: 3.19
      command: 80.0  # 油门指令
    }
    

  • 标定表生成流程
步骤工具输出文件
数据采集data_collector.py*_recorded.csv
数据处理process_data.pycalibration_table.pb.txt
验证测试control_main.py实车/仿真验证

4. 验证与优化
  • 仿真测试
    在Simulink中搭建闭环控制系统,验证标定表在速度跟踪、加速度控制等场景下的性能。
  • 实车调试
    通过rostopic监控底盘反馈,调整标定表中的死区(throttle_deadzone)和灵敏度参数。

四、高级标定方法

1. 基于深度学习的标定
  • 优势
    解决传统方法对实验条件(如路面平整度、载重变化)敏感的问题,支持在线动态更新标定表。
  • 实现
    将车速(v)、加速度(a)、车辆质量(m)作为输入特征,通过神经网络训练离线模型,并实时更新权重。
2. 云标定与动态更新
  • 流程
    1. 在Dreamview中采集标定数据并上传至BOS云盘。
    2. 提交标定任务,云端通过机器学习生成高精度标定表。
    3. 下载标定结果并可视化评估性能。
  • 应用场景
    适用于车队级标定,减少单车调试成本。

五、标定表的应用

  • 控制模块调用
    Apollo的Control模块根据规划轨迹的加速度需求,从标定表中反向查询油门/刹车指令,通过PID或MPC控制器输出控制信号。
  • 实时性保障
    标定表以查表法(Lookup Table)实现,确保10ms级控制周期内完成指令计算。

六、与传统方法的对比

维度传统标定方法深度学习/云标定
实验条件需严格直线行驶、固定载重支持复杂路况、动态载重
数据量依赖大量人工采集少量数据即可启动训练
实时性静态表,无法在线更新支持动态参数调整
适用场景单一车型、固定配置多车型、跨平台适配
维护成本高(需重复标定)低(自动化更新)

参考资料

  1. Apollo油门标定原理与仿真实现
  2. 实车标定操作指南
  3. 云标定系统设计
  4. 深度学习标定方法
  5. 控制模块实现
### Apollo 平台油门标定方法 #### 油门标定的目的 车辆油门标定的主要目标是在不同车速下,通过调整油门踏板行程来获得预期的加速度。这一过程对于构建精确的纵向控制模型至关重要,该模型能够计算并输出合理的油门指令[^1]。 #### 双线性插值算法的应用 为了实现更精细和平滑的速度控制,在Apollo平台中采用了双线性插值算法来进行油门响应曲线的设计。这种方法允许系统根据当前行驶状态动态调整最佳的油门开度,从而提高驾驶体验的安全性和舒适度[^2]。 #### 数据驱动的自适应调校机制 除了传统的离线标定外,Apollo还引入了一种基于机器学习的数据驱动型在线优化策略。此方案利用实时收集到的实际运行数据不断更新和完善原有的静态映射关系,使得整个控制系统更加灵活高效。具体来说,特征向量包含了油门命令、速度以及期望与实际测量得到的加速度等多个维度的信息[^3]。 #### 准备工作指南 在执行具体的油门标定之前,需先做好一系列前期准备活动,包括但不限于访问相关源码文件(特别是Canbus部分)、切换至合适的驾驶模式,并挑选适合的道路环境开展实验验证等工作流程[^4]。 ```bash # 进入项目目录并拉取最新代码版本 cd apollo && git pull origin master # 修改配置使能调试功能 vim modules/canbus/conf/gflags_conf/canbus.conf # 启动模拟器或其他必要的服务组件 ./scripts/bootstrap.sh start ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.小墨迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值