在自动驾驶系统中,局部路径规划与控制模块(Local Planner & Controller)相当于车辆的"小脑",负责将全局规划好的粗路径转化为可执行的精细轨迹,并输出控制指令让车辆安全、平顺地行驶。这个基于ROS的CRV总规划控制项目,正是为了解决这一核心问题而生。
我在参与某园区无人车项目时,曾深刻体会到传统PID控制在复杂场景下的局限性——当遇到突然出现的行人或障碍物时,车辆要么反应迟钝,要么产生剧烈顿挫。而本项目采用的"规划+控制"分层架构,通过动态避障算法和模型预测控制(MPC)的结合,实现了厘米级的路径跟踪精度和人性化的乘坐体验。
系统采用典型的ROS节点通信架构:
code复制全局规划节点 → 局部规划节点 → 控制节点 → 底盘执行器
↑ ↑
环境感知数据 车辆状态反馈
关键数据接口包括:
局部规划层:
控制层:
在传统的静态代价地图基础上,项目实现了三层障碍物处理:
cpp复制// 核心代码片段
void DynamicObstacle::updateSafetyMargin(double velocity) {
double min_margin = 0.3; // 静态安全距离
double dynamic_factor = velocity * 0.2;
safety_margin_ = min_margin + dynamic_factor;
}
TEB算法的7个核心参数及其影响:
| 参数名 | 默认值 | 物理意义 | 调整建议 |
|---|---|---|---|
| weight_kinematics | 1.0 | 运动学约束权重 | 履带车可降低至0.5 |
| penalty_epsilon | 0.1 | 约束松弛阈值 | 狭窄通道需减小 |
| dt_ref | 0.3 | 时间间隔参考值 | 高速场景应减小 |
调试心得:建议先用RViz的teb_markers可视化调试轨迹,再微调参数
经过实测验证的权重配置方案:
yaml复制mpc_weights:
state: [10.0, 10.0, 5.0] # x,y,heading
control: [1.0, 0.5] # accel,steer
terminal: [20.0, 20.0, 10.0]
调试时常见的"症状-对策":
针对常见的100-200ms执行延迟,项目采用两种补偿方式:
python复制# 延迟补偿示例
def compensate_delay(cmd, delay=0.15):
future_pose = predict_pose(current_state, delay)
return adjust_command(cmd, future_pose)
现象:规划出的轨迹出现不连续跳变
排查步骤:
根本原因:通常是规划与控制频率不匹配导致
解决方案:
xml复制<!-- 推荐参数配置 -->
<param name="control_freq" value="50" />
<param name="lowpass_cutoff" value="5.0" />
算法层面:
系统层面:
bash复制# CPU亲和性设置示例
taskset -c 2 rosrun local_planner teb_node
实测数据:优化后内存波动降低60%,GC停顿基本消除
在将算法部署到真实车辆前,务必验证:
标定检查:
安全测试:
人机交互:
这个项目最让我自豪的是在某个物流园区实现了连续30天无人工干预的稳定运行。期间遇到最棘手的问题是雨天激光雷达噪点导致的误避障,最终通过多传感器融合和动态参数调整完美解决。建议在实际部署时,一定要建立完善的日志系统——我们开发的rosbag自动分析工具,在问题定位时发挥了巨大作用。