拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Ubuntu 18.04下Autoware 1.x安装与相机激光雷达联合标定实战

Ubuntu 18.04下Autoware 1.x安装与相机激光雷达联合标定实战

第一次打开Autoware的官方文档时,我整个人是懵的。这个开源自动驾驶项目把感知、定位、规划、控制一整套东西都塞了进来,光是GitHub仓库就好几十个,文档东一块西一块,新手很容易迷失方向。后来我才慢慢理出一条清晰的入门路径:先在Ubuntu 18.04上把Autoware 1.x装起来,跑通官方demo,再去做相机和激光雷达的联合标定。这篇文章就是按这条路径来的,把我实际装环境和标定时踩过的坑、用到的命令、调整过的参数都记录下来,适合刚接触Autoware的学生、工程师,以及准备给自己的小车加感知能力的朋友。

1. 版本与路线:Ubuntu 18.04上该装哪个Autoware

1.1 Autoware不是单个包,而是一整套自动驾驶软件栈

很多第一次接触Autoware的人会把它当成一个普通的ROS功能包,其实完全不是。Autoware是整套自动驾驶软件栈,从底层的传感器驱动接入,到高精度地图加载、定位、感知、路径规划、车辆控制,每一环都有对应模块。以Autoware 1.x为例,它被拆成了几十个ROS package,分布在autoware.ai这个仓库和一堆子仓库里,编译之前必须把这些子仓库一起拉下来,否则连基本消息类型都是缺失的。

官方把Autoware的入门路径设计成“仿真先行”:先下载官方提供的数据包和点云地图,在rviz里跑通一次定位和感知,让你对“车辆如何通过点云匹配来定位当前位置”有直观感受。之后再进入传感器标定环节,因为真实车辆上相机和激光雷达的安装位置不同,数据坐标系不同,不标定的话,相机图像和激光点云就是两组对不上的数据,后续所有融合算法都无从谈起。

1.2 为什么Ubuntu 18.04主流搭配Autoware 1.x

Autoware有两条主要产品线:Autoware AI(也就是大家常说的Autoware 1.x,基于ROS1)和Autoware Universe(基于ROS2)。Ubuntu 18.04对应的ROS版本是Melodic,而Autoware 1.x的官方Release正好针对Melodic做了完整适配,比如1.14、1.15版本都支持在Ubuntu 18.04上稳定运行。

很多教程和竞赛平台也都基于这个组合来做,网络上能搜到的资料、踩坑记录,大部分集中在Ubuntu 18.04和Autoware 1.x上。相比之下,Autoware Universe更偏向ROS2,适合Ubuntu 20.04/22.04环境,它虽然更新,但生态和文档还没有完全跟上。如果你想先用起来、跑起来,我建议老老实实选择Ubuntu 18.04 + ROS Melodic + Autoware 1.15这一组合。

1.3 官方入门一般让你先跑哪些东西

Autoware官方文档里有一个Quick Start页面,核心操作就三步:下载示例数据包、启动Autoware的Runtime Manager、在rviz中查看点云定位和感知结果。这个流程只需要一台能跑Ubuntu的电脑,不需要真实车辆,也不需要传感器驱动,是最小的可运行闭环。

跑通Demo之后,官方教程会引导你去做传感器标定,尤其是相机与激光雷达的联合标定。这个环节在真实项目里非常重要,因为融合感知的前提就是外参准确。官方也提供了专门的标定工具autoware_camera_lidar_calibrator,配合棋盘格标定板就能算出相机与雷达之间的旋转矩阵和平移向量。所以我的建议是:先花半天把环境装好,再花半天跑通Demo,最后专门留出时间做联合标定,标定值得慢慢磨。

2. 实操记录:在Ubuntu 18.04上完整安装Autoware

2.1 先把ROS Melodic装干净

安装Autoware之前,第一步一定是装好ROS Melodic。我见过不少人跳过这步直接编译Autoware,结果报错报得稀里糊涂,最后发现是ROS基础环境都没配好。这里我建议直接用桌面完整版,因为后续要用到rviz、tf等大量可视化组件:

sudo apt update sudo apt install ros-melodic-desktop-full sudo rosdep init rosdep update echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc

rosdep init和rosdep update这一步偶尔会因为网络问题失败,如果遇到,先检查网络是不是能正常访问GitHub、raw.githubusercontent.com这些地方,网络通畅后再多试几次。rosdep的作用是解析ROS包里声明的依赖关系,后面编译Autoware时还要用到它,所以这一步不要跳过。

2.2 源码编译Autoware 1.x的完整流程

源码编译是最推荐的安装方式,因为官方维护的安装脚本同样也是走编译这一条路,而且你在源码基础上改代码、加调试都要方便得多。第一步是从GitHub拉取主仓库,然后用vcs工具把子仓库一次性拉下来:

git clone https://github.com/Autoware-AI/autoware.ai.git cd autoware.ai sudo apt install python3-vcstool vcs import src < autoware.ai.repos

这一步特别容易被忽略。Autoware不是一个单体仓库,主仓库只是壳,真正的代码分散在几十个Git子仓库里。不执行vcs import的话,后面catkin_make必然报错,而且是一堆package找不到的连环报错。导入完子模块之后,接着用rosdep安装所有依赖:

rosdep install -y --from-paths src --ignore-src --rosdistro melodic

rosdep install会自动解析src目录下所有包的依赖关系,比起手动一个个apt install靠谱太多。如果这条命令中途报某个依赖装不上,通常是网络源问题,把系统源、ROS源调整到可用状态后再重试。依赖装完后开始编译:

cd ros catkin_make

这里有一个深刻教训:Autoware编译量很大,动辄占用大量内存,如果机器内存只有8GB,直接catkin_make很容易编译到一半进程被杀。我后来学乖了,要么先加swap分区,要么在catkin_make后面限制并行任务数:

catkin_make -j2

虽然慢一些,但至少不会中途崩掉。编译完成后,记得source一下工作空间:

source devel/setup.bash

如果机器配置了NVIDIA显卡并且要用GPU加速,还可以在编译前安装CUDA,Autoware会自动检测CUDA并启用相关模块。不过入门阶段即使不装CUDA,CPU模式也足够跑通官方Demo。

2.3 Docker方式:不折腾环境的最快路线

如果你对Ubuntu和ROS还不太熟,或者不想在环境上花太多时间,我建议直接用官方Docker镜像。Autoware在Docker Hub上有现成镜像,对应1.15版本、Melodic环境的镜像标签大概是autoware/autoware:1.15.0-melodic-cuda,有GPU就配合NVIDIA Container Toolkit跑,没有GPU就选不带cuda后缀的版本。

Docker的优势是环境隔离,目录不会因为反复安装依赖搞脏。第一次跑的时候把容器里的共享目录映射到宿主机,方便后面读写下载好的bag文件和点云地图。但Docker方式不适合需要改源码的场景,因为你每次进容器都要重新挂载、重新编译,流程比较繁琐。我的建议很直接:新人先用Docker跑通Demo,确认一切都正常了,再回头用源码方式自己在宿主机上编译一套。

2.4 安装完怎么判断是否成功

安装完成后,在终端输入autoware并回车,如果能弹出Runtime Manager界面,说明基础安装已经成功。Runtime Manager是Autoware 1.x的操作面板,界面里分成Setup、Simulation、Map、Sensing、Perception、Planning、Vehicle等几个栏目,所有模块的开关都在这里控制。

我第一次装完看到界面时特别兴奋,心想终于装成了。但后来发现,界面能弹出来只是第一步,真正跑起来还得把点云地图加载、话题连接都配好,这些我在下一章详细说。

3. 跑通官方demo的详细步骤与避坑要点

3.1 准备示例数据包

官方Quick Start页面提供了示例数据包,常见的是sample_moriyama相关的bag文件和点云地图文件。bag里面记录了车辆在某个测试区域行驶时的激光雷达、GPS、IMU等传感器数据,点云地图则是预先建好的静态地图。把它们下载到本地,建议放在一个专门的autoware_data目录里,后面加载时路径更清晰。

mkdir -p ~/autoware_data cd ~/autoware_data # 将下载好的bag文件和map文件放进来

3.2 使用Runtime Manager加载地图和启动rviz

启动Autoware后,按下面顺序操作:

  1. 在Runtime Manager中找到Simulation栏目,点击“Play Bag”,选择下载好的bag文件。播放速率可以先设置为1,后面觉得快或慢再调整。
  2. 切到Map栏目,点击“Point Cloud Map”,加载点云地图文件。加载完成后,程序会自动发布点云地图对应的TF关系。
  3. 在RViz栏目里选择官方提供的rviz配置文件,没有的话也可以自己新建一个rviz窗口,手动添加PointCloud2显示。
  4. 在rviz中把Fixed Frame设置为map,这样点云坐标才正确。

我实际操作时出现过加载地图之后rviz里一片空白的情况,当时第一反应是地图文件坏了,查了半天最后发现是Fixed Frame没有设置。这是一个非常低级但又很容易忽略的问题,记在排查清单里一点不为过。

3.3 观察定位与感知输出

bag播放之后,点云会源源不断地进来。此时启动NDT匹配节点,rviz里就能看到实时点云与静态地图逐渐对齐,车辆在点云地图中的位置被估计出来。这个过程对新手来说非常直观:看到两片点云慢慢贴合,你就理解了基于点云的定位到底在做什么。

我第一次跑Demo时,rviz里能看到点云在动,但位置明显偏了很大一截,根本无法与地图对齐。后来发现是因为没有设置初始位姿。Autoware的NDT匹配是依赖初始猜测的,初始位姿给得太离谱,匹配就会掉进局部最优。解决的办法是在rviz里用2D Pose Estimate按钮,手动给一个车辆的大致初始位置,让匹配从合理的地方开始。这个步骤官方文档里写得不细,但几乎所有人都会遇到,非常值得记牢。

跑通Demo意味着你完整走通了传感器数据读取、点云地图加载、定位匹配这一条链路。虽然它和真实自动驾驶还有很大距离,但这个“最小闭环”真的能帮你建立对整个软件栈的整体认识。

4. 相机雷达联合标定工具的使用全流程

4.1 标定到底在求什么

用一个简单的类比来理解联合标定:相机和激光雷达像是两个人,一个用眼睛看世界,一个用手电筒扫描世界,他们站在不同位置,看到同一个物体时,各自报告的是“自己坐标系下的位置”。联合标定就是算出这两个坐标系之间的对应关系,也就是外参矩阵,包含一个3x3的旋转矩阵R和一个3x1的平移向量t。

有了外参,我们就能把雷达点云投影到图像像素坐标上,也能把图像信息映射到点云空间。没有标定,所谓的“融合感知”就是空谈,因为点云和图像在空间上根本对不上。mathematically,相机投影可以用一个经典公式表达:像素坐标 = K * [R | t] * 雷达坐标,其中K是相机内参矩阵,R和t就是我们要标定的外参。

4.2 标定前的物料和准备

这套标定方案需要一块棋盘格标定板,官方工具autoware_camera_lidar_calibrator依赖棋盘格角点来做特征提取。准备阶段有三件事必须做到位:

第一,标定板尺寸要量准。具体来说要确认每一格的实际边长,以及棋盘格内部角点数(比如9x6代表内部角点是9列6行)。这些参数后续在标定工具里都要输入,一旦填错,结果必错。

第二,相机内参要先标定好。可以用ROS自带的camera_calibration工具来完成:

rosrun camera_calibration cameracalibrator.py image:=/camera/image_raw camera:=/camera --size 9x6 --square 0.025

把相机对准棋盘格,从不同角度移动采集样本,标定完成后会得到相机内参矩阵和畸变系数。输出格式要与camera_info兼容,因为autoware_camera_lidar_calibrator在执行时需要通过camera_info话题拿到内参。

第三,录制好联合采集数据。把相机和激光雷达固定好,标定板放在两者共同视野里,从近到远、从正对到斜对,录多组数据。录制时务必保证图像和点云的时间戳是同步的,最简单的方式是用rosbag录制整包数据,播放时再统一时间源。

4.3 GUI标定操作步骤

在Autoware环境中启动标定工具:

roslaunch autoware_camera_lidar_calibrator camera_lidar_calibration.launch

打开后是左右分区的界面,左边是图像显示,右边是点云显示。操作流程如下:

  1. 暂停bag播放,挑一帧标定板清晰的画面。
  2. 在图像中依次点击棋盘格的四个角点,让工具确定棋盘格在图像中的位置。
  3. 在点云视图中框选标定板所在的区域,工具会基于选中区域做平面拟合,从而提取标定板在雷达坐标系下的位置。
  4. 在右侧面板中填入棋盘格边长(单位米)和内角点数量,然后点击标定按钮。

工具会根据图像上的棋盘格角点和点云中标定板平面,计算出相机与雷达之间的外参。标定完成后会打印出旋转矩阵和平移向量,也能把结果保存成yaml文件。一帧标定结果不够稳,建议在不同距离和角度下采集5到10帧,然后做联合优化,结果会稳定很多。

4.4 标定结果验证与优化

拿到外参后,第一步千万别急着写进配置文件,先做投影验证。把点云按照外参投影到图像上,观察车道线、路边沿、车辆边缘是否与图像贴合。如果发现近处对齐、远处偏移,很可能外参没有收敛好,需要重标。如果整体偏移方向一致,先检查相机内参是否正确。

我在标定过程中踩过一次深坑:用的棋盘格边长标称值是0.05米,结果我输入成了0.005米,标定结果惨不忍睹。这种错误以后一定要避免,任何参数都要和标定板实物重新测量一次再填入。另外,标定的数据最好覆盖不同距离,比如1米、2米、3米分别采集,这样优化出来的外参对近距离和远距离都有较好的适应能力。

5. 安装与标定的常见问题速查表

5.1 安装阶段的问题

下面这些是我和身边朋友实际遇到过的安装问题,整理成表格方便排查。

问题现象可能原因解决方法
rosdep update超时或报错网络无法正常访问ROS源检查网络,保持能访问GitHub和raw.githubusercontent.com后重试
vcs import之后src目录仍然缺少包vcs命令没有正确执行确认autoware.ai.repos文件路径正确,重新执行import
catkin_make报找不到XXXConfig.cmake缺少某个系统依赖或ROS依赖重新运行rosdep install,针对性安装缺失依赖
编译过程中进程被杀内存不足增加swap分区,或使用catkin_make -j1/-j2降低负载
终端输入autoware无反应环境变量没source,或编译未成功检查devel/setup.bash是否source,确认编译正常结束

5.2 标定阶段的问题

标定是玄学?其实不是,多数问题都有明确原因。

问题现象可能原因解决方法
点云视图里找不到标定板平面标定板太小、距离太远、点云太稀疏换大标定板,把板子靠近传感器,或者调整点云显示ROI范围
图像中棋盘格角点无法识别光照不均匀、曝光过强或过暗调整相机曝光,保证棋盘格纹理清晰,必要时手动点击角点
标定后投影明显偏移相机内参错误、点云框选不准确、时间戳不同步重新标定相机内参,重新录制bag,框选时尽量贴合标定板平面
多帧标定结果差异很大数据帧角点或点云选择误差大增加数据量,多采集不同距离与角度,去掉明显异常帧

5.3 几条通用的避坑建议

标定也好,装环境也好,我发现很多坑本质上是记录不规范造成的。你改过什么参数、哪个版本能跑、哪组外参效果较好,如果没记下来,下次只能重新试错。我自己后来养成了习惯:每次标定结果都保存成独立yaml文件,命名里带上日期、距离、角度信息,验证后把效果最好的那份单独放在final目录里。

还有,不要迷信某一个工具的默认参数。autoware_camera_lidar_calibrator确实好用,但如果你相机畸变比较大,或者点云噪声大,完全可以在采集数据时多拍几帧、多点几次点云区域。标定这件事,耐心带来的收益非常直接:多花半小时采集,比起反复标完再验证、再推到重来,效率高得多。

最后再分享一下我的个人体会:第一次成功把Autoware跑起来、第一次看到点云准确叠加在图像上,那种成就感是实打实的。如果你也被各种编译错误和标定偏差卡住,别急着怀疑自己,绝大多数问题都是环境或参数细节,一步步按上面清单排查就好。这个项目确实有门槛,但它把所有源码都摊开了,反而给了你一条真实了解自动驾驶技术栈的路。

返回列表