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上该装哪个Autoware1.1 Autoware不是单个包而是一整套自动驾驶软件栈很多第一次接触Autoware的人会把它当成一个普通的ROS功能包其实完全不是。Autoware是整套自动驾驶软件栈从底层的传感器驱动接入到高精度地图加载、定位、感知、路径规划、车辆控制每一环都有对应模块。以Autoware 1.x为例它被拆成了几十个ROS package分布在autoware.ai这个仓库和一堆子仓库里编译之前必须把这些子仓库一起拉下来否则连基本消息类型都是缺失的。官方把Autoware的入门路径设计成“仿真先行”先下载官方提供的数据包和点云地图在rviz里跑通一次定位和感知让你对“车辆如何通过点云匹配来定位当前位置”有直观感受。之后再进入传感器标定环节因为真实车辆上相机和激光雷达的安装位置不同数据坐标系不同不标定的话相机图像和激光点云就是两组对不上的数据后续所有融合算法都无从谈起。1.2 为什么Ubuntu 18.04主流搭配Autoware 1.xAutoware有两条主要产品线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上完整安装Autoware2.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 ~/.bashrcrosdep 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 melodicrosdep 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加速还可以在编译前安装CUDAAutoware会自动检测CUDA并启用相关模块。不过入门阶段即使不装CUDACPU模式也足够跑通官方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后按下面顺序操作在Runtime Manager中找到Simulation栏目点击“Play Bag”选择下载好的bag文件。播放速率可以先设置为1后面觉得快或慢再调整。切到Map栏目点击“Point Cloud Map”加载点云地图文件。加载完成后程序会自动发布点云地图对应的TF关系。在RViz栏目里选择官方提供的rviz配置文件没有的话也可以自己新建一个rviz窗口手动添加PointCloud2显示。在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打开后是左右分区的界面左边是图像显示右边是点云显示。操作流程如下暂停bag播放挑一帧标定板清晰的画面。在图像中依次点击棋盘格的四个角点让工具确定棋盘格在图像中的位置。在点云视图中框选标定板所在的区域工具会基于选中区域做平面拟合从而提取标定板在雷达坐标系下的位置。在右侧面板中填入棋盘格边长单位米和内角点数量然后点击标定按钮。工具会根据图像上的棋盘格角点和点云中标定板平面计算出相机与雷达之间的外参。标定完成后会打印出旋转矩阵和平移向量也能把结果保存成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文件路径正确重新执行importcatkin_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跑起来、第一次看到点云准确叠加在图像上那种成就感是实打实的。如果你也被各种编译错误和标定偏差卡住别急着怀疑自己绝大多数问题都是环境或参数细节一步步按上面清单排查就好。这个项目确实有门槛但它把所有源码都摊开了反而给了你一条真实了解自动驾驶技术栈的路。
返回列表