Apollo代码学习(⼆)—车辆运动学模型
Apollo代码学习—车辆运动学模型
是⼀个开放的、完整的、安全的⾃动驾驶平台,以灵活和⾼性能的技术架构,为全⾃动驾驶提供⽀持。
前⾔
要实现对车辆的控制,研究其运动学模型和动⼒学模型必不可少。对横纵向控制的构成及实现做了概述,本⽂将从车辆的运动学和动⼒学模型⼊⼿,研究如何控制车辆,以及为什么这样控制车辆。
本⽂的观点及图表多基于下述书籍及链接,并结合Apollo代码整理⽽来,由于本⾝并没有学过实车相关的知识,对⼒学的认知也不够深,如有理解偏颇或侵权之处,请指正删改。
【1】
【2】
【3】
提倡⼤家⽀持正版资源,本⼈提供⽂档仅限交流学习使⽤,侵删:
【1】Rajamani R. Vehicle Dynamics and Control[M]. Springer Science, 2006. |
【2】龚建伟, 姜岩, 徐威. ⽆⼈驾驶车辆模型预测控制[M]. 北京理⼯⼤学出版社, 2014. |
车辆模型
车辆运动学模型与动⼒学模型的建⽴是出于车辆运动的规划与控制考虑的。⾃动驾驶场景下,车辆⼤多按照规划轨迹⾏驶,控制模块的作⽤就是控制车辆尽可能精准的按照规划轨迹⾏驶。这就要求规划轨迹尽可能贴近实际情况,也就是说,轨迹规划过程中应尽可能考虑车辆运动学及动⼒学约束,使得运动跟踪控制的性能更好。
搭建车辆模型主要是为了更好的规划和控制,因此,在分析模型时尽量以应⽤时所需的输⼊、输出对对象进⾏建模分析。Apollo中,计算控制命令需要车辆的定位信息、底盘信息以及规划信息等,
Status xxxController::ComputeControlCommand(
const localization::LocalizationEstimate *localization,//定位信息
const canbus::Chassis *chassis,//底盘信息
const planning::ADCTrajectory *planning_published_trajectory,//规划信息
ControlCommand *cmd //控制命令)
其中,
定位信息()包含
message LocalizationEstimate {
Header header =1;
optional apollo.localization.Po po =2;
optional Uncertainty uncertainty =3;
// The time of po measurement, conds since the GPS epoch (Jan 6, 1980).
optional double measurement_time =4;// In conds.
// Future trajectory acturally driven by the drivers
TrajectoryPoint trajectory_point =5;
}
底盘信息()包含
message Chassis {
enum DrivingMode {
COMPLETE_MANUAL =0;// human drive
COMPLETE_AUTO_DRIVE =1;
AUTO_STEER_ONLY =2;// only steer
AUTO_SPEED_ONLY =3;// include throttle and brake
// curity mode when manual intervention happens, only respon status EMERGENCY_MODE =4;
}
...
// Only available for Lincoln now
optional ChassisGPS chassis_gps =28;
EngageAdvice engage_advice =29;
}
规划信息()包含
message ADCTrajectoryPoint {
optional double x =1;// in meters.
optional double y =2;// in meters.
optional double z =3;// height in meters.
optional double speed =6;// speed, in meters / cond
个税免征额
鸟字笔顺optional double acceleration_s =7;// acceleration in s direction
optional double curvature =8;// curvature (k = 1/r), unit: (1/meters)
// change of curvature in unit s (dk/ds)
optional double curvature_change_rate =9;
// in conds (relative_time = time_of_this_state - timestamp_in_header) optional double relative_time =10;
optional double theta =11;// relative to absolute coordinate system
// calculated from the first point in this trajectory
optional double accumulated_s =12;
// in meters, reference to route SL-coordinate
optional double s =4[deprecated = true];
// in meters, reference to route SL-coordinate
optional double l =5[deprecated = true];
}
对上述元素进⾏精简,我们需要关注的信息主要有:
图1 车辆模型
图2 单车模型
为OA、OB的交点,是车辆的瞬时滚动中⼼,线段OA、OB分别垂直于两个滚动轮的⽅向;为滑移⾓(Tire Slip Angle),指车辆速度⽅向和车⾝朝向两者间所成的⾓度,为航向⾓(Heading Angle),指车⾝与X轴的夹⾓。千年木的养殖方法和注意事项
βψ
基于单车模型,如图2所⽰,搭建车辆运动学模型。由正弦法则:
展开公式可得:
联⽴公式可得:
低速环境下,车辆⾏驶路径的转弯半径变化缓慢,此时我们可以假设车辆的⽅向变化率等于车辆的⾓
速度。则车辆的⾓速度为
联⽴公式可得:
则在惯性坐标系XY下,可得车辆运动学模型:
此模型中有三个输⼊:、、。滑移⾓可由公式求得:
=ℓf sin(δ−β)f R
sin(−δ)
2π
捕蛇者说f (1.1)
=ℓr sin(β−δ)r R
sin(+δ)2π
r (1.2)
家长育儿心得(1.1)(1.2)=ℓf sin δcos β−sin βcos δf f R
大国崛起解说词cos δf (1.3)
=ℓr cos δsin β−cos βsin δr r R
cos δr (1.4)
(1.3)(1.4)(tan δ−f tan δ)cos β=r R
ℓ+ℓf r
(1.5)
=ψ
官财˙R V (1.6)
山药炖鸡
(1.5)(1.6)=ψ
˙(tan δ−ℓ+ℓf r V cos β
f tan δ)r (1.7)
⎩
⎪⎨⎪⎧=V cos(ψ+β)X ˙=V sin(ψ+β)Y ˙=(tan δ−tan δ)ψ˙ℓ+ℓf r V cos β
f r (1.8)
δf δr V β(1.3)(1.4)β=tan ()
−1ℓ+ℓf r ℓtan δ+ℓtan δf r r f
(1.9)