3. 框架架构
本文描述 libautonomy 应用框架的逻辑分层、启动顺序与数据流。
3.1 设计目标
统一入口:
system::Autonomy构造并调度各 Server配置集中:单一
autonomy.lua聚合子系统松耦合通信:Server 间通过接口 + commsgs 交互,跨进程经 Autolink
插件扩展:算法实现与 Server 调度分离
3.2 分层架构
API 层
system::Autonomy
NavigateToPose · ReplanToGoal · 监听器
持有与调度
Server 层
Map · Planner · Controller · Transform
插件接口
插件层
GlobalPlanner · Controller · BT Nodes
commsgs + autolink
基础层
commsgs · autolink · common
3.3 启动顺序(Autonomy::Start)
sequenceDiagram
participant A as Autonomy
participant M as MapServer
participant P as PlannerServer
participant C as ControllerServer
participant T as TransformServer
participant S as SensorCollator
A->>M: 构造 + Start
A->>P: 构造 PlannerServer
A->>C: 构造 + Start
A->>C: SetSharedCostmap(planner costmap)
A->>A: tf_buffer Init
A->>T: 加载静态 TF
A->>M: SetMapPublishCallback → costmap
A->>S: 构造 SensorCollator
Configure() 在 Start() 之后调用,加载 navigator_options 并设置 use_bt_navigation 等运行时覆盖。
3.4 导航数据流
NavigateToPose(goal)
→ [BT] ComputePathToPose → PlannerServer::GetPlan
→ [BT] FollowPath → ControllerServer
→ cmd_vel → 底盘 / 仿真
直驱模式:
→ GetPlan → NotifyPath(不自动 FollowPath)
3.5 线程模型
组件 |
线程策略 |
|---|---|
|
单线程 sleep 轮询(main.cpp) |
MapServer |
地图加载线程(若启用) |
Costmap 更新 |
独立更新线程 + mutex |
Autolink 回调 |
调度器协程 / 线程池 |
BT tick |
单线程 |
3.6 与 Autolink 的边界
Framework:决定创建哪些 Server、如何传
*OptionsServer 内部:创建
autolink::Node,注册 Writer/Reader/Action应用开发者:通常调用
AutonomyAPI,而非直接操作 Node