1. 轨迹规划服务器核心架构解析
traj_server_ros.cpp是MINCO轨迹规划器的ROS服务端实现,作为自动驾驶系统中连接决策层与控制层的核心组件。该服务器采用多线程设计,在20Hz的工作频率下稳定运行,主要处理以下核心事务:
- 实时接收并处理语义地图更新
- 执行MINCO轨迹优化算法
- 发布车辆控制指令
- 可视化规划结果
- 支持多种运行模式切换
关键设计特点:采用无锁队列(moodycamel::ReaderWriterQueue)处理地图更新,避免线程阻塞;通过std::function动态绑定规划函数,实现模式切换零开销。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心类结构与成员解析
2.1 TrajPlannerServer类定义
cpp复制class TrajPlannerServer {
private:
// 核心成员变量
moodycamel::ReaderWriterQueue<SemanticMapManager>* p_input_smm_buff_;
TrajVisualizer* p_traj_vis_;
plan_manage::TrajPlanner* p_planner_;
// 线程控制相关
std::atomic<bool> is_replan_on_{false};
double work_rate_;
// 轨迹管理
std::unique_ptr<TrajectoryBundle> executing_traj_;
std::unique_ptr<TrajectoryBundle> next_traj_;
// ROS接口
ros::Publisher ctrl_signal_pub_;
ros::Subscriber parking_sub_;
};
2.2 关键成员功能说明
| 成员变量 | 类型 | 功能描述 |
|---|---|---|
p_input_smm_buff_ |
无锁队列 | 缓存语义地图更新,支持多线程安全访问 |
executing_traj_ |
轨迹包指针 | 当前执行中的轨迹,包含多个轨迹段 |
next_traj_ |
轨迹包指针 | 新规划的轨迹,用于平滑切换 |
work_rate_ |
double | 规划线程工作频率(默认20Hz) |
ctrl_signal_pub_ |
ROS Publisher | 发布控制指令到车辆接口 |
3. 核心工作流程剖析
3.1 初始化流程
- 构造函数:配置工作频率(20Hz),初始化无锁队列(默认大小128)
- Init():加载MINCO参数文件,创建ROS发布器
cpp复制p_planner_->Init(config_path); // 加载minco_config.pb.txt ctrl_signal_pub_ = nh_.advertise<vehicle_msgs::ControlSignal>("ctrl", 20); - **S
