在自动驾驶系统的开发过程中,路径规划和控制指令下发是连接感知与执行的关键环节。Autoware作为开源自动驾驶框架,其路径规划模块的配置和调试往往成为工程师们最头疼的部分。本文将分享从全局路径规划到控制指令下发的完整流程,重点剖析实际部署中常见的"坑"及其解决方案。
在开始路径规划前,确保以下基础模块已正确运行:
常见启动问题排查清单:
/current_pose话题是否有稳定输出/detection/lidar_detector/objects包含障碍物信息/vector_map_info正确加载注意:建议使用
rostopic hz命令监控关键话题的发布频率,定位和感知数据不稳定会导致后续规划模块连锁故障。
全局路径规划模块(op_global_planner)负责生成从起点到终点的宏观路线。以下是典型问题及解决方法:
错误现象:
bash复制Goal Found, LaneID: 125, Distance: 3.14
Can't Generate Global Path for Start (x:10.2, y:5.7)
解决方案步骤:
/vector_map话题包含完整的lane和node信息参数调整建议:
| 参数项 | 推荐值 | 作用 |
|---|---|---|
| replanning | true | 允许动态重规划 |
| smoothing | true | 路径平滑处理 |
| enable_lane_change | false | 简易地图建议关闭 |
当出现路径反向规划时,可尝试:
2D Pose Estimate重新设定车辆方向direction属性设置op_global_planner的planning_distance参数(建议设为地图周长的1.2倍)局部规划模块(op_local_planner)包含5个关键节点,参数配置直接影响避障效果:
yaml复制# op_common_params.yaml
rollouts_number: 10 # 候选路径数量
plan_distance: 20.0 # 规划视野距离(m)
path_density: 0.5 # 路径点间隔(m)
max_velocity: 2.0 # 最大速度(m/s)
avoidance_limit: 1.5 # 最小停车距离(m)
避障效果优化技巧:
rollouts_number可提高复杂场景通过率,但会增加计算负载path_density过小会导致控制抖动,建议保持在0.3-1.0范围内lidar_kf_contour_track节点的tracking_time参数原始描述中提到的参数修改失效问题,其根本原因是:
正确操作流程:
op_common_params并保存bash复制roslaunch op_common_params.launch
roslaunch op_trajectory_generator.launch
roslaunch lidar_kf_contour_track.launch
Autoware默认输出的/twist_cmd可能需要转换为底盘特定的控制协议。以下是通用转换节点示例:
cpp复制// twist_converter.cpp
#include <ros/ros.h>
#include <geometry_msgs/TwistStamped.h>
#include <custom_msgs/ChassisCmd.h>
ros::Publisher chassis_pub;
void twistCallback(const geometry_msgs::TwistStamped::ConstPtr& msg) {
custom_msgs::ChassisCmd cmd;
cmd.header.stamp = ros::Time::now();
cmd.speed = msg->twist.linear.x;
cmd.steering = atan2(msg->twist.angular.z * wheelbase, msg->twist.linear.x);
chassis_pub.publish(cmd);
}
int main(int argc, char** argv) {
ros::init(argc, argv, "twist_converter");
ros::NodeHandle nh;
chassis_pub = nh.advertise<custom_msgs::ChassisCmd>("/chassis_cmd", 10);
ros::Subscriber sub = nh.subscribe("/twist_cmd", 10, twistCallback);
ros::spin();
return 0;
}
实际部署中发现的控制指令延迟问题,可通过以下方式缓解:
header.stamp = ros::Time::now()pure_pursuit中调整lookahead_distance参数twist_filter的lpf_*系列参数平滑控制指令建立系统化的调试流程可显著提高效率:
分阶段验证:
可视化监控矩阵:
| 监控项 | 工具 | 正常指标 |
|---|---|---|
| 定位精度 | Rviz | 误差<0.3m |
| 规划延迟 | rqt_plot | <200ms |
| 控制频率 | rostopic hz | >20Hz |
path_density在实车测试中,我们发现最耗时的往往不是算法本身的问题,而是系统集成时的参数同步和时序控制。建议建立参数版本管理系统,记录每次修改的效果。