Apollo 星火计划课程笔记 ---- Control

Apollo control

控制模块简介

在这里插入图片描述

输入车自身的信息,位置信息和路径信息。输出油门、刹车、方向盘、档位信息给汽车底盘。

需要对汽车进行建模:

  • 动力学模型
    经典力学的角度进行建模

    在这里插入图片描述

在这里插入图片描述

  • 运动学模型
    把汽车当作刚体,根据汽车的运动规律对汽车进行建模
    在这里插入图片描述

动力学主要考虑受力,运动学主要考虑运动轨迹。

PID+LQR(MPC)

PID 做纵向控制,LQR主要是横向控制(方向盘的控制)。MPC两种都可以做。

在这里插入图片描述

汽车负载变化,相同的PID参数是不太可靠的。

PID三个参数调节:

在这里插入图片描述

LQR控制方法:

在这里插入图片描述

Q是时间的权重,R是代价的权重。 Q,R 参数矩阵调节计算COST。

在这里插入图片描述

指定Q,R之后,是的代价函数最小。最优控制理论的东西。

Apollo控制模块

在这里插入图片描述

纵向控制----->刹车油门,主要是级联PID。第一个是位置,第二个是速度,坡度补偿。最后通过校正表。校正表的作用就是:你现在知道你的速度,知道你的加速度,但是你不知道踩大的油门。这个校正表就是在你知道这些信息的时候,查询这个表你要多大的油门。
得到这个值之后,你再去进行反馈,达到这个值。

系统响应比较慢,条件P,过充比较大,调节D这个值。

坡度补偿:

在这里插入图片描述

坡度值根据汽车的俯仰角得到。但是会有噪声,因此加上了数字滤波。

代码环节

Control模块是一个定时模块,也就是会定时触发。

class ControlComponent final: public apollo::cyber::TimerComponents{}

Control模块会调用配置文件 control_conf.pb.txt。值得注意的是:告诉的PID参数和低速的PID参数是不一样。
还有倒车的PID参数。也就是不同场景下,PID参数可能会不一样。

lon_controller.cc 


//纵向
Status LonController::ComputeControlCommand(
    //获取定位信息,汽车信息,轨迹信息
    localization_ = localization;
    chassis_ = chassis;
    trajectory_message_ = planning_published_trajectory;


    //计算位置的error
    double station_error_limit = lon_controller_conf.station_error_limit();
    //...
    //...


    station_pid_controller_.SetPID() //位置PID调节
    //...
    //...


    //计算速度error
    double speed_offset = station_pid_controller_.Control(station_error_limited, ts);
    //...
    //...

    //坡度补偿,从汽车Pitch获取 GRA_ACC重力加速度
    double slope_offset_compensation = digital_filter_pitch_angle_.Filter(
        GRA_ACC * std::sin(injector_->vehicle_state()->pitch());

    //坡上提车或者near-stop的时候
    acceleration_cmd = 
    (chassis->gear_location() == canbus::Chassis::GEAR_REVERSE)
            ? std::max(
                acceleration_cmd,
                -lon_controller_conf.standstill_acceleration()
            )

)

坡上停车加速度不为0,不然会溜车。

汽车标定:
油门刹车和加速度的关系。

标定工具
tools\vehicle_calibration\

生成的表:
calibration_table.pb.txt

在这里插入图片描述

作业

  1. 遇到长下坡,PID调节是否会和人一样"不能长时间踩脚踏板"?
  2. 高速和低速的PID参数是否会一致?为什么?

Q&A

Q1: Apollo标定论文,讲解了原理和方法。

Q2: PID响应时间?响应时间看行业标准,算法。没有严格标准。

Q3: Apollo为什么没有用MPC? Apollo使用PID和LQR足够。

Q4: PID和LQR对车辆模型敏感,不太适合动态,但对于Apollo够用。

Q5: 坑坑洼洼会导致系统震荡,有反馈进行一定的调节。

Q&A

Q1: Apollo标定论文,讲解了原理和方法。

Q2: PID响应时间?响应时间看行业标准,算法。没有严格标准。

Q3: Apollo为什么没有用MPC? Apollo使用PID和LQR足够。

Q4: PID和LQR对车辆模型敏感,不太适合动态,但对于Apollo够用。

Q5: 坑坑洼洼会导致系统震荡,有反馈进行一定的调节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值