概述
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
对于计算机系的同学来说,关于自动驾驶这块最难以理解的部分就是自动控制算法这块。虽然在大学的时候,自己也选修过过程控制和运动控制,甚至也用matlab仿真过传递函数,用单片机实现过由传递函数转换过来的差分方程,但是那些都已经是过去式了。所以对于自动驾驶来说,关于控制这块建议大家多多参考apollo代码。
1、控制模块代码的位置
https://github.com/ApolloAuto/apollo/tree/master/modules/control
2、输入和输出内容
输入为局部路径、车辆状态、车辆位置和终端命令
输出为油门、刹车和转向
一般来说,路径、时间、地点都是决策和规划层设计好的,控制层只要完成这些目标就可以了
3、基本控制内容
横向控制
纵向控制
4、横向控制算法
LQR、MPC算法
5、纵向控制算法
PID、MPC算法
6、主要配置文件
https://github.com/ApolloAuto/apollo/blob/master/modules/control/conf/control_conf.pb.txt
7、和其他模块的协议
https://github.com/ApolloAuto/apollo/tree/master/modules/control/proto
最主要的控制命令输出,
// next id : 27
message ControlCommand {
optional apollo.common.Header header = 1;
// target throttle in percentage [0, 100]
optional double throttle = 3;
// target brake in percentage [0, 100]
optional double brake = 4;
// target non-directional steering rate, in percentage of full scale per
// second [0, 100]
optional double steering_rate = 6;
// target steering angle, in percentage of full scale [-100, 100]
optional double steering_target = 7;
// parking brake engage. true: engaged
optional bool parking_brake = 8;
// target speed, in m/s
optional double speed = 9;
// target acceleration in m`s^-2
optional double acceleration = 10;
// model reset
optional bool reset_model = 16 [deprecated = true];
// engine on/off, true: engine on
optional bool engine_on_off = 17;
// completion percentage of trajectory planned in last cycle
optional double trajectory_fraction = 18;
optional apollo.canbus.Chassis.DrivingMode driving_mode = 19
[deprecated = true];
optional apollo.canbus.Chassis.GearPosition gear_location = 20;
optional Debug debug = 22;
optional apollo.common.VehicleSignal signal = 23;
optional LatencyStats latency_stats = 24;
optional PadMessage pad_msg = 25;
optional apollo.common.EngageAdvice engage_advice = 26;
optional bool is_in_safe_mode = 27 [default = false];
// deprecated fields
optional bool left_turn = 13 [deprecated = true];
optional bool right_turn = 14 [deprecated = true];
optional bool high_beam = 11 [deprecated = true];
optional bool low_beam = 12 [deprecated = true];
optional bool horn = 15 [deprecated = true];
optional TurnSignal turnsignal = 21 [deprecated = true];
}
8、主要算法代码
https://github.com/ApolloAuto/apollo/tree/master/modules/control/controller
注意,函数入口都是ComputeControlCommand
9、模块入口代码
https://github.com/ApolloAuto/apollo/blob/master/modules/control/control_component.cc
ps:
作为计算机系的同学来说,看懂PID问题不大,但是LQR和MPC还是难度不小的。建议大家可以边仿真,边阅读代码。代码逻辑本身不复杂,关键是理解函数调用流程和代码公式中每一个参数的意义。同时,车辆控制需要以车辆运动学和车辆动力学作为基础,这方面需要加强学习,前者偏向于几何分析,后者偏向于力学分析。
除了LQR之外,一般还有一种基于几何的纯跟踪算法,大家也可以看一下,比如这篇博客https://blog.csdn.net/AdamShan/article/details/80555174。当然PID、LQR、MPC都是常用的控制算法,建议大家好好掌握。
另外关于PID算法,有一篇非常详细的blog,建议大家可以好好关注一下。https://blog.csdn.net/u010312937/article/details/53363831。这篇文章不仅描述了基本的PID算法,还描述了如何对PID算法进行优化和改进,实在是非常难得。
最后
以上就是无私超短裙为你收集整理的无人驾驶(自动控制算法模块)的全部内容,希望文章能够帮你解决无人驾驶(自动控制算法模块)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复