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 启动故障排查体系 启动失败 launch文件解析错误 依赖包缺失 环境变量未设置 配置文件路径错误 XML标签不闭合 属性值缺引号 引用未定义参数 rosdep未安装 版本不匹配 手动安装遗漏 ROS_DISTRO未设 PKG_PATH缺失 LD_LIBRARY_PATH错 绝对路径写死 相对路径不对 文件名大小写 排查口诀:先看报错信息 → 定位问题类型 → 对症下药

这四类问题,说白了就是 Autoware 启动时最常见的「拦路虎」。你只要记住:报错信息是最好的老师。别慌,一行一行看报错,它基本会告诉你问题出在哪。

我个人经验是,80% 的启动故障都能在 5 分钟内解决。剩下的 20%,嗯,那就要靠 Google 和社区了。不过别担心,后面几章我会带你深入每个模块的常见故障,到时候你就能自己搞定大部分问题了。