ARTICLE DETAIL

资讯详情

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

Autoware在Ubuntu 18.04上的安装与相机雷达标定实战指南

Autoware在Ubuntu 18.04上的安装与相机雷达标定实战指南 1. 先搞清楚你接触的是哪个Autoware版本分支才是入门的第一道坎1.1 为什么一个名字下面有三套完全不同的东西刚打开Autoware官网的人十有八九会被三个入口搞晕Autoware.AI、Autoware.Auto、Autoware Universe。这三个其实并不兼容虽然共享同一个名字但底层的通信中间件、消息格式、包管理方式完全不一样。Autoware.AI是建立在ROS 1之上的老架构最早可以追溯到名古屋大学的开源项目它对应的系统版本是Ubuntu 16.04和18.04分别搭档ROS Kinetic和ROS Melodic。你想在Ubuntu 18.04上安装的基本就是这个家族里的某个版本。Autoware.Auto则是Autoware基金会后来用ROS 2重写的版本很长一段时间功能覆盖不完整主要用于研究和算法验证不太适合拿来跑整车Demo。Autoware Universe则是2022年之后官方的主推版本全面转向ROS 2模块划分、安装方式都重新设计了但它要求的Ubuntu版本通常是20.04或22.04跟18.04完全不搭边。所以官方入门教程这个说法本身就有点坑。官网和官方GitLab推荐的Quick Start默认你已经有ROS基础并且分得清AI版的老教程和Universe版的新教程。如果你在Ubuntu 18.04上照抄新教程的命令第一步装依赖就会翻车反过来说在22.04上硬装老版本也会因为ROS版本对不上直接失败。这一关不迈过去后面的安装、标定、跑Demo全是空中楼阁。1.2 官方文档的结构与一条更省时间的入门路径官方文档目前的结构对新人并不友好。Autoware.AI的文档大部分放在GitLab仓库的docs目录下内容和几年前相比基本没怎么更新而官网首页又把大量篇幅给了新架构。对刚入门的人来说最顺的路径其实是这样的先确定用哪个发行版和ROS版本组合。Ubuntu 18.04配ROS Melodic对应AI版1.14或1.15这套组合最成熟网上的求助帖和踩坑记录也最多。安装阶段优先看仓库里的README和依赖安装脚本别把官网的大图和你的实际操作混为一谈。先把官方Quick Start的rosbag跑通再碰相机雷达联合标定工具。因为标定涉及相机内参、雷达外参、TF变换三层概念叠加数据流都还没跑通就直接标定出了问题根本不知道去哪一层排查。这篇文章接下来就按这条路径展开。我自己在18.04上从零编译过不下十次AI版也帮人处理过各种标定和运行问题下面所有命令和排错思路都是实际跑过的你可以放心对照操作。2. Ubuntu 18.04安装Autoware源码编译与Docker两条路线实测对比2.1 安装前必须确认的环境清单在Ubuntu 18.04上装Autoware.AI最稳的组合是Ubuntu 18.04.5或18.04.6装好全部更新ROS Melodic的desktop-full版本CMake 3.10以上gcc 7.5。显卡驱动和CUDA只有在你想跑基于深度学习的感知模块比如SSD目标检测时才必须如果只是跑Quick Start和相机雷达标定纯CPU完全够用别为了一个Demo去折腾显卡驱动那是给自己找麻烦。有几个前提条件非常容易被忽略我一个个列出来确保ROS环境变量已经写进~/.bashrc也就是有source /opt/ros/melodic/setup.bash这一行否则后面rosdep、catkin_make会报找不到命令。磁盘空间至少留50GB。Autoware.AI全量源码加编译产物二十多GB很正常。我有一次给一台只剩35GB的机器装编译到一半磁盘满整个build目录作废重来非常狼狈。内存建议16GB以上。8GB机器编译时大概率触发OOM被系统杀掉进程后面我会讲怎么降并发。别在虚拟机里装除非你用Docker并且把显示都配好了。标定工具、PCL可视化窗口对OpenGL渲染有要求虚拟机里经常黑屏或闪退排查起来非常痛苦。2.2 源码编译的关键命令与耗时控制官方推荐的方式是先把主仓库拉下来再用vcs工具把所有子模块一次性导入。具体命令序列大致如下sudo apt update sudo apt install -y python3-vcstool python3-catkin-pkg-modules \ python3-rospkg-modules python3-rosdep python3-rosinstall \ python3-rosinstall-generator python3-osrf-pycommon sudo apt install -y ros-melodic-desktop-full mkdir -p ~/autoware.ai/src cd ~/autoware.ai git clone https://gitlab.com/autowarefoundation/autoware.ai/autoware.ai.git . vcs import src autoware.ai.repos rosdep update rosdep install -y --from-paths src --ignore-src --rosdistro melodic注意vcs import这一步会把几十个子仓库全部克隆下来耗时取决于网络和服务器的响应速度可能十分钟也可能大半个小时。子模块拉完之后开始编译cd ~/autoware.ai colcon build --cmake-args -DCMAKE_BUILD_TYPERelease也会有人建议走老的catkin路线cd ~/autoware.ai/ros catkin_make -DCMAKE_BUILD_TYPERelease这两种我都实测过。colcon build对依赖顺序的处理更稳日志也更有条理catkin_make简单直接但遇到个别包报错时定位问题比较费力。第一次装建议直接用colcon别在工具选择上浪费时间。编译时间非常可观。四核八线程的机器全量编译大概要一个半到两个半小时八核十六线程的机器大约四十分钟到一小时。如果你不想干等有两个实用技巧用colcon build --parallel-workers 2或者catkin_make -j2降低并发虽然慢一点但不容易内存爆炸。如果只做标定和Quick Start感知模块里涉及深度学习的部分可以不编译。老版本可以通过修改autoware.ai.repos只拉取需要的包但对新手来说风险高更推荐的做法是编译完用不到的部分再单独清理或者干脆走Docker路线。2.3 Docker路线与Runtime Manager的架构选择不想被编译折磨的话官方提供了现成的Docker镜像。常用的tag有autoware/autoware:1.14.0-melodic和1.15.0-melodic拉下来之后这样启动docker pull autoware/autoware:1.14.0-melodic docker run -it --rm \ --nethost \ -e DISPLAY$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v /home/你的用户名/autoware_data:/data \ autoware/autoware:1.14.0-melodic进入容器后执行source /opt/autoware/setup.bash roslaunch runtime_manager runtime_manager.launchDocker模式下一个特别容易踩的坑是rosbag路径。容器里访问不到宿主机文件除非你把目录挂载进去。我经常看到有人把bag放在~/Downloads容器里只挂载了/dataRuntime Manager里填路径时怎么填都找不到文件。建议启动容器时就把bag目录明确挂载成一个固定路径比如/data之后所有文件都走这个路径能省下大量定位时间。还有一个非常经典的问题Runtime Manager启动后在Setup界面右下角有一个Computing下拉框。源码编译安装选Native有的版本写LocalDocker安装必须选Docker。这个选项一旦选错你点击模块的Run按钮时Runtime Manager要么去调docker命令却找不到容器要么在容器里直接执行宿主机不存在的二进制文件表现为按钮点了没反应或者模块启动失败。这个设置跟官方教程里的操作息息相关但很多教程只是一句带过新手基本都会在这卡一下。两条路线的取舍我用一个表格总结对比项源码编译Docker编译时间1到2小时以上无需等待学习源码方便直接改代码需要额外挂载和重编译环境隔离依赖系统环境干净互不污染显示问题较少DISPLAY和共享库偶发磁盘占用20GB以上镜像约8到10GB如果目标是读透源码、在算法层面做二次开发源码编译是必选项如果只想快速跑通流程、验证工具链Docker能让你当天就看到效果。我自己是编译党因为要在源码里加调试信息和算法模块容器里那套路径封装对开发确实不友好。3. 相机雷达联合标定工具从棋盘格准备到外参写入的完整流程3.1 标定前要理解的几何原理相机输出的是像素坐标雷达输出的是三维空间点要让两者的数据对得上就必须知道两个传感器之间的相对位姿这个相对位姿就是外参矩阵T_camera_lidar由旋转矩阵和平移向量组成。点云里的任意一点p_lidar先通过外参变换到相机坐标系再经过相机内参矩阵K投影到图像平面才能落在图像的对应像素上。融合如果没对齐典型现象就是点云映射到图像时物体的边缘像描歪了越远的东西飘得越明显。官方标定工具的核心思路是让一个平面棋盘格同时出现在摄像头画面和雷达点云中。算法在图像里用OpenCV的findChessboardCorners检测棋盘格内角点在点云里用RANSAC拟合出棋盘格所在平面然后优化一组旋转和平移参数让所有角点投影到图像后的位置和图像里检测到的二维角点位置尽可能重合。这个重投影误差的平方和就是整个标定优化的目标函数。理解了这个原理你就能明白为什么棋盘格必须硬挺、必须和传感器保持合适距离也能明白为什么采集姿态要足够多样化。这些东西不是玄学全是方程约束决定的。3.2 官方校准工具的操作界面与参数填写启动标定工具前先把传感器驱动或rosbag跑起来确认话题有数据。老版本里工具的入口在Runtime Manager的Sensing页签下一个叫Calibration Tools的下拉区域里面有lidar_camera_calibration和calibration_viewer等选项。不同小版本的按钮名称略有差异但核心入口都在这个区域。参数填错是标定失败的第一个高发原因。棋盘格有两个参数必须用卡尺精确测量不能靠猜Square Length单个格子的边长单位是米。格子边长5cm就填0.05填成5那就全乱了。Pattern Size棋盘格的内角点数不是格数。一个7行9列的格阵内角点是6乘8填反了基本检测不出来。除了棋盘格参数话题名也要仔细核对。相机图像话题和雷达点云话题在工具界面上都有对应的输入框填错的话界面永远黑屏没数据。用rosbag离线标定时播放尽量配合时间同步策略保证图像和点云时间戳接近否则工具抓到的帧里棋盘格已经动了一半检测必然失败。3.3 从采集数据到导出外参的操作序列整个标定过程我拆成五步每步都有实际操作的讲究第一步让棋盘格进入两个传感器的公共视野。雷达和相机的安装位置通常有几十厘米偏移棋盘格至少要离传感器组合两米以上太近会被雷达盲区吃掉或者相机对不上焦。第二步调整点云显示范围。工具里通常有ROI框选把点云显示范围框到棋盘格附近满屏的白点会让平面拟合跑偏。第三步移动棋盘格并逐帧采集。注意不要站在原地不动采几十帧那样三个平移自由度的约束严重不足。正确做法是远近左右、俯仰偏航都来几组让约束信息丰富起来。每次移动后等一两秒确认图像里的角点检测线框没有乱飞再按下Capture按钮。第四步点击优化按钮。工具会基于已采集的所有帧做联合优化把整体重投影误差压到最小。这个过程通常很快如果优化发散基本可以判定是某些帧质量太差回退删掉重采。第五步保存结果。工具输出的YAML文件里包含旋转和平移把这个文件存好。老版本里一般需要在Runtime Manager的TF配置里手动填入这组外参或者替换传感器驱动里的默认外参文件否则下次启动又回到默认值。我的实际经验是标定不需要采集几十上百帧三到五组姿态差异明显的有效帧就能得到可用结果。组与组之间姿态差异越大越好每一组内部棋盘格保持稳定越好这两个要求要平衡。3.4 判断标定质量投影验证与误差指标标定结束不是看到工具提示算完了就行必须做一次投影验证。用calibration_viewer或者自己写个简单的ROS节点把点云按刚标定的外参投影到图像上观察三个方面远景对齐看路牌、树、车身轮廓点云的颜色是否贴合物体边缘。近景对齐看地面车道线和路沿点云是否压在图像的对应位置。遮挡关系站在车前的人点云应该贴在人身上而不是飘到旁边。重投影误差是更直接的数据指标。一般能压到2个像素以内算很不错5个像素以内可接受超过10个像素说明外参不可用需要重新标定。很多人在这个环节偷懒结果后面做目标融合时一直怀疑算法有问题折腾半天才发现是外参错了。我的经验是标定质量不好时先别怪工具从物理层面找原因棋盘格有没有卷边、有没有反光、雷达扫描线密度是不是太低、采集时传感器有没有震动这些因素比算法参数致命得多。下面这张表总结了标定过程中的常见问题与对应原因异常现象常见原因处理方式点云窗口空白话题名错误或驱动未启动用rostopic hz确认数据图像里找不到角点格子太小、反光、曝光失控换哑光纸大棋盘格锁曝光点云里拟合不到平面棋盘格太薄、距离太远贴硬板控制在5米内优化发散某些帧质量差删除坏帧或重新采集标定后外参丢失未写入TF配置在Setup里配置TF关系4. 跑通官方DemoQuick Start背后的数据流与模块间关系4.1 Quick Start Demo到底在做什么Autoware的Quick Start并不像一个完整的自动驾驶演示它更像一个能跑起来的最小系统。官方提供过sample_moriyama_data和sample_sena_data等公开rosbag里面包含点云、图像、GPS等话题。你播放rosbag启动Runtime Manager然后手动把定位、感知、规划对应模块的按钮一个个点亮Autoware就会在RViz里画出实时路径和检测框。流程看起来简单但它的教学价值恰恰在于逼你手动理解每个模块的输入输出。官方文档给出的大致步骤是先播放数据包在Setup页签里选择车辆模型在Map页签加载点云地图然后按照Localization、Perception、Planning的顺序逐个启动模块。这个顺序不是随便排的定位要先有感知才能在同一个坐标系下表达目标规划又依赖感知结果链路是严格单向的。4.2 Runtime Manager各Tab与点云、图像Topic的对应关系Runtime Manager的每个页签本质是一个模块的启动面板而面板上最容易被忽视的是话题名参数。雷达点云默认话题是/points_raw但不同驱动可能发的是/velodyne_points或/lidar_points图像话题可能是/image_raw也可能是/camera/image_color。你必须在启动模块之前把Topic参数框里的名字改成实际存在的否则模块启动了也等不到数据模块没有输出的假象就是这么来的。一张常见话题对照表模块默认话题说明点云驱动/points_raw雷达原始点云图像驱动/image_raw相机图像GPS驱动/gpsimu组合导航数据NDT定位/ndt_pose定位结果位姿目标检测/detection/lidar_objects点云聚类目标路径规划/lane_waypoint_array路径点数组我在Quick Start阶段养成的习惯是先rostopic list看看bag里实际有什么话题再按实际话题名去填Runtime Manager的参数。这个习惯至少帮我省掉了一半排错时间。有些人遇到模块启动后RViz没反应第一反应是改算法参数结果发现只是话题名少打了一个斜杠。4.3 用tf tree和rqt_graph验证传感器链路是否正常模块之间除了话题连接还大量依赖TF变换关系。Quick Start里如果RViz的点云和地图对不上先别动感知参数先检查TF树是不是完整。用这个命令直接查看雷达坐标系到map坐标系的变换rosrun tf tf_echo map velodyne如果输出No transform说明定位没有输出或者TF配置缺失。再用rqt_graph看节点之间的订阅发布关系判断到底是谁没连上。这两个是调试ROS系统的基本功比对着日志猜效率高得多。我见过不少初学者在Quick Start阶段疯狂调参数最后发现只是bag没播放、话题名填错、TF少了一条边。底层数据流都没通后面做融合、做规划都是空中楼阁。Quick Start的意义就是让你在最小的复杂度里把这些关系摸透所以遇到问题先查数据流这个习惯要刻意养成。5. 高频问题排查编译中断、标定失败与界面异常的根因5.1 编译期的高频问题源码编译最常见的报错是内存不足导致编译进程被系统杀掉现象是终端里出现Killed字样后面没有任何明确的编译错误。这几乎可以肯定是内存爆了解决方式是降并发colcon build --parallel-workers 1或者给系统增加swap空间。多核机器看着性能强但每个编译单元吃内存不少十六核机器直接全量编译也可能瞬间吃掉几十GB内存。第二个高频问题是某个依赖包找不到。Autoware.AI的老依赖库和Ubuntu 18.04的软件源有时会有版本冲突rosdep install偶尔会把个别包标记为skipped导致漏装。保守做法是编译前重新跑一次rosdep install并且认真看输出中是否有ERROR字样而不是全部跳过。第三个是OpenCV版本冲突。18.04系统默认的OpenCV是3.2如果你因为其他项目装了OpenCV 4.x并且覆盖到了系统路径cv_bridge会和它闹别扭编译或运行时报一堆链接错误。最省心的方式是别动系统OpenCV自定义版本只放在自己的工程里Autoware这边一直用系统默认。老版本的编译报错里还有一部分是Qt相关这类问题多半是系统里同时存在多个Qt版本CMake误选了不兼容的那一个。5.2 标定工具采不到点云、棋盘格检测失败的根因标定工具界面打开了但点云一片空白往往就三个原因话题名没填对、TF里雷达坐标系和工具默认坐标系不一致、雷达驱动根本没启动。先用rostopic hz /points_raw确认数据在跳再去怀疑工具本身。这个话题频率看着是零那问题在驱动话题频率正常问题在工具配置或者坐标系。棋盘格在图像里检测不到常见原因是格子太小、图片太糊、黑白格对比度不够。对策是把棋盘格做大打印选哑光纸避免反光如果相机有自动曝光把曝光锁定防止背景亮度变化导致棋盘格过曝。我见过有人拿A4纸打印的棋盘格去标定离得近还行离到三米开外角点就完全检测不到换成A2尺寸的棋盘格一次就过了。在点云里拟合不到棋盘格平面最常见的原因是打印纸太薄雷达扫在上面几乎没有有效点。解决办法是贴到硬纸板或亚克力板上让平面有一定厚度和反射率雷达点才会稳定地落在上面。另一个原因是距离太远低线束雷达在十米外的棋盘格上只有寥寥几根线平面拟合自然失败一般控制在五米以内效果最好。5.3 运行期与显示相关的坑运行Runtime Manager时窗口打不开或按钮点不动先确认DISPLAY环境变量在当前用户下正常。用Docker时这个现象更常见因为容器里没有X11权限。解决办法是启动容器时把宿主机的X11 socket挂载进去-e DISPLAY$DISPLAY和-v /tmp/.X11-unix:/tmp/.X11-unix缺一不可。还有一类坑是标定好了之后重启Autoware发现外参又变回默认值这是因为YAML没有写进实际加载的TF配置文件。Autoware的TF配置在Setup页签里标定结果必须通过TF把camera和velodyne的坐标关系连起来融合模块才能拿到新外参。很多人标定完直接关掉工具就走了等于白干。最后说说时间同步。相机和雷达的触发时间不同步标定时采集到的同一帧其实来自两个时刻的采样棋盘格一旦有微小移动约束就带上了误差。官方工具没有强制时间同步所以自己采集数据时尽量用支持硬件同步的传感器组合或者让车辆和棋盘格完全静止再采。如果只能软件同步用ROS的approximate time策略对话题做同步能把大部分问题缓解掉但硬件同步始终是根治方案。在Autoware官方入门这条路上版本选型、安装方式、话题和TF、标定质量这四件事其实是互相纠缠的。我自己最深的体会是别急着把锅甩给算法先把环境基座一次性搭对把话题和TF链路摸清楚标定质量才有意义。按照这个顺序走下来你会发现自己绕过的弯路其实都是前人在文档里没写透的那些细节。
返回列表