3. 框架架构

本文描述 libautonomy 应用框架的逻辑分层、启动顺序与数据流。

3.1 设计目标

  1. 统一入口system::Autonomy 构造并调度各 Server

  2. 配置集中:单一 autonomy.lua 聚合子系统

  3. 松耦合通信:Server 间通过接口 + commsgs 交互,跨进程经 Autolink

  4. 插件扩展:算法实现与 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 线程模型

组件

线程策略

Autonomy 主循环

单线程 sleep 轮询(main.cpp)

MapServer

地图加载线程(若启用)

Costmap 更新

独立更新线程 + mutex

Autolink 回调

调度器协程 / 线程池

BT tick

单线程 tickOnce 循环

3.7 相关文档