# 9. 启动 Launch **mainboard** 在单进程内加载 DAG、拉起 Component;**autolink_launch** 解析 `.launch`、编排多进程。对标 `ros2 launch` + `mainboard`。 | 本文 §9 | 相关文档 | |---------|----------| | Component 部署 | [§0 指南](00_guide.md) · [§10 组件 Component](10_component.md) · [§7 插件 Plugin](07_plugin.md) · [§1.6 环境变量](01_architecture.md#16-环境与路径变量) | Binary 模式(`talker` / `listener`)不经 mainboard;生产部署用 Component + DAG + Launch。 --- ## 9.1 LoadAll 流程 `mainboard` 启动后由 `ModuleController::LoadAll()` 依次加载插件、解析 DAG、实例化 Component;多进程场景下 `autolink_launch` 为每个 `` fork/exec 独立 `mainboard`。
启动 入口 → mainboard → LoadAll → 运行 编排层(autolink_launch)与加载层(mainboard / LoadAll)分离;Binary talker 不经此路径
多进程编排 autolink_launch · .launch
解析 module fork / exec mainboard
单进程直启 mainboard -d
指定 DAG 可选 --plugin=
mainboard 进程
LoadAll module_controller.cpp
LoadPlugin
解析 DAG AUTOLINK_DAG_PATH
ClassLoader AUTOLINK_LIB_PATH
Init · Proc Component / Timer
要点说明
入口多 module 用 .launch;单 DAG 可直接 mainboard -d
LoadAll插件 → DAG → 加载 .soInitialize → 调度 Proc
环境变量AUTOLINK_DAG_PATH · AUTOLINK_LIB_PATH · AUTOLINK_PLUGIN_* · AUTOLINK_SCHED_CONF
与 Binarytalker / listenermain(),不经 mainboard(见 [§9.6](#96-binary-模式))
--- ## 9.2 DAG 配置 `.dag` 声明 `module_library`、Component `class_name` 及输入 channel(或 TimerComponent `interval`)。 `common.dag`(`common_component_example`): ```text module_config { module_library : "autolink/examples/common_component_example/libcommon_component_example.so" components { class_name : "CommonComponentSample" config { name : "common" readers { channel: "/autolink/prediction" } readers { channel: "/autolink/test" } } } } ``` `timer.dag`(`timer_component_example`): ```text module_config { module_library : "autolink/examples/timer_component_example/libtimer_component_example.so" timer_components { class_name : "TimerComponentSample" config { name : "timer" interval : 10 } } } ``` | 字段 | 含义 | |------|------| | `module_library` | Component 动态库(`AUTOLINK_LIB_PATH`) | | `class_name` | 与 `AUTOLINK_REGISTER_COMPONENT` 注册名一致 | | `config.name` | Component 实例名 → 内部 Node 名 | | `readers[].channel` | 输入 channel(多路触发 `Proc`) | | `interval` | TimerComponent 周期(ms) | --- ## 9.3 autolink_launch `.launch` 为 XML,每个 `` 指定 DAG 与进程名;`autolink_launch` 解析后为各 module 启动 `mainboard`。 `common.launch`: ```xml common /autolink/examples/common_component_example/common.dag common ``` `timer.launch` 结构相同,指向 `timer.dag`。 **启动**: ```bash export AUTOLINK_PATH= mainboard -d autolink/examples/cpp/common_component_example/common.dag # 或 autolink_launch autolink/examples/cpp/common_component_example/common.launch ``` 多 module 的 `.launch` 可在一个文件中声明多个 ``,由 `autolink_launch` 分别起进程。 **mainboard 常用参数**: ```bash mainboard -d foo.dag mainboard -d foo.dag --plugin=/path/to/plugins.xml mainboard -h # 查看 --plugin、DAG 列表等 ``` --- ## 9.4 部署路径 环境变量总表见 [§1.6](01_architecture.md#16-环境与路径变量)。Launch / DAG 常用: | 变量 | 用途 | |------|------| | `AUTOLINK_DAG_PATH` | `.dag` 文件 | | `AUTOLINK_LIB_PATH` | `module_library` `.so` | | `AUTOLINK_LAUNCH_PATH` | `.launch` 文件 | | `AUTOLINK_SCHED_CONF` | 调度配置([§12](12_scheduler.md)) | DAG / Launch 中路径多为 **安装后绝对路径**(如 `/autolink/examples/...`)。开发时需 `cmake --install` 或将构建产物路径写入 DAG。 --- ## 9.5 编译与运行 ```bash cmake -S autolink -B build/autolink -DAUTOLINK_BUILD_EXAMPLES=ON cmake --build build/autolink -j8 export AUTOLINK_PATH=build/autolink # 或安装前缀 export AUTOLINK_LIB_PATH=build/autolink/lib/autolink/examples/... # 需有 talker 向 /autolink/prediction、/autolink/test 发数据,Proc 才会触发 mainboard -d build/autolink/share/autolink/examples/common_component_example/common.dag ``` Timer 示例可独立运行(无输入 channel): ```bash mainboard -d .../timer.dag # 日志:timer_component_example: Write drivermsg ``` --- ## 9.6 Binary 模式 | | Binary (`talker`) | mainboard + DAG | |---|-------------------|-----------------| | 入口 | `main()` | `Component::Init/Proc` | | channel 配置 | 硬编码 | DAG 可改无需重编译 | | 进程模型 | 单 executable | `.so` 动态加载 | | 适用 | 学习、工具 | 车载 / 多模块部署 | --- **导航**:[← §8 日志 Log](08_log.md) · [§0 指南](00_guide.md) · [§10 组件 Component →](10_component.md)