授课内容:L1 路径跟踪算法原理与应用 适用场景:阿克曼结构小车导航
L1 控制器是一种高效的路径跟踪算法。
它主要用于阿克曼转向结构(类似汽车)的小车,帮助小车精准地沿着既定路线行驶。
比喻: 就像一个老司机在开车:
稳定性高:比简单的 PID 转向更平滑 计算快:算法逻辑简单,对硬件要求低 抗干扰:路面的一点小坑洼不会导致由于剧烈转向而翻车
算法会不断扫描 move_base 给出的全局路径:
move_base
这是 L1_controller_v2.cpp 中的核心公式:
L1_controller_v2.cpp
double L1Controller::getSteeringAngle(double eta) { // L 是轴距,Lfw 是前瞻距离 // 基于几何关系计算舵机转向角 double steering_angle = -atan2((L*sin(eta)),(Lfw/2+lfw*cos(eta)))*(180.0/PI); return steering_angle; }
提示:
eta
为了在高速下更稳,L1 距离会随着车速变化:
double L1Controller::getL1Distance(const double& _Vcmd) { double L1 = 0; if(_Vcmd < 1.34) L1 = 1.0; // 低速时前瞻 1 米 else if(_Vcmd > 1.34 && _Vcmd < 5.36) L1 = _Vcmd * 2.24 / 3.0; // 中速随速度增加 else L1 = 4.0; // 高速封顶 4 米 return L1; }
L1 控制器并不是独立工作的,它需要规划师提供地图。
/move_base/NavfnROS/plan
/odometry/filtered
/ackermann_cmd
流程: 路径输入 计算前瞻点 计算 Eta 角 输出转向 小车移动
# 1. 确保底盘和雷达已连接 # 2. 启动 L1 导航脚本 roslaunch tianracer_navigation tianracer_l1_nav.launch
操作步骤:
2D Nav Goal
如果车开得不好,可以尝试修改 tianracer_move_base.launch.xml:
tianracer_move_base.launch.xml
Vcmd
angle_gain
base_speed
goal_radius
课后练习: