简介这份PDF是面向中国机器人及人工智能大赛、全球校园精英人工智能算法大赛智能车巡航赛项的ABOT-M1-ATK快速上手指南适合ROS初学者、竞赛队员与指导教师用于设备调试和功能验证。压缩包仅含1个PDF文件约2.3MB篇幅紧凑便于随车查阅。内容围绕激光雷达建图、机器人导航、视觉识别、语音交互与射击模块展开给出从开机、远程桌面连接到各功能测试的完整终端指令和操作流程并说明SLAM建图、保存地图、设置导航目标点等关键环节。文中还整理了abot_vision、abot_voice、lidar_ws、robot_ws等功能包的作用与启动方式附带取放机器、充电维护、禁止拆解等安全注意事项可帮助读者快速搭建测试环境、理解无人驾驶与机器人导航的基本链路。已有576人学习适合作为竞赛准备与课程实践的入门参考。1. 从一台装在箱子里的 ROS 竞赛车说起拆开 ABOT-M1-ATK 包装的那一刻多数人第一反应是去看激光雷达和那几个扩展模块而不是先翻手册。结果第二天就在群里看到有人问为什么建图建一半雷达没数据了、为什么导航点上去车原地打转。这台车的硬件配置在同价位里算齐的——激光雷达、深度相机、语音板、射击模块、带 IMU 的底盘一台整机把 ROS 竞赛里常见的几种传感器都串起来了巡航、建图、导航、视觉识别、语音交互这几个典型赛项基本都能覆盖适合拿去打机器人及人工智能类比赛也适合拿来做无人驾驶课程的实操平台。真正卡人的从来不是硬件而是这些模块的启动顺序和相互依赖关系——这篇笔记按「硬件启动 → 建图 → 导航 → 模块联调」的路径走重点放在参数和坑上。2. 启动链路与远程桌面不接显示器也能把车开起来多数人第一次接触 ABOT-M1-ATK 是把它接到实验室那台 10 寸 HDMI 显示器上折腾但实际比赛和调试现场没人愿意抬着屏幕跑。官方给的上手路径是先接屏确认状态再由远程桌面接管。这一章把启动顺序、网络形态、远程工具和工作空间布局一次说清后面建图和导航都默认你在这套环境下操作。2.1 上电顺序与硬件启动要点整车启动的核心就两步底盘电源和主控制器。顺序错了经常出现主控起来了但底盘驱动没加载、雷达上电半天没数据之类的问题血泪经验是先外设后主控。双手从前后轮胎之间的位置把车抬到平整地面不要用手抓激光雷达外壳——雷达内部是旋转机构抓一下就可能偏把 HDMI 线接到 10 寸显示器并给显示器独立供电按下底盘电源开关等 5 秒左右再按主控制器开关等到系统完全进入桌面。这个 5 秒间隔不是玄学等的是底盘控制板把 IMU 和编码器驱动都初始化完、串口节点就绪主控再起来才能正常发现设备。跳过这一步的常见表现是robot_with_imu.launch起来后/odom没数据或者雷达点云出现几十秒后才刷新。2.2 远程桌面接入向日葵的用法和需要提前想清楚的点主控开机进桌面后第一件事是联网。比赛中经常没有现成路由器最省事的做法是用手机开热点让车连上再让电脑连同一个热点。这样电脑和车在一个内网里远程工具才有可用的通道。然后在车的桌面打开向日葵助手看左下角图标弹出的识别码和验证码电脑端装好向日葵助手同样联网后填这两项就能远程接管桌面。这里有几个容易被忽略的现场问题每台车的识别码不同不要拿隔壁工位的账号去试会连到别人机器上热点频段最好固定2.4G 比 5G 稳定机器人在场地里走动时信号衰减小远程画面延迟和网络有关遥控键盘操作时感觉「按键没反应」大概率是延迟不是按键无效先等 1~2 秒再判断接了 HDMI 显示器时也建议顺手把远程桌面开着出问题时显示器上还能看到终端输出。2.3 四个工作空间分别管什么进去之后点开文件管理器看下home目录会发现四个 ROS 工作空间。这个结构设计得比较清晰也决定了你后面启动每个功能应该去哪个目录source工作空间主要功能常见入口包abot_vision视觉识别、相机驱动与图像处理usb_cam、视觉 demoabot_voice语音识别、TTS 播报robot_voicelidar_ws激光雷达驱动、SLAM、导航abot_slam、robot_slamrobot_ws底盘驱动、IMU、综合 demoabot_bringup建图、导航、语音、视觉的启动都依赖robot_ws里的底盘 bringup所以常规操作是先在一个终端sourcerobot_ws/devel/setup.bash起底盘再开新终端做上层任务。这一点在后面每一节的实操里都会体现。启动底盘 bringup 通常是这样# 终端 1启动底盘 IMU 雷达 source ~/robot_ws/devel/setup.bash roslaunch abot_bringup robot_with_imu.launchrobot_with_imu.launch会同时拉起底盘串口节点、IMU 节点和雷达驱动是后面所有建图、导航、视觉任务的公共前置。命令里没有额外参数是因为厂家已经把串口号和雷达型号写进了 launch如果你换过 USB 口、串口号变成ttyUSB1就得去改 launch 里的port_name否则节点连不上、/scan不起来。3. 激光雷达建图Gmapping、Hector、Cartographer 三选一车能动了之后马上会遇到第一个真正的选择题手册里给了三种 SLAM 算法到底用哪个。三种都跑一遍会发现效果差异不小而且各自适合的场景也不一样。这一章先把三者的原理差异讲清再落到键盘遥控 地图保存的具体命令。3.1 三种算法的原理差异与选型判断Gmapping 是粒子滤波方案靠里程计 雷达的联合观测来估计位姿粒子数越多精度越高但也越吃 CPU。它的强项是在有轮式里程计、场地特征相对固定的场景里建图质量稳定弱项是快速转向或雷达被遮挡时粒子权重会抖地图容易糊边。ABOT-M1-ATK 出厂带编码器和 IMU里程计质量还可以所以 Gmapping 是默认首选。Hector 只用雷达数据做扫描匹配不依赖里程计好处是纯雷达就能建图、爬坡或打滑时也能出图代价是没有回环检测走一大圈回到起点地图可能对不上。它适合在短距离、结构特征明显的室内环境快速出图比如一个房间、一段走廊。Cartographer 是图优化方案带子图和回环检测长时间大范围建图的地图闭合质量最好但配置复杂、CPU 占用也高跑到一半死机或者建图卡顿多数是资源没配好。适合比赛场地大、需要一次建完整场的场景。一句话选择室内单房间用 Hector 图快整层楼用 Gmapping 稳大场地要闭环上 Cartographer。我一般先用 Hector 快速出一版看场地结构确认没问题再换 Gmapping 精修最后保存。3.2 Gmapping 建图实操从启动到地图保存先说 Gmapping因为它是本章后面导航能直接用的默认地图来源。流程分五步底盘 bringup、SLAM 节点、可视化、遥控打点、保存地图。# 终端 1底盘 IMU 雷达 source ~/robot_ws/devel/setup.bash roslaunch abot_bringup robot_with_imu.launch这个节点起来之后/scan、/odom、/imu三个话题应该都有数据用rostopic hz /scan能看到 10Hz 左右的点云频率。# 终端 2Gmapping SLAM 节点 source ~/lidar_ws/devel/setup.bash roslaunch robot_slam gmapping.launchgmapping.launch里最关键的两个参数是particles粒子数默认 30 左右场地越复杂可以调到 80和delta地图分辨率默认 0.05 米/格。粒子数不是越大越好超过 100 后建图速度会明显下降。# 终端 3可视化 source ~/lidar_ws/devel/setup.bash roslaunch robot_slam view_mapping.launch这个节点只是把map、scan、tf一起显示出来方便确认雷达点云和机器人位姿是否正常融合。如果图里点云是散乱的、和地图对不上先别急着走车去看/tf中base_link到laser的变换是不是有效。# 终端 4键盘遥控 rosrun teleop_twist_keyboard teleop_twist_keyboard.py遥控键盘的U/I/O是前左/前/前右J/L是左右转M/,/.是后左/后/后右大写开启后U/O变成左前右前平移变成左后右后平移。走车速度建议先放在 0.15~0.25 m/s太快里程计跟不上地图会糊。建完图不要关终端直接新开一个source ~/robot_ws/devel/setup.bash roslaunch abot_slam save_map.launchsave_map.launch会同时把map.pgm和map.yaml输出到指定目录通常是~/lidar_ws/src/abot_slam/maps/。作为血泪提醒每建完一版图就立刻改名存一份直接覆盖map.pgm是新手常见的翻车现场等你想回退到上一版才发现没得选。3.3 Hector 与 Cartographer切换方式和各自参数Hector 的场景最好用在一个房间或一段走廊缺点是纯雷达匹配对快速旋转敏感# 底盘 bringup 之后 source ~/lidar_ws/devel/setup.bash roslaunch abot_slam hector_mapping.launch # 新终端 roslaunch abot_slam view_mapping.launchhector_mapping.launch有两个常改的参数map_resolution默认 0.025比 Gmapping 更细和map_update_distance_thresh平移超过多少距离才更新地图调小更新快但地图抖。走车要比 Gmapping 更慢转向要缓否则点云错位很明显。Cartographer 需要先确认雷达话题和 TF 配置然后source ~/lidar_ws/devel/setup.bash roslaunch abot_slam cartographer.launch建图完成后同样roslaunch abot_slam save_map.launch保存。注意 Cartographer 的/map输出频率比 Gmapping 低可视化那边看起来「更新慢」是正常的不代表卡住。上次有人在建图时看到画面 3 秒才刷一次就强行 Ctrl-C其实再等半分钟地图就完成了很可惜。三种算法在遥控方式上都指向teleop_twist_keyboard但底层订阅的 cmd_vel 话题一样可以中途切算法——只要先把上一份地图存好重启 SLAM 节点即可。不要在两份 SLAM 同时跑的时候切换会出现 TF 树里两个map - odombroadcaster整个系统判位直接乱。4. 导航栈落地从地图加载到 2D Nav Goal 的完整调试地图存好之后下一步是让车在图上自主走到指定位置。导航栈涉及map_server、amcl定位、move_base、全局和局部代价地图这几层每一层参数没配对都会出现导航不动、原地打转或冲障碍物的现象。这一章把启动链路、参数含义、失败表现逐一拆开。4.1 导航栈的启动链路导航的启动命令有三条按顺序执行比一次性写完三条更稳# 终端 1底盘 source ~/robot_ws/devel/setup.bash roslaunch abot_bringup robot_with_imu.launch# 终端 2move_base amcl map_server source ~/lidar_ws/devel/setup.bash roslaunch robot_slam navigation.launchnavigation.launch内部会 includemap_server加载你刚保存的map.yaml、amcl激光定位、move_base路径规划。它默认的地图路径是~/lidar_ws/src/abot_slam/maps/map.yaml如果你换过地图文件名或者改过保存目录这个参数必须同步改否则起来之后/map是空的Rviz 里什么都没有。# 终端 3可视化 source ~/lidar_ws/devel/setup.bash roslaunch robot_slam view_nav.launchRviz 里要检查的三件事/map话题有没有显示完整地图/scan点云是否和地图墙面重合车模型base_link初始位置和实际摆放位置是否一致。第三条最容易翻车——你把车放偏了 20 公分没在意起始定位就全歪了导航点上去之后车会「先横着走一段再纠正」甚至原地打转。4.2 代价地图和 move_base 关键参数导航能不能跑顺取决于move_base里全局和局部代价地图是否合理。厂家给的默认参数为了兼容多场景通常偏保守参数默认值调整方向inflation_radius0.3~0.5场地窄时调小靠墙贴边cost_scaling_factor5.0调大让车更远离障碍max_vel_x0.3~0.5场地拥挤时降一档acc_lim_x1.5起步顿挫大就降到 0.8xy_goal_tolerance0.15二次定位精度不够时放到 0.25inflation_radius是整个导航里最敏感的参数之一。设大一点车会绕开障碍物远远地走路径很「胖」狭窄走廊里容易报No global plan设小一点又容易蹭墙。一手经验是窄门先把 inflation_radius 从 0.5 降到 0.3走开阔场地再调回 0.5同一个场地一般不需要反复改改一次存下来就行。amcl的定位参数要注意initial_pose的设置通常navigation.launch里会默认在原点初始化你摆放机器人的位置不在原点时得在 Rviz 里用2D Pose Estimate手动给一次初始位姿等/amcl_pose跟实际位置基本一致后再发导航点。跳过这一步的话 AMCL 的粒子云会乱飞导航表现成玄幻——有时走得很准有时出门就撞。4.3 2D Nav Goal 实操与失败判读在 Rviz 里点2D Nav Goal然后在地图空白处按住拖一段方向松手就出发。第一次导航点上去之后重点看三个现象车不动看终端里move_base有没有打出 Failed to find a valid control 或者 No plan found前者是局部代价地图被堵死把 inflation 调小或者把旁边的虚拟障碍去掉后者是全局路径不通目标点在障碍物里或者地图边界上车原地打转多半是amcl定位不准粒子云收敛到墙上去了重新用2D Pose Estimate纠正或者把车关掉推回原位重启导航车走到中途停住终端里看recovery_behavior是否触发——它会尝试清理代价地图、原地旋转重新定位如果持续失败就报 Aborting recovery这时候大概率是雷达被某个障碍遮住、或者地图某处建得不对。有一个我在课上讲过好几遍的技巧第一次跑新地图不要直接打远端导航点先绕车一圈近距离打几个小目标让 AMCL 收敛好粒子云再打远端。直接奔远端的话一开始定位有偏差等车跑到一半才发现路径已经飘出地图整个恢复行为要重来一遍。5. 视觉、语音、射击模块联调与常见问题排查底盘、建图、导航这三块通了之后剩下的视觉、语音、射击模块看起来各自独立实际联调的时候互相抢资源、抢话题的情况不少。这一章按模块过一遍启动方法再集中列出这一路走下来最容易踩的坑。5.1 相机模块usb_cam 与 rqt_image_view 验证视觉模块最简验证就是能出画面# 终端 1底盘 bringup 后 source ~/robot_vision/devel/setup.bash roslaunch usb_cam usb_cam_test.launchusb_cam_test.launch里关键是video_device默认/dev/video0和pixel_formatyuyv或mjpeg如果你换过相机或者插过别的 USB 设备导致设备号变了这里要跟着改否则节点起来但/image_raw没数据。# 终端 2图像查看 rosrun rqt_image_view rqt_image_viewrqt_image_view左上角下拉框里选/usb_cam/image_raw能看到实时画面就说明相机链路正常。如果画面一片绿或者只有噪声先确认镜头保护膜有没有撕再确认pixel_format和实际相机是否匹配——这是新手翻车率最高的一处。注意相机镜头不要用手或者尖锐物体碰一旦有划痕后续做视觉识别会一直有噪点换镜头比换其他部件都麻烦。5.2 语音模块蓝牙耳机接入与 TTS 验证语音链路的启动顺序是roscore→ 蓝牙连接 → TTS 节点 → 发话题测试# 终端 1 roscore# 终端 2 source ~/robot_voice/devel/setup.bash rosrun robot_voice tts_subscribe# 终端 3发一段测试文本 rostopic pub /voiceWords std_msgs/String data: 1234耳机里能听到 1234 就说明通了。这里的玄学点在于蓝牙要先连上再起 TTS 节点反过来会出现节点起来但声音出不来。另外蓝牙耳机被其他设备抢连也很常见测试前先把手机蓝牙关掉。5.3 射击模块启动方式与安全边界射击模块要先打开独立电源开关水弹提前泡够 8 小时以上、滤掉没泡开的source ~/robot_ws/devel/setup.bash roslaunch abot_bringup shoot.launch# 新终端手动触发一次 rostopic pub /shoot std_msgs/String data: 听到声音、弹仓出水弹功能就算通过。这里必须强调一句射击方向不要对着人和易损物测试时把车朝墙或者朝沙袋周围没人在动再触发。5.4 常见问题排查五条踩过的坑这一圈下来坑不少按「现象 → 原因 → 解决」整理了一份最常被问到的清单新手照着排一遍能省不少时间。第一坑雷达不出点云。现象是view_mapping里点云一直空白rostopic hz /scan也没有输出。原因是启动顺序倒过来了主控先于底盘上电雷达驱动没绑上 USB 口。解决办法是关车重启严格按「底盘 5 秒后再主控」的顺序来如果重启还不行ls /dev/ttyUSB*看串口号是不是变了改 launch 里的port_name。第二坑建图过程中地图糊边。现象是雷达点云和墙面之间出现明显错位走一段就发现墙变成两条。原因是速度太快里程计积分滞后。解决办法是把线速度从 0.4 降到 0.2转向要缓、走直线为主如果还糊就把 Gmapping 的particles从 30 调到 60 再试。第三坑导航点上去车原地打转。现象是车不动只在原地小幅旋转。原因是amcl定位没收敛粒子云散在错误位置。解决办法是重新用2D Pose Estimate给一次初始位姿或者干脆重启导航节点让车回到建图时的原点重新定位。第四坑语音节点起来但没声音。现象是rostopic pub发出去没反应。原因是蓝牙耳机没连上或者被手机、其他设备抢了连接。解决办法是先把车和耳机重新配一次、手机蓝牙关掉bluetoothctl里确认Connected: yes再起tts_subscribe。第五坑同时起视觉和语音后系统变卡。现象是两个模块单独跑都正常一起跑就丢帧、延迟明显。原因是这两个工作空间都自动source了各自的setup.bash环境变量里ROS_PACKAGE_PATH混在一起。解决办法是分别在独立终端里source对应工作空间一个终端只跑一个模块镜像里常常需要重启才能彻底清掉。6. 进阶一次高效比赛的部署节奏与地图复用技巧到这一步车已经能建图、能导航、能跑视觉和语音剩下的是把这些模块串成比赛可用的节奏。比赛现场最耗时的不是调算法而是每一轮重新启动、重新定位、重新初始化粒子云。把几个前置动作固定下来能省下大量时间。第一个习惯是把地图按场地分目录存档不要只用默认的map.yaml。建图完成后进~/lidar_ws/src/abot_slam/maps/给每一版地图改个带日期和场地特征的名字例如map_roomA_0312.yaml、map_corridor_0315.yaml配套的.pgm一起改。启动导航时通过map_server参数覆盖默认路径即可# 用指定地图启动 navigation source ~/lidar_ws/devel/setup.bash roslaunch robot_slam navigation.launch map:$HOME/lidar_ws/src/abot_slam/maps/map_roomA_0312.yamlmap:这个覆盖参数是map_server里对外暴露的很多 launch 默认没有写你需要先去navigation.launch里给map_server加上arg namemap default$(find abot_slam)/maps/map.yaml /和对应的param namemap value$(arg map) /才能这样在命令行里覆盖。这一点厂家默认没做是我自己加的行加上之后同一台车可以随时切不同场地。第二个习惯是导航起始位姿固定化。比赛现场不要靠2D Pose Estimate手点在navigation.launch里给amcl的initial_pose参数直接设成场地的实际原点坐标node pkgamcl typeamcl nameamcl outputscreen !-- 把初始位姿直接写死在此处 -- param nameinitial_pose_x value0.0 / param nameinitial_pose_y value0.0 / param nameinitial_pose_a value0.0 / !-- 其余参数保持原样 -- /node前提是你摆放机器人的位置、朝向和建图起点严格一致为此我在场地地上贴一条美纹纸胶带做基准车每次回来对上胶带就行。比每次手动点 Pose Estimate 快得多也避免了比赛现场紧张的手抖。第三个习惯是上电后跑一遍最小验证脚本。不需要人盯着屏幕逐个话题确认写一个简单的check.sh#!/bin/bash # 最小启动自检底盘、雷达、IMU、相机、语音节点是否都活着 source ~/robot_ws/devel/setup.bash # 底盘与雷达 rosnode list | grep -q abot_bringup echo 底盘 OK || echo 底盘 FAIL rostopic hz /scan 2/dev/null | head -n 3 # IMU rostopic echo -n 1 /imu/data /dev/null echo IMU OK || echo IMU FAIL # 相机 rostopic hz /usb_cam/image_raw 2/dev/null | head -n 2这个脚本不是厂家给的是自己一遍遍比赛现场排查之后攒下的每次上电两分钟把「雷达没出、IMU 断、相机没绑」几类最常见的情况挡在真正跑任务之前。从那以后我每次比赛前都会强制跑一遍这个检查不跳步因为跳过两次每次都在正式任务里翻车。希望这套节奏帮到你把车跑顺把建图和导航这两件事从玄学变成日常。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?