我们可以先看项目的组成
一、核心文件位置框架
src/planner/
│
├── plan_manage/src/
│ ├── planner_manager.cpp ← 【总调度】调用前端和后端
│ └── ego_replan_fsm.cpp ← 状态机,决定什么时候重规划
│
├── path_searching/src/
│ └── dyn_a_star.cpp ← 【前端】A* 搜索算法
│
└── bspline_opt/src/
├── bspline_optimizer.cpp ← 【后端】轨迹优化
└── uniform_bspline.cpp ← B-spline 曲线表示
接着我们从启动脚本single_run_in_sim.launch开是往各个核心算法代码开始发散学习:
二、single_run_in_sim脚本调用
主要调用部分:
1.map_generator_node
2.mockamap_node
3.advanced_param_include
4.traj_server_node
5.simulator_include
解析以上:
1. 地图部分:
map_generator_node 和 mockamap_node 都是地图部分 single_run_in_sim脚本中二选一开启 如果你要测试无人机穿越森林场景 用 map_generator_node;如果要测试复杂室内/迷宫环境 用 mockamap_node
2.advanced_param_include(轨迹规划的核心):
include启动了advanced_param.launch.py
3.traj_server_node:
我们看看调用源代码:
cpp
traj_server_node = Node(
package='ego_planner', # 所属功能包
executable='traj_server', # 可执行文件名
name=['drone_', drone_id, '_traj_server'], # 节点名,如 drone_0_traj_server
output='screen', # 日志输出到终端
remappings=[ # 话题重映射
('position_cmd', ['drone_', drone_id, '_planning/pos_cmd']),
# 原话题 position_cmd → drone_0_planning/pos_cmd
('planning/bspline', ['drone_', drone_id, '_planning/bspline'])
# 原话题 planning/bspline → drone_0_planning/bspline
],
parameters=[ # 参数设置
{'traj_server/time_forward': 1.0} # 轨迹前向预测时间 1秒
]
)
包名: ego_planner**(但是文件夹名为plan_manage,具体名称由package.xml决定)**
可执行文件名称: traj_server (作为 轨迹服务 并非轨迹规划)
**节点名称:**drone_0_traj_server