28. 开机启动与进程管理¶
28.1 学习目标¶
把已经手动验收通过的命令变成可观察、可停止、可恢复的自启动服务。开机启动不是调试手段;手动运行不稳定的功能不能靠自启动修好。
28.2 适用范围¶
Jetson、树莓派、RDK 和部分 Docker 镜像。不同部署环境可能使用桌面启动项、脚本或容器命令,本章给出选择原则。
自启动服务是操作系统在开机或满足指定条件后自动运行的后台程序。Ubuntu 常用的 systemd 负责启动、停止、重启服务并保存运行状态;桌面启动项则要等用户进入图形桌面后才会执行。两者的运行时机和环境不同。
28.3 操作前检查¶
- 命令在新终端手动运行可重复成功。
- 使用绝对工作空间路径和明确的 ROS 发行版。
- 记录停止命令、日志位置和禁用入口。
28.4 工作原理¶
桌面启动项依赖图形登录,systemd 适合无屏后台服务,Docker 自启动还要管理容器生命周期。.bashrc 是 Bash 命令解释器为交互式终端读取的用户配置文件,后台服务通常不会按相同方式加载它。因此,启动脚本要显式加载 ROS 和工作空间环境。
28.5 操作步骤¶
先写一个可单独执行的启动脚本:
#!/usr/bin/env bash
set -euo pipefail
source /opt/ros/<发行版>/setup.bash
source /home/wheeltec/<工作空间>/install/setup.bash
exec ros2 launch <包名> <launch文件>
脚本使用绝对路径并可在终端直接运行。随后按平台选择:
- 无屏长期服务:systemd。
- 必须依赖桌面会话:桌面自启动项。
- Docker 部署:使用项目提供的容器 start/stop/restart 入口,确认挂载和设备传入。
每次启用后重启一次,检查进程、节点和日志。还要演练禁用:服务停止后底盘不能继续接收旧命令。
28.6 验收标准¶
- 重启后服务只启动一次。
- ROS 节点、参数和工作空间路径与手动模式一致。
- 日志可查,失败不会无限弹终端或重启风暴。
- 有一条已验证的停止和禁用路径。
- 网络未就绪时,服务能等待或清晰失败。
28.7 故障排查¶
| 现象 | 处理 |
|---|---|
| 开机找不到包 | 脚本未 source 或使用相对路径 |
| 启动两份节点 | 桌面项、systemd 和容器重复配置 |
| 图形程序无窗口 | 后台服务没有图形会话或 DISPLAY |
| 容器重启但设备缺失 | 检查设备映射、权限和挂载 |
| 网络服务先于 Wi-Fi 启动 | 增加网络依赖或应用层重连 |