ROS智能车激光雷达SLAM建图入门:从开机到gmapping跑通 简介ABOT-M1-ATK快速上手指南面向备战中国机器人及人工智能大赛、全球校园精英人工智能算法大赛巡航赛项的参赛者以及初学ROS机器人导航的高校学生与指导教师。文档以激光雷达建图、无人车路径规划、视觉与语音识别为主线把设备开机自检、远程桌面接入、功能包目录结构等环节串成从零上手到独立调试的完整链路。压缩包仅含1个文件为PDF格式约2.3MB篇幅精炼便于在手机或电脑上随时翻阅对照实操。已有576人学习下载在同类竞赛智能车资料中有一定认可度。读者可据此完成激光雷达障碍物检测与场地地图创建、保存地图并设定目标点实现自主巡航还能对比Gmapping、Hector、Cartographer三种SLAM方案的建图效果射击模块、USB摄像头视觉、TTS语音播报等扩展功能的启动命令与验证方法以及取放机器、充电维护、禁止私拆等安全事项也一并收录可作为赛前联调与排错的随身手册。1. 先弄明白这台小车是什么一台会自己看路、自己找路的 ROS 智能车很多人第一次听到「智能车」和「ROS 激光雷达建图」脑子里浮现的是实验室里一堆飞线和示波器觉得这事离自己很远。其实不是。ABOT-M1-ATK 是一台厂家已经装好的整机四轮底盘、激光雷达、相机、语音模块全在车上系统里预装了 ROS你插上电就能用。它最基础的三件事是让激光雷达把一间屋子扫成一张地图在地图上点一个点让车自己开过去用相机认出前面是什么。这三件事分别叫建图、导航和视觉识别。它适合完全没碰过硬件的零基础新手也适合要拿它去参加机器人竞赛的在校学生。你不用会焊板子、不用会造车会敲几条命令、看得懂终端里蹦出来的字就能让它动起来。2. 为什么建议从一台实体智能车入门 ROS看得见的效果比背概念更管用新手学 ROS 最常见的路数是在电脑上装一套环境跟着教程敲命令屏幕上滚过一堆看不懂的字符然后就没然后了。问题不在于你不努力而在于屏幕里没有物理世界——传感器没有真正在转车没有真的撞到桌腿你所有的输入都没有一个可以验证的反馈。智能车这种实体设备最大的价值是把抽象的软件概念变成「我推了一把椅子地图上多了一团黑」这种立刻能看见的因果关系。这一章先把这条链路讲清楚再告诉你上车前该补哪三样底子。2.1 只在电脑屏幕里敲 ROS新手最容易卡在哪三处第一处卡点是话题。教程让你敲rostopic echo你确实看到一串数字在滚但那些数字从哪来、代表什么、改一下会怎样全靠想象。话题在 ROS 里就是一根广播频道有人在里面喊话有人负责听。问题是在纯软件环境里「喊话的人」是你自己造的一个假节点它喊什么都不奇怪你自然学不会判断对错。第二处卡点是坐标变换圈内人常叫它玄学。为什么地图是一套坐标、车体是一套坐标、雷达自己还有一套坐标三套坐标之间怎么换算教程里画几个箭头就说完了你真上手的时候完全不知道从哪查。等你有一台车把雷达装在车头偏右的位置你就会立刻明白雷达看到的「前方两米」跟车体中心的前方两米本来就不是同一个点不换算就会撞墙。第三处卡点是参数。在仿真里把速度上限从 0.5 改成 2.0屏幕上的小人跑快了一点你没有恐惧感在真车上改这个数车会直接窜出去撞墙。硬件给你的约束感是任何仿真都给不了的。所以如果你手上有这么一台车别先去啃理论先把它开起来。2.2 这台车的四块能力正好对上 ROS 入门的四条主线这台车不是一个整体概念它是四套可以分别练手的能力拼起来的。每一块都对应 ROS 入门的一个核心知识点你把四块都跑一遍ROS 的骨架基本就摸清了。车上模块你实际会碰到的 ROS 概念新手第一个要练的动作激光雷达话题通信、点云数据、SLAM 建图把一间屋子扫成一张地图底盘与轮子速度指令、里程计、坐标变换用键盘把车沿直线开出去再开回来相机图像话题、可视化工具在屏幕上看到实时画面语音模块话题发布、语音合成节点让车念出一句话激光雷达对应的是「数据从哪来」。雷达每秒转很多圈每圈打出去一批点每个点告诉你这个方向多远有障碍。这些点会发布到一个固定的话题上建图算法就订阅这个话题。你以后不管是换建图算法还是做避障走的都是同一套流程找话题、看数据、接算法。底盘对应的是「命令怎么下发」。你要让车动本质上是往速度话题里塞一条带线速度和角速度的指令底盘驱动收到之后就转轮子。这条链路短、反馈快特别适合新手做第一个闭环实验。相机和语音对应的是「其他传感器怎么接进来」。它们的套路和雷达一模一样都是一路数据发布出来你在另一端订阅。学会一个剩下两个基本靠类比就能通。2.3 上车之前先补三样底子一个星期够用不用等学完才动手这三样边用边补就行但至少要认识它们。第一样是 Linux 终端的基本操作。你不需要成为命令行高手但cd进目录、ls看文件、按 Tab 自动补全、按 CtrlC 掐掉一个跑飞的程序、按上下键翻历史命令这五个必须熟。车上所有操作都是在这个黑框框里敲出来的不熟就会寸步难行。第二样是能看懂 Python。不是会让你写是给你一段代码你能大致猜出它在干什么变量、列表、循环、函数、缩进。因为 ROS 里很多节点是用 Python 写的你要改参数、改逻辑绕不开它。第三样是一点点坐标方向感。记住一句话就够了车头朝前是 x 正方向车的左手边是 y 正方向车头向左偏转的角度叫航向角。后面讲建图和导航的时候你会反复用到这三个方向。# 打开一个终端先确认 ROS 环境已经加载能打印出一串路径就说明没问题 printenv | grep ROS # 看看系统里现在有哪些话题在发数据车没启动时这个列表很短 rostopic list # 查看某个话题是谁在发、谁在收用来排查数据断流特别有效 rostopic info /cmd_vel这三条命令值得你现在就敲一遍。第一条看的是环境变量环境不对后面所有命令都会报「找不到包」第二条看的是数据全景你会慢慢养成「先看有什么再接什么」的习惯第三条看的是数据流向当车不动的时候用它能一眼看出是没人发指令还是发了没人接。新手排查问题的第一直觉就应该建立在这三条命令上而不是急着重装系统。3. 第一次开机从抬箱子到远程连上一步一步走真正把车拿出来那天最容易出问题的地方往往不是软件而是手。很多人第一反应是拎着雷达那块往上提那玩意儿是机械旋转结构被拽一下内部轴承可能就废了而换一个的钱够你心疼很久。这一章按时间顺序走先讲手怎么放、电怎么充再讲开机顺序然后讲怎么把车「搬」到自己的电脑屏幕上最后带你认一认系统里那四个文件夹是干什么的。3.1 抬机器、充电、存放开机前必须守住的几条硬规矩抬车的时候双手放在前后轮胎之间的位置往上托这是整台车结构最结实的地方。不要抓雷达不要拎线不要单手侧提。把车放到地面上时也要轻放四个轮子同时着地别让某一侧先磕下去。激光雷达上方不要压任何东西。这一条不是怕压坏而是怕遮挡。雷达是水平旋转扫描的上方压个盒子、贴张纸扫描平面就会被切掉一块建图的时候那一块会变成一片空白你会以为是算法出问题其实是自己放了个东西。不要往车身上倒任何液体。学习和调试的时候也不要用手或者尖锐物体去碰相机镜头指纹和划痕都会让视觉识别的画面变糊而且这种损伤肉眼很难第一时间发现等发现的时候往往已经排查了半天。提示电量显示只剩一格的时候就去充电别等关机。充电器用 DC12.6V/2.0A 的那种充电时背面亮红灯充满变绿灯。如果半个月以上不用也要拿出来补一次电长期亏电的电池可能直接充不进去那时候就没有后悔药了。最后一条是别私自拆。车上模块之间的连接和标定是有讲究的拆开再装回去雷达的外参可能就变了建图和导航全会跟着歪。真出问题先联系提供方别自己上螺丝刀。3.2 上电顺序先显示后主控这台车有两个开关顺序别搞反。先接显示、后开主控这样主控一开机就能识别到显示设备画面直接出来不用你再热插拔 HDMI 线。热插拔在部分板子上会引起花屏新手遇到这种画面会以为机器坏了。具体步骤是这样把车上的 HDMI 线接到那块 10 寸显示器上。给显示器供电确认屏幕亮起、有信号输入提示。按下车身电源开关等 5 秒左右让供电稳定。按下主控制器开关等系统开机完成。第 3 步那个 5 秒不要省。底盘和主控共用一套电源主控启动瞬间电流会有波动等供电稳了再开主控能避免一些莫名其妙的启动失败。开机完成后你会看到一个桌面环境说明系统正常。3.3 用远程桌面把小车「搬到」自己的屏幕上接着显示器、鼠标、键盘蹲在地上调车是很折磨人的姿势。正确做法是远程连上去让车的画面出现在你的笔记本屏幕上人坐在椅子上操作。整个过程分四步。第一步让车上先连上网络。点开系统的网络设置选一个 wifi 输入密码。没有路由器就用手机开热点名字尽量用英文中文热点名在部分系统上会显示成乱码连上了也不稳定。第二步在你的电脑上装一个远程桌面工具装好打开备用。第三步在车上的桌面找到同一个远程桌面软件打开它界面上会显示一串识别码和临时验证码。每台设备的识别码都不一样以你这台车上显示的为准别照抄别人的。第四步回到你的电脑输入这组识别码和验证码点连接。连上之后车的桌面就整个搬到你屏幕上了鼠标键盘都能直接用。# 在车上开一个终端看看网络有没有真的连上找到 inet 后面那串地址就说明拿到了 IP ip addr show # 记下这个地址。远程连不上时第一步永远是回到这里确认网络还在 ping -c 4 一个你能访问的地址这两条命令是给你排查用的。远程桌面偶尔会掉掉的时候你第一反应可能是软件坏了其实十次里有七八次是车上的 wifi 断了或者热点关了。先看网络再看软件这个顺序能省下大量时间。另外识别码和验证码会变每次连接前都回车上确认一眼别拿昨天的码反复试。3.4 认一认四个工作空间功能包都藏在哪系统桌面上点开文件管理你会看到几个名字相似但用途不同的文件夹。新手最容易在这里迷路因为后面所有的脚本和启动文件都散落在它们里面。robot_ws是机器人配置相关的工作空间底盘驱动、各模块驱动、还有一些综合演示功能都放在这是最核心的一个。lidar_ws管激光雷达和导航相关的功能。abot_vision是视觉相关的工作空间。abot_voice是语音相关的工作空间。可以把它想成四个抽屉底盘和整体调度在第一层雷达和导航在第二层视觉在第三层语音在第四层。每个抽屉里都有一个src文件夹真正的功能包就放在src下面。你现在不用记住每个包叫什么只要知道「找某个功能的代码先去对应的抽屉里翻」就够用了。注意以后看到命令里出现roslaunch 某某包名 某某.launch那个包名就是某个抽屉里的一个文件夹。跑不起来的时候先去四个src里搜一下这个名字在不在能快速判断是环境问题还是名字打错了。4. 第一个能跑通的例子让激光雷达把你所在的房间画成一张地图前面都是铺垫这一章是真正动手的部分。选建图作为第一个例子是因为它的反馈最直观你推着车走一圈屏幕上就长出一张图成就感来得快而且它把雷达、底盘、算法、可视化四件事全串起来了。整个过程不需要你写一行代码只要会敲命令、会按键。做完这一步你对 ROS 的很多概念会突然通掉。4.1 建图到底在做什么一边走一边画回头还要对得上想象你被蒙上眼睛放进一个陌生房间手里只有一根手杖。你每走一步就用杖敲一圈记住「这个方向一米有墙」「那个方向两米是空的」走完一圈把脑子里的记录画成一张平面图。激光雷达干的就是敲杖这件事它每秒转好几圈每圈打出去几百个点每个点回一个距离值。难点在于你在移动。你走到第二个位置时看到的墙和第一个位置看到的墙得拼到同一张图上还要拼得准。这就要求车知道自己走了多远、转了多少度这个信息来自轮子上的编码器叫里程计。里程计会漂移走久了误差会累积所以算法还要拿当前看到的墙去和刚才的图比对反过来修正自己的位置。这套「一边定位一边建图」的流程就是常说的 SLAM。gmapping、hector、cartographer 是三种不同的实现思路效果和适用场景各不一样。新手先用 gmapping它对里程计依赖适中、参数少、上手快等你有感觉了再去对比另外两个。4.2 三条命令跑起 gmapping再用键盘把车开一圈准备工作有三件把车放到地面上别放在桌子上悬空记录下车现在的位置最好是地砖的某个角或者贴个胶带做个记号后面导航要用确保电量充足建图跑到一半没电地图就白建了。最省事的方式是直接用厂家给的脚本。在车的桌面上右键打开终端执行脚本# 进入脚本所在目录一般在桌面或者用户主目录用 ls 看一眼在不在 cd ~/Desktop # 给脚本加上执行权限第一次跑通常会提示 permission denied就是缺这一步 chmod x 1-gmapping.sh # 执行脚本它会一次性拉起底盘驱动、雷达驱动和建图节点 ./1-gmapping.sh脚本里做的事其实就是下面这三条命令只是被打包到一起了。建议你手动跑一遍因为这三行是 ROS 里最典型的启动结构理解了它后面视觉、语音、导航全是同一个套路。# 第一步起底盘和雷达让传感器开始发数据这一步是「谁提供数据」 roslaunch abot_bringup robot_with_imu.launch # 第二步起 gmapping 建图算法它订阅雷达数据一边走一边发布地图 roslaunch robot_slam gmapping.launch # 第三步起可视化界面让你能在屏幕上看见地图一点点长出来 roslaunch robot_slam view_mapping.launch三行命令对应三个角色供数据的、算数据的、看结果的。它们必须按顺序起因为后一个要订阅前一个发布的话题顺序反了会订阅不到界面上就是一片空白。每条命令都要单独开一个终端窗口别在一个窗口里连着敲因为roslaunch启动后会一直占着终端不返回。起来之后先别急着开检查一下数据通不通# 看雷达有没有在发数据正常会刷出一屏角度和距离数字CtrlC 退出 rostopic echo /scan # 看看地图话题在不在能看到 /map 就说明建图节点已经就位 rostopic list | grep map/scan是雷达的话题名/map是地图的话题名这两个名字在绝大多数 ROS 机器人上是通用的。如果/scan没数据说明雷达驱动没起来或者线松了如果有数据但/map一直不出现说明建图节点没起来回去看第二个终端的报错。4.3 键盘怎么开车一张按键对照表建图的时候你要手动把车开一圈用的是键盘遥控。终端里会打印出一张按键说明以它为准下面是通用布局按键动作开启大写锁定时I直行前进直行前进U左前方向左平移O右前方向右平移J原地左转向左平移L原地右转向右平移M左后方向左后平移逗号直行后退直行后退句号右后方向右后平移K立刻停止立刻停止先说清楚一件事不同版本的遥控程序键位会有细微差别所以每次启动先看终端打印的提示别背表。表的作用是让你有个预期知道大概有哪几种运动方式。然后说建图的走位技巧这是纯经验教程里一般不写。第一慢。速度调低宁可十秒走一米也别嗖一下冲过去。雷达扫的是离散的点走太快点与点之间间隔大墙就对不齐。第二少急转。原地猛打方向里程计误差会瞬间放大地图容易拧成麻花。第三走闭合路线。从一个角出发绕一圈回到同一个角如果地图上首尾能对上说明建图质量不错对不上就是漂了。第四让人走开。你站在车旁边你的腿会被雷达扫进去地图上会凭空多出两根柱子。4.4 保存地图与查看节点信息走完一圈觉得地图差不多了就可以保存。注意建图过程中不要关终端一关节点就停了图也就没了。# 建完图后新开一个终端执行保存命令会生成一张图片和一个配置文件 roslaunch abot_slam save_map.launch # 想确认刚才那个脚本到底起了哪些节点直接打开它看一眼 cat 1-gmapping.sh保存下来的地图通常是一对文件一张图片画着哪里有墙、哪里是空地、哪里是未知区域一个配置文件记录这张图的分辨率、原点位置这些信息。导航的时候两个文件都要用少一个都加载不了。所以保存完去文件夹里确认一下是不是两个都在别只拷了图片就走。cat那条命令是给你养成习惯用的。厂家的脚本看起来像黑盒其实打开就是几行roslaunch和rosrun跟上面手敲的一模一样。新手最值得培养的能力就是遇到脚本先打开看看而不是把它当黑匣子。看多了你会发现所有模块的启动逻辑都是「驱动 算法 可视化」这三段式。4.5 地图画歪了、糊了先查这四个地方地图出问题先别怀疑算法八成是物理层面的原因。第一种地图上有一大片空白扇形。这基本可以确定是雷达被遮挡了上方压了东西、贴了标签、或者线束挡住了扫描面。把雷达周围清空重新建。第二种墙是双层的或者墙线糊成一片。这是走得快或者转得急导致的点云对不齐。降速、少原地转、转弯的时候多停一下让雷达多扫几圈。第三种地图首尾对不上绕一圈回来发现起点位置偏了半米。这是里程计漂移地面太滑、轮子打滑、或者电池电压低导致电机转速不稳都会引起。换个粗糙点的地面充满电再试。第四种地图中间莫名其妙多了几根柱子。回头看看你刚才站哪了。人的腿、椅子的细腿、垂下来的桌布都会被扫进去。建图的时候人退到场地外面去。5. 新手最容易翻车的五个地方现象、原因和补救办法这一章单独拎出来是因为下面这几件事几乎每个新手都会遇到至少一次而它们的表现往往很像「机器坏了」实际上是操作问题。每条都按「你看到什么、为什么会这样、怎么办」来讲遇到的时候对照着排查比盲目重装系统高效得多。第一个坑远程桌面连不上提示设备不在线。现象是你输入识别码转了两圈提示连接失败或者干脆连界面都刷不出来。原因绝大多数是车上的网络断了手机热点自动关了、wifi 密码改了、或者车跑远超出了信号范围。少数情况是远程软件在车上没启动。解决办法是接上显示器看系统托盘里的网络图标重新连一次 wifi然后回车上重新打开远程软件确认识别码有没有变。这里有个血泪经验调试期间把手机热点的「自动关闭」关掉很多人被这个设置坑过半小时。第二个坑脚本敲下去没反应或者报权限不足。现象是你输入./1-gmapping.sh终端回一句 permission denied或者提示找不到命令。原因有两个一是脚本没有执行权限二是你根本不在脚本所在目录./的意思是「当前目录下的这个文件」目录不对自然找不到。解决办法是先ls看一眼文件在不在再chmod x 文件名加权限最后确认你敲的路径和ls显示的一致。文件名里的横杠、下划线、大小写有一处不一样就跑不起来。第三个坑地图越走越歪绕一圈回来对不上。现象是刚开始还挺准走着走着墙就斜了回到起点时整张图错开一大截。原因是累积误差轮子打滑、地面光滑、转弯太猛都会让里程计报的位移和实际位移对不上。解决办法是降速、减少原地急转、换一块粗糙地面、把电充满。如果还是歪可以换 cartographer 试一次它在回环修正上更积极一些能明显看出差别。第四个坑导航点了目标点车纹丝不动。现象是你在界面上点了「2D NAV goal」在地图空白处画了个箭头车一点反应都没有。最常见的原因是车没放回建图时的起点。导航需要先知道自己在哪它的做法是拿当前雷达看到的东西去和地图比对如果实际位置和建图起点差太远它就对不上自然不敢动。解决办法是把车放回你建图时做记号的那个位置朝向也尽量一致然后重启导航。其次要检查地图文件是不是两个都在只拷了图片没有配置文件同样加载不了。第五个坑射击模块打不出水弹。现象是命令敲了、声音也响了就是不见弹出来。原因基本是两个水弹泡发时间不够或者弹仓卡住了。水弹要用矿泉水泡足 8 小时以上泡不够就是小硬粒进不了弹道。装弹的时候慢慢倒别一把怼进去。还有一个容易忽略的点射击模块有独立的电源开关得先打开。安全上必须强调任何时候枪口都不要对着人和贵重物品这条没有例外。6. 跑通之后学什么从「会开」到「会改」的四步路线建图跑通只是拿到了入场券。接下来最容易犯的错是马上跑去啃 SLAM 的数学推导然后被一堆概率公式劝退。更顺的路子是把车上的功能逐个跑一遍边跑边改改出问题再回头查原理。第一步把剩下的测试全过一遍大概一周。视觉用roslaunch usb_cam usb_cam_test.launch起驱动再开一个终端跑rosrun rqt_image_view rqt_image_view屏幕上能看到实时画面就说明通了。语音先起roscore再跑rosrun robot_voice tts_subscribe然后往语音话题里发一条字符串蓝牙耳机里应该能听到念出来的内容。射击按上一章说的顺序来。全部过一遍的意义在于你会确认每个模块的驱动都是好的以后出问题能快速排除硬件因素。第二步读 launch 文件一到两周。随便挑一个.launch打开看它启动了哪几个节点、每个节点传了哪些参数。重点盯三个东西节点名、订阅的话题名、参数值。这一步做完你会发现所有的启动文件长得都差不多只是换了个包名和话题名。第三步横向对比三种建图算法。同一块场地、同一条走位分别用下面两条命令各建一次图然后比一比。# hector 建图不依赖里程计雷达数据质量好的时候效果很稳但走快了容易飘 roslaunch abot_slam hector_mapping.launch # cartographer 建图带回环检测绕回起点时能自动修正代价是启动慢、占资源 roslaunch abot_slam cartographer.launch算法依赖里程计走快了会怎样适合什么场景gmapping中等墙线开始糊新手第一次建图、小场地hector低位置容易飘雷达数据干净、场地规整cartographer高回环能拉回来大场地、需要闭合精度这张表不是让你背是让你带着假设去做实验。先猜 hector 走快了会飘然后故意走快一次看是不是真的飘。这种「先预测再验证」的练法比看十篇原理解析记得都牢。第四步改一个参数或者写一个小节点。最简单的入手点是改速度上限看车的行为怎么变再进一步写一个 Python 节点订阅雷达话题算出正前方最近障碍的距离并打印出来。这个节点不到三十行但写完之后你就真正跨过了「只会运行别人的东西」这道坎。我自己的习惯是这样的每次上车之前不管多急都强制走一遍「电量看一眼、雷达上方清空、初始位置对准记号」这三步。这三件事加起来不到一分钟但我有次省了这一分钟建图建到一半没电一上午白干重新来的时候连场地都被人挪了。从那以后我就再也没跳过。希望帮到你。本文还有配套的精品资源点击获取