SuperAPI AI 工具集

robot-bringup

部署与运维

查看项目

更新于 10-15 12:23

技能介绍

用途

robot-bringup 技能用于在机器人的板载计算机上启动一套完整的 ROS2 系统,覆盖从开机自启到生产监控的全过程。它面向需要让机器人整机 ROS2 软件栈随系统启动、并具备可靠运行保障的工程场景。

主要能力

该技能覆盖以下方面:

  • 通过 systemd 配置机器人开机自动启动完整 ROS2 软件栈。
  • 编写 systemd unit 文件,正确加载 ROS2 工作空间并设置 DDS 环境。
  • 将分层 launch 文件(硬件、驱动、感知、应用)组合为单一的 bringup。
  • 通过健康检查实现有序启动,避免相互依赖节点之间的竞态条件。
  • 为相机、激光雷达和串口设备编写 udev 规则,实现确定性的设备命名。
  • 配置 CycloneDDS 或 FastDDS,实现机器人与基站之间的多机 ROS2 发现。
  • 为生产机器人系统实现看门狗与心跳监控。
  • 为长时间运行的机器人部署设置日志轮转与结构化日志。
  • 编写优雅关闭处理器,在退出前让执行器进入安全状态。
  • 调试启动时故障、服务顺序问题或设备枚举竞态。

启动栈分层结构

生产级机器人 bringup 遵循从硬件初始化到应用层节点的分层启动顺序,每一层依赖其下一层:

  • 应用层:导航、操作、任务规划、人机交互(HRI)
  • 感知层:目标检测、SLAM、点云滤波、传感器融合
  • 驱动层:相机驱动、激光雷达驱动、电机控制器、IMU
  • 硬件层:udev 规则、设备枚举、USB 复位、固件检查
  • ROS2 环境:加载工作空间、设置 RMW、ROS_DOMAIN_ID、DDS 配置
  • systemd 目标与服务:network-online.target → robot-hw.target → robot-bringup.target
  • Linux 启动(systemd):BIOS/UEFI → GRUB → kernel → systemd init
  • 硬件启动:电源、板载计算机、外设

使用方式

systemd 服务单元

服务文件放置在 /etc/systemd/system/ 目录下。基础模板以长运行服务方式启动 ROS2 launch 文件,并支持看门狗。示例 unit 文件包含 [Unit]、[Service]、[Install] 三段,关键配置包括:

  • After/Wants/Requires 指定依赖的 target。
  • Type=notify、User/Group、WorkingDirectory。
  • EnvironmentFile=/etc/robot/ros2.env 加载环境变量。
  • ExecStartPre 执行设备检查脚本。
  • ExecStart 通过 bash 先 source ROS2 与工作空间,再 exec ros2 launch。
  • ExecStop 发送 SIGINT 实现优雅关闭,TimeoutStopSec 设置超时。
  • Restart=on-failure、RestartSec 控制重启。
  • WatchdogSec 要求服务在间隔内调用 sd_notify(WATCHDOG=1)。
  • KillMode/KillSignal/FinalKillSignal/TimeoutStartSec 管理进程。
  • StandardOutput/StandardError/SyslogIdentifier 控制日志。

环境变量设置

环境变量存放在专用文件中,而不是 source .bashrc(systemd 不会加载它)。示例 /etc/robot/ros2.env 包含:ROS_DISTRO、RMW_IMPLEMENTATION、ROS_DOMAIN_ID、CYCLONEDDS_URI、ROS_LOCALHOST_ONLY、ROS_LOG_DIR、RCUTILS_LOGGING_USE_STDOUT、RCUTILS_COLORIZED_OUTPUT、ROBOT_NAME、ROBOT_CONFIG_DIR。

服务间依赖

可将机器人栈拆分为多个 systemd 服务并显式排序,从而支持各层独立重启和更清晰的故障隔离。示例包括 robot-drivers.service、robot-perception.service、robot-application.service,通过 After/Requires/PartOf 建立依赖,并统一 WantedBy=robot-bringup.target。

重启策略与故障恢复

通过 StartLimitIntervalSec 与 StartLimitBurst 配置速率限制,防止服务根本性损坏时陷入重启循环;可通过 OnFailure 触发告警服务。

资源限制与 cgroups

可约束资源使用,防止失控节点耗尽系统资源,配置项包括 MemoryMax、MemoryHigh、CPUQuota、Nice、IOSchedulingClass、IOSchedulingPriority、ProtectHome、ProtectSystem、ReadWritePaths、PrivateTmp。

Launch 文件组合与分层

Launch 文件按层组织,与 systemd 服务架构对应,每层可独立测试:

  • bringup.launch.py(顶层,组合所有层)
  • hardware.launch.py(udev 检查、设备就绪)
  • drivers.launch.py(相机、激光雷达、IMU、电机驱动)
  • perception.launch.py(SLAM、检测、融合)
  • application.launch.py(导航、规划、HRI)

各层示例代码展示了使用 LaunchConfiguration、ExecuteProcess、TimerAction、Node、ComposableNodeContainer、ComposableNode、IncludeLaunchDescription 等构建 launch 描述的方式,包括硬件检查、驱动节点参数与重映射、感知容器与 SLAM 节点、以及包含 Nav2 bringup 的应用层。

适用场景

  • 需要机器人开机自动启动完整 ROS2 软件栈的部署。
  • 需要分层启动、有序启动与健康检查以避免竞态的多节点系统。
  • 需要确定性设备命名、多机 DDS 发现、看门狗监控与日志管理的生产机器人。
  • 需要优雅关闭以保证执行器安全的场景。
  • 需要调试启动故障、服务顺序或设备枚举问题的场景。

限制

资料中未提供该技能的具体安装命令、支持的 ROS2 发行版范围、依赖版本要求、收费或价格信息、性能指标与效果数据。上述内容暂未提供。