尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Autoware入门实战:Ubuntu 18.04安装、数据回放与相机雷达联合标定全流程解析

Autoware入门实战:Ubuntu 18.04安装、数据回放与相机雷达联合标定全流程解析 这篇文章我想认真聊聊Autoware的入门。这几年自动驾驶相关的开源软件越来越多但真正能做到“整包全家桶”的Autoware还是绕不开的一个。很多人第一次接触它是在Ubuntu 18.04上装Autoware.AI再配上相机和雷达的联合标定工具跑通感知和定位的Demo。但说实话这玩意生态复杂安装编译一路下来顺利点也要一整天中间踩坑踩到想砸键盘的也不在少数。这篇内容把官方入门的路径重新梳理一遍从版本选型、环境搭建、数据回放到相机雷达联合标定的完整流程全部基于实际踩坑后的经验来写希望能帮想入坑的同学少绕几圈。1. 上手前先搞懂Autoware是什么又该怎么选版本很多人在装Autoware之前其实并没有完全搞清楚它到底是什么。它不是某个单一功能包而是一套集定位、感知、规划、控制于一体的自动驾驶软件框架。我第一次看它的源码结构时眼前一亮但也头皮发麻——官方文档、代码库、wiki、示例数据分散在好几个地方光是搞明白各模块之间的关系就需要一点耐心。1.1 一个开源平台把自动驾驶的“脑回路”全给你Autoware最早是名古屋大学的开源项目后来由Autoware Foundation维护。它把自动驾驶车辆的传感器数据处理、环境感知、路径规划、车辆控制这些环节全部用ROS节点的方式串联起来。说白了你在真车上装的激光雷达、摄像头、GPS/IMU都能通过Autoware提供的节点去读取、融合和决策。它的定位模块用NDT匹配点云地图感知模块能检测动态物体和车道线规划模块可以生成局部路径控制模块再输出转向和油门指令。它对新手最大的意义在于提供了一个可运行的“整包”参考。你不用从零开始写建图、定位、障碍物检测的算法先跑通Autoware再逐步替换成自己的算法这个路径非常适合研究学习。我见过不少团队第一次接触它就是为了在仿真环境里跑通感知到控制的闭环再迁移到实车。1.2 版本选型Ubuntu 18.04该用哪个Autoware的版本演进比较复杂这也是入门时最常见的一个坑。Autoware.AI是早期的ROS 1版本支持Ubuntu 18.04和ROS Melodic后来又有Autoware.Auto偏向ROS 2支持Ubuntu 20.04以上再往后还有Autoware Universe属于重构后的新架构。如果你手里的环境是Ubuntu 18.04那最稳妥的选择就是Autoware.AI。网上那些Ubuntu 18.04安装Autoware的教程基本也都是针对Autoware.AI来写的。这里我给个明确建议如果你是刚接触或者课程、项目基于Ubuntu 18.04直接装Autoware.AI的Release版本不要一上来就挑战源码编译最新分支。原因有三一是18.04和ROS Melodic的搭配非常成熟网上能查到的报错和解决方案最多二是我后面要讲的相机雷达联合标定工具autoware_camera_lidar_calibrator在这个版本里有现成的集成省去不少适配工作三是官方Quick Start的示例数据包本来就是按这个版本做的。等这套流程跑通了你自然会对ROS节点、TF坐标变换、消息通信有更深的理解那时候再去看Autoware.Auto或Universe会轻松很多。2. 环境准备与Autoware.AI安装实操在动手安装之前先把系统环境理干净能省下后面一整天的时间。我遇到过太多因为环境混乱导致的编译失败和运行时崩溃很多问题其实都出在ROS版本、依赖库版本和CUDA版本不匹配上。2.1 系统和依赖准备推荐环境是Ubuntu 18.04.5或者18.04.6然后安装ROS Melodic的Desktop-Full版本。这里有一个非常实用的技巧先确认系统里没有装过其他版本的ROS如果之前装过ROS Noetic或者其他ROS 2建议直接清理干净再装Melodic。混装两个ROS版本rosdep和catkin经常会把依赖解析到错误的路径上。装完ROS之后还需要安装一些基本的系统和开发依赖。我记得当时踩过一个坑缺少python-catkin-tools、ros-melodic-desktop-full之外的很多包比如ros-melodic-grid-map、ros-melodic-nmea-msgs编译到一半直接报找不到头文件。官方wiki上有一串依赖清单建议照着装一遍。另外CUDA和cuDNN我建议按需安装。如果后面要跑GPU加速的检测模型那就装如果只是想跑通Demo先不装CUDA反而能减少很多麻烦。因为Autoware.AI的某些源码分支对CUDA版本有隐性要求版本不匹配时会出现“能编译一半、却在运行时崩溃”这种让人抓狂的问题。2.2 源码编译与安装步骤Autoware.AI的源码编译大体分四步创建工作空间、拉取源码、安装依赖、编译。我用的是catkin_make方式虽然官方也支持docker方式但在18.04上直接源码编译后续修改和调试会更直接。# 创建工作空间 mkdir -p ~/autoware.ai/src cd ~/autoware.ai catkin_make # 先空编译一次确保工作空间环境可用接着把源码clone到src目录。这里有个需要注意的点官方仓库比较大国内网络拉取时容易中断。建议用官方提供的Release分支而不是master。用git clone --branch 1.14.0 https://github.com/Autoware-AI/autoware.ai.git如果网络不稳定可以分多次clone或者用代理前提是网络环境允许。拉完源码之后进入src执行git submodule update --init --recursive这个步骤很多人会漏掉导致一些子模块缺失。依赖安装可以用rosdepcd ~/autoware.ai rosdep update rosdep install -y --from-paths src --ignore-src --rosdistro melodic等依赖装完就可以编译了cd ~/autoware.ai source /opt/ros/melodic/setup.bash catkin_make整个编译过程非常耗时如果机器配置不是很高可能要跑45分钟到一个小时。第一次编译时不要急着干别的就盯着终端看报错及时处理。我当时就遇到一个很典型的问题系统默认的gcc/g版本太高某些老代码段编译不过去后来把g换回低版本才解决。2.3 安装过程中容易被忽略的配置项编译完成之后不要急着跑先确认一下环境变量。在~/.bashrc文件里加上source /opt/ros/melodic/setup.bash source ~/autoware.ai/devel/setup.bash然后执行source ~/.bashrc再用echo $ROS_PACKAGE_PATH检查一下路径是否包含autoware.ai的包路径。如果这里没配对后面启动autoware时会出现“package not found”的报错。还有一点值得提Autoware.AI的启动界面依赖Qt系统如果缺少相关的图形库runtime_manager起不来。建议提前安装ros-melodic-rqt-gui、ros-melodic-rqt-gui-py和ros-melodic-topic-tools。这个坑在刚装完系统、图形环境比较干净的机器上特别常见。3. 入门实操从数据回放到感知规划全流程Autoware装好之后最让人兴奋的一步就是用官方数据包把整个感知定位流程跑起来。这里我不建议一上来就接真车传感器先用官方提供的Demo数据包把界面和节点逻辑熟悉了效率高得多。3.1 数据集下载与启动方式官方Quick Start用到的数据包是sample_moriyama_data大概几个GB里面包含激光雷达的点云数据、摄像头图像、GPS/IMU数据。下载完成之后解压你会看到里面有.bag后缀的rosbag文件这就是录制好的传感器数据。回放数据的操作很直观cd 你的数据目录 rosbag play -l sample_moriyama_150324.bag-l参数表示循环播放这样在调试初始参数时不需要反复重启bag包。接下来打开Autoware的主界面cd ~/autoware.ai source install/setup.bash ./run这时候会弹出一个集成界面左边是模块列表右边是地图和点云显示。我第一次打开时界面还是比较复杂的但别慌把它理解成一个“联调控制台”就行。3.2 Runtime Manager界面逐项拆解Runtime Manager是Autoware操作的核心。它的顶部有几个Tab通常你会在Map、Sensing、Localization、Perception、Planning、Control这几个模块之间切换。整体思路是“先给地图再给传感器数据然后定位再感知最后规划控制”。我建议你的操作顺序也严格按这个来因为下游模块往往会依赖上游模块输出的Topic。在Map选项卡中需要加载点云地图文件可以用Point Cloud里的Load按钮加载.pcd文件加载完成后Rviz中会显示完整的点云地图。在Sensing选项卡里要选择传感器模型。如果回放bag数据一般直接选择“Points Raw”投递方式即可。注意不同的bag数据集传感器的Topic名称可能不一样如果发现Rviz里没有点云先用rostopic list确认你bag中的Topic名是否和Autoware默认的一致不一致时要在Setup里修改Topic名。这个检查习惯能帮你避免大量“为什么我什么都没有”的困扰。3.3 从NDT定位到感知模块联动定位模块是Autoware里最有代表性的一个环节。在Localization选项卡里选择ndt_matching设置好参考点云话题和初始位姿然后在前端界面上用Initial Pose按钮在点云地图里大致点一个初始位置。NDT算法会在后续帧点云和地图匹配的过程中不断修正车辆的位姿。这一步如果初始位姿给得离谱定位就会发散点云会“飘”起来。定位跑通之后Perception选项卡里的检测模块就有意义了。通常我会依次开启voxel_grid_filter做降采样再用ray_ground_filter过滤地面点然后用lidar_euclidean_cluster_detect做聚类检测。跑起来之后Rviz里会看到被框出来的障碍物。这里有一个实际经验如果聚类框碎裂或者车辆目标被切碎多半是voxel_grid_filter的leaf size设得太大把点云压得太稀疏适当缩小leaf size会好很多。规划和控制模块在纯回放模式下其实更多是展示逻辑。Autoware的Planning里包含waypoint_planner、velocity_set等节点控制模块包含mpc_controller等。没有实车反馈时这些节点可能不会产生很直观的效果所以初次入门我建议重点把时间和精力放在定位和感知这两个模块上理解了它们的Topic流转再往后深入整个系统就在你脑子里能串起来了。4. 相机雷达联合标定传感器对齐的核心工具如果说跑通Autoware的定位感知是学会“开车”那相机雷达联合标定就是让车“看清世界”的关键一步。摄像头的图像和激光雷达的点云是两种完全不同的数据模态要让它们的时间戳、坐标空间统一起来就必须做联合标定。这也是热搜里“ubuntu18.04 安装autoware相机雷达联合标定工具”这个需求最核心的内容。4.1 为什么要做联合标定激光雷达返回的是三维点云坐标相机返回的是二维像素颜色。要让点云中的每个点都能在图像上找到对应的像素或者反过来用图像信息增强点云语义就需要知道相机和雷达之间的相对位姿关系旋转矩阵和平移向量。联合标定算的就是这两个传感器坐标系之间的变换矩阵。没有这组参数自动驾驶的目标级融合、传感器前融合都是空谈。很多人在相机内参标定完成之后以为所有工作就结束了但实际上激光雷达和相机之间的外参才是融合的关键。内参描述的是相机本身的焦距、畸变等属性外参描述的是相机在雷达坐标系中的位置姿态。Autoware里正好集成了autoware_camera_lidar_calibrator这个工具就是用来求解外参的。4.2 标定工具安装与数据采集在Autoware.AI的源码包中这个标定工具在autoware.ai/utilities/autoware_camera_lidar_calibrator路径下。如果你安装的是完整版Autoware.AI一般已经包含这个包。启动方式是在Runtime Manager的Sensing选项卡里找到Camera-Lidar Calibrator按钮点击后会自动启动标定界面。标定需要一块棋盘格标定板。我建议打印一张A1尺寸的黑白棋盘格角点可以选择8x6或者9x7具体尺寸要写进配置文件里。数据采集过程中把标定板放在雷达和相机都能看到的位置变换多个角度、距离和朝向尤其要覆盖近距离、中距离、左右侧每个位置保持静止几秒。整个过程持续两三分钟即可不用录很久。采集时有一个容易被忽略的细节标定板背面不要有其他高反光物体也不要让阳光直射标定板否则相机会过度曝光雷达点云在板上也不稳定。我第一次做的时候没注意办公室里开着强灯采集出来的棋盘格点云和图像上的角点对应关系非常差后来换了位置才正常。4.3 标定界面操作与参数计算打开标定界面后左边是相机图像右边是雷达点云。你需要在图像中用鼠标点击棋盘格的四个角然后输入棋盘格的真实尺寸。接着界面会用Camera-Lidar Calibrator提供的算法在点云里识别棋盘格平面并自动计算外参。如果自动检测失败可以手动在点云中框选大致矩形区域辅助算法寻找。实际操作中初值很重要。标定工具可以在你给出的初始外参基础上进行优化所以先在界面上大致调整旋转和平移让点云投影到图像上的位置大致对齐再点击“Calc”按钮算法会自动精化。这一招特别实用——直接让算法从零开始算经常陷入局部最优给一个差不多的初值最后的结果往往很准。计算完成后在界面上可以直接看到点云按外参投影到图像上的效果。如果颜色叠加显示已经贴合说明外参不错如果明显错位尤其是近处的物体边缘错位那就需要重新调整初值再算。多算几次记录精度最好的那组。4.4 参数保存与使用标定完成后把参数保存成yaml文件。Autoware的相机雷达标定工具生成的参数文档一般包含相机内参矩阵、畸变系数、以及相机相对于雷达的外参。保存后你在Autoware的Sensing选项卡里加载这个文件图像和点云的融合就具备了坐标对齐的基础。这里要额外提醒一点标定结果会贴在标定时的安装位置上。如果雷达或相机的位置有丝毫移动哪怕只是松了一颗螺丝标定参数就失效了。所以实车上线前最好重新做一遍联合标定或者在结构上做稳固的定位销孔设计尽量减少重复标定次数。5. 踩坑记录与问题排查实录这部分内容其实是我最想写的。Autoware入门过程中90%的时间其实都是在跟各种奇奇怪怪的报错和异常现象搏斗。我把自己经历过的、以及在社群里帮别人处理过的高频问题整理成一个速查表虽然不能覆盖所有情况但至少能帮你少走点弯路。5.1 编译阶段的经典报错编译是最容易出现问题的环节而且很多报错都是环境问题。我整理了下常见的几种现象可能原因处理方式编译时提示找不到xxx包的头文件缺少依赖rosdep没有完整安装用rosdep check检查缺失项再rosdep installCMake Error: CUDA not foundCUDA路径或版本不匹配检查/usr/local/cuda软链接是否正确必要时在~/.bashrc中设置CUDA_HOME编译速度极慢甚至卡死内存不足或者编译线程过多用catkin_make -j2降低并行度关闭不用的桌面程序预留内存某些包只有头文件但编译报语法错误gcc/g版本过高使用旧版本编译器例如g-7qt_core相关报错Qt版本冲突确认安装的是ROS Melodic对应的Qt版本不要混用系统自带Qt5的新版本编译时还有个容易被忽略的习惯先编译src/autoware/common等基础包等基础包编译通过后再全量编译。这样定位问题时更清晰。5.2 运行时最常见的异常现象运行时的问题现象往往很迷惑。很多次我以为是自己代码写错了最后发现是Topic名、TF树或者时间戳的问题。这里挑几个印象最深的rostopic list能看得到点云但Rviz里不显示——这个大概率是Frame ID不一致。雷达数据默认frame id是velodyne但Autoware某些仿真或回放场景里要求是map或base_link可以在Rviz中手动修改Fixed Frame或者用static_transform_publisher发布一个坐标变换。定位结果飘逸发散这个前面提过多半是初始位姿给得太离谱。记住一个经验先把Rviz视角切到地图俯视图放大到目标起点位置再点击Initial Pose尽量让箭头方向和车辆实际朝向一致误差控制在车宽范围内。启动回调时卡住或者点击按钮没反应多半是动态链接库加载失败。可以在终端里用rosrun runtime_manager runtime_manager_dialog.py在前台模式启动这样能看到完整的Python报错而不是在后台窗口里默默失败。5.3 联合标定中容易翻车的细节联合标定的问题更多是数据质量问题。标定板太小、棋盘格打印后贴在不平的硬纸板上、相机曝光过高导致棋盘格反光、雷达点云在近距离对黑色区域缺少反射这些都会导致标定失败。我建议标定板做成硬质背板表面尽量哑光。还有一个细节标定过程中标定板在雷达点云中的“薄度”很重要。如果雷达点云中棋盘格的点数太少平面拟合就不准外参计算会变得很不稳定。所以雷达尽量选16线以上并且让标定板在近距离2-5米多停留确保有足够多的点落在标定板平面上。另外标定结果保存的时候不同版本的Autoware对yaml格式的要求可能有细微差异。如果加载后没有生效先打开yaml文件对照一下官方模板的字段名特别是camera_extrinsic_matrix还是transform这种命名差异改过来再加载。6. 一点个人体会文章写到这里主体内容基本上算告一段落了。如果非要总结一点个人体会我最想说的一点是Autoware入门真正难的不是某个算法的原理而是整个工具链的衔接和对ROS生态的理解。你会在安装过程中学会处理依赖冲突在跑通Demo的过程中理解Topic和TF在联合标定过程中体会到传感器硬件特性的差异。这些经验不是看文档能获得的必须自己动手踩一遍。我也建议刚入门的同学不要一口气追求把Unity模拟器、实车控制、深度学习检测模型全部接上。先老老实实在Ubuntu 18.04上装好Autoware.AI跑完官方数据包再完成一次相机雷达联合标定把最基本的链路打通。这一套流程走下来你对自动驾驶软件架构的理解会比单纯看论文扎实得多。最后再分享一个小技巧在日常调试中养成保存“日常清单”的习惯。比如把成功运行时的各个模块参数、ROS启动顺序、Topic名称变化甚至Rviz的视角配置都用截图和文本记录下来。因为Autoware的配置项太多这些记录某天会帮你省下大量重复劳动也方便你写博客或者做课程实验报告时直接取用。
返回列表