4、常见启动故障:launch文件解析错误、依赖包缺失、环境变量未设置、配置文件路径错误
说实话,Autoware 启动不起来,十次里有八次是这四类问题。我刚开始带团队时,新人一跑不起来就喊「系统坏了」,结果我过去一看——嗯,不是少个依赖,就是路径写错了。今天咱们把这四个「老熟人」彻底聊透。
4.1 launch 文件解析错误
launch 文件是 Autoware 的「启动剧本」。剧本写错了,戏当然唱不下去。
最常见的错误有:
- XML 标签不闭合:比如
<node>写了开头忘了结尾</node> - 属性值没加引号:
name=my_node必须写成name="my_node" - 引用了不存在的参数:比如
arg name="use_sim_time"但后面根本没定义
典型报错信息:
[ERROR] [launch]: Caught exception in launch:
XML syntax error: mismatched tag at line 42
看到这个,直接去第 42 行附近找标签问题。
我个人习惯是,写完 launch 文件先用 xmllint 检查一遍:
xmllint --noout your_launch_file.launch
如果输出是空白,说明语法没问题。如果报错,它会直接告诉你哪一行有问题。
小技巧: 我常用 VS Code 的 XML 插件,写 launch 文件时自动高亮和补全,基本不会出现标签不闭合这种低级错误。
4.2 依赖包缺失
Autoware 是个「巨无霸」项目,依赖的包少说有上百个。你少装一个,它就可能罢工。
怎么判断是依赖缺失?
看报错信息里有没有 Could not find package 或 No package found。比如:
[ERROR] [launch]: Package 'velodyne_driver' not found
这就说明你没装 velodyne 驱动包。
解决办法:
- 用
rosdep自动安装:rosdep install --from-paths src --ignore-src -r -y - 或者手动安装:
sudo apt install ros-<distro>-velodyne-driver
注意: 不同 Autoware 版本依赖的包名可能不一样。比如 Autoware.AI 和 Autoware.Universe 的依赖包名就完全不同。我曾经帮一个学员排查了整整一下午,最后发现他装的是旧版本的依赖包。
我建议你在编译前先跑一遍 rosdep check,它会列出所有缺失的包。别等到启动时才发现,那太浪费时间了。
4.3 环境变量未设置
环境变量就像 Autoware 的「导航地图」。没设置好,它根本找不到自己的家。
关键的环境变量:
| 变量名 | 作用 | 常见错误 |
|---|---|---|
ROS_DISTRO |
指定 ROS 版本 | 没设置或设置错误 |
ROS_PACKAGE_PATH |
告诉 ROS 去哪里找包 | 路径不包含 Autoware 的 workspace |
LD_LIBRARY_PATH |
动态库搜索路径 | 缺少 CUDA 或 TensorRT 的库路径 |
AUTOWARE_ROOT |
Autoware 安装根目录 | 指向了错误的目录 |
怎么检查?
echo $ROS_DISTRO
echo $ROS_PACKAGE_PATH
echo $AUTOWARE_ROOT
如果输出是空的,说明没设置。你需要 source 一下 setup 文件:
source /opt/ros/noetic/setup.bash
source ~/autoware.ai/install/setup.bash
避坑指南: 我曾经在调试时发现,每次新开终端都要重新 source,太烦了。后来我把这些 source 命令写进了 ~/.bashrc,一劳永逸。但要注意顺序——先 source ROS 的,再 source Autoware 的。
4.4 配置文件路径错误
Autoware 启动时需要加载一堆配置文件:点云地图、参数文件、传感器校准文件……路径错了,它就找不到。
典型场景:
- launch 文件里写死了绝对路径,比如
/home/user/map.pcd,但换了一台机器路径就变了 - 用了相对路径,但当前工作目录不对
- 文件名大小写写错了(Linux 是区分大小写的!)
怎么排查?
看报错信息里有没有 file not found 或 cannot open file。比如:
[ERROR] [map_loader]: Failed to load map file: /home/user/map.pcd
No such file or directory
这就说明路径有问题。去检查 launch 文件里对应的路径参数。
我的做法: 我习惯把所有配置文件放在一个固定的目录下,比如 ~/autoware_data/,然后在 launch 文件里用 $(find pkg_name)/config/ 这种相对路径。这样不管项目移到哪里,只要目录结构不变,就不会出问题。
另外,我建议你在 launch 文件里加上 pkg="your_package" 和 type="your_node",这样 ROS 会自动去包目录下找文件,不用写绝对路径。
知识体系总览
下面这张图总结了启动故障的四大类及其排查思路:
这四类问题,说白了就是 Autoware 启动时最常见的「拦路虎」。你只要记住:报错信息是最好的老师。别慌,一行一行看报错,它基本会告诉你问题出在哪。
我个人经验是,80% 的启动故障都能在 5 分钟内解决。剩下的 20%,嗯,那就要靠 Google 和社区了。不过别担心,后面几章我会带你深入每个模块的常见故障,到时候你就能自己搞定大部分问题了。