ego_planner算法的仿真环境(主要是ros)-算法的解耦实现.

本系列内容主要是深入分析ego_planner算法的实现,并且将核心的算法部分转化为非ros依赖的形式(Cmake项目),实现上我们主要通过共享内存与ros的仿真环境进行数据交换.

项目链接:https://github.com/chan-yuu/ego_planner_standalone.git

如果觉得有用的话不要忘了star哦.

text 复制代码
├── application # gui界面,用于快速启动程序
│   └── ego_planner_gui.py
├── docs
│   ├── 1.0
│   ├── png
│   └── scripts
├── ego-planner # ros环境部分,包括感知信息
│   ├── modified_realsense2_camera.zip
│   └── src
├── planner_standalone # 独立的算法模块.
│   ├── build # 编译到build中的可执行文件.
│   ├── CMakeLists.txt
│   ├── include
│   └── src
└── README.md

ego_planner_standalone

本项目将原始的ROS EGO-Planner分离为两部分:

  1. ROS Bridge (ego-planner/src/ros_bridge): 处理ROS消息和共享内存通信
  2. Planner Standalone (planner_standalone): 无ROS依赖的纯C++规划算法

当前架构

数据流

复制代码
仿真环境 (simulator)
    ↓
ROS话题订阅
    ↓
ROS Bridge Node
    ↓
共享内存 (Shared Memory)
    ↓
Planner Standalone (FSM + 算法)
    ↓
共享内存 (Shared Memory)
    ↓
ROS Bridge Node
    ↓
ROS话题发布 → Traj Server → 控制器

输入数据(从仿真环境)

  1. 定位数据 (/visual_slam/odom)

    • 位置、速度、姿态
    • 频率: ~100Hz
  2. 点云数据 (/grid_map/occupancy_inflate)

    • 已膨胀的障碍物点云
    • 频率: ~10Hz
    • 注意: 仿真已完成膨胀,算法端不需要再处理
  3. 目标航点 (/waypoint_generator/waypoints)

    • 目标位置
    • 事件驱动(用户在RViz中点击)

输出数据(给控制器)

  1. B样条轨迹 (/planning/bspline)

    • 控制点
    • 节点向量 (knots)
    • 轨迹ID
    • 发布给 traj_server
  2. 轨迹可视化 (/planning/bspline_path)

    • Path消息格式
    • 用于RViz显示
  3. 规划器状态 (/planning/planner_state)

    • FSM状态 (INIT, WAIT_TARGET, GEN_NEW_TRAJ, etc.)

算法流程

整个规划器的运行逻辑由 main.cpp 驱动,通过 EGOPlannerManager 协调各个模块。
核心规划层 基础设施层 后端优化循环 1.读取状态/环境 是 2.提供障碍物距离 路径点 平滑/碰撞/可行性 未收敛 收敛 3.写入轨迹 否 GridMap: 地图更新 需要重规划? DynAStar: 前端路径搜索 B-Spline: 轨迹初始化 计算代价 & 梯度 开始优化 L-BFGS: 迭代更新控制点 时间重新分配 main.cpp: 主循环 IOInterface: 共享内存读写 程序启动 PolynomialTrajectory: 生成轨迹

使用方法

bash 复制代码
pip install pyside6
bash 复制代码
python application/ego_planner_gui.py

到build界面中,编译两个部分:

编译完成后,就可以直接启动了,其中前面两个大的是总的启动按钮,可以运行四个start

或者按照顺序启动下面的四个start即可.

对应的命令是:

bash 复制代码
cd ego-planner;source devel/setup.bash && roslaunch ego_planner_bridge sim_only.launch

cd ego-planner;source devel/setup.bash && roslaunch grid_map_standalone test_grid_map.launch

cd ego-planner;source devel/setup.bash && roslaunch ego_planner_bridge run_bridge.launch

cd planner_standalone/build;./ego_planner_standalone
相关推荐
白狐_7985 分钟前
408 数据结构算法题 01:线性表暴力求解保分指南
java·数据结构·算法
乐观勇敢坚强的老彭18 分钟前
C++信奥:开关门、开关灯问题
开发语言·c++·算法
冻柠檬飞冰走茶18 分钟前
PTA基础编程题目集 7-31 字符串循环左移(C语言实现)
c语言·开发语言·数据结构·算法
Hi李耶31 分钟前
【LeetCode】4-寻找两个正序数组的中位数
算法·leetcode·职场和发展
图灵机z43 分钟前
【算法提高课】AcWing 1027. 方格取数 长期攻克提高课-day3(3/219)
算法
hans汉斯1 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频
一次旅行2 小时前
AutoAWQ完整实战:MIT激活感知AWQ量化,模型显存减半、推理提速且精度无损
人工智能·python·算法
GrowthDiary0072 小时前
算法题:寻找二维数组top k问题
数据结构·python·算法
可编程芯片开发2 小时前
基于全阶观测器的三自由度运动系统状态反馈控制simulink建模与仿真
算法
kobesdu2 小时前
从零推导FAST-LIO的观测雅可比矩阵
人工智能·算法·矩阵