
简介《智能车ABOT-M1-ATK配置介绍》面向准备参加中国机器人及人工智能大赛、全球校园精英人工智能算法大赛巡航赛项的高校学生、竞赛队伍与指导教师围绕ROS智能车的激光雷达环境感知、机器人导航、无人驾驶和视觉识别等配置展开帮助读者建立从硬件认知到赛项功能联调的整体框架。压缩包仅含1个PDF文件约2.3MB以快速上手指南为主线串联远程桌面测试、激光雷达建图、导航目标点设置、射击模块、视觉与语音功能验证并补充安全注意事项、功能包工作空间说明和常见模块入口便于按目录核验设备状态与软件环境。已有576人学习适合初次接触ABOT-M1-ATK的团队完成设备上手、赛前联调和功能排查也可作为培训交接与备赛流程参考减少误操作并提升模块定位效率。1. 开箱与上电ABOT-M1-ATK 从箱子里抬出来到第一次亮屏第一次给 ABOT-M1-ATK 上电的人十个里有八个会先犯同一个错误双手托在激光雷达上把车端起来。这台面向机器人及人工智能类竞赛的智能车ROS、激光雷达、相机、语音模块和底盘驱动出厂就预置在车里的主控上真正需要“装”的东西不多需要“配”的环节却一环扣一环——显示链路、无线网络、远程桌面、地图保存路径、导航初始位姿任何一处错位后面的建图和导航都会以玄学的方式失败。这篇笔记按我实际复现的顺序走一遍从开箱上电、远程桌面接入到 Gmapping、Hector、Cartographer 三套 SLAM 的启动与存图再到导航目标点下发和视觉、语音、射击模块逐个点亮最后给出五条踩过坑的记录和一套装完自检清单。新手照着能跑通熟手重点看版本差异和参数取舍那几段。2. 开机与远程桌面HDMI 显示链路、向日葵接入和四个工作空间2.1 上电顺序HDMI、显示器供电、主机开关的先后车端主控和外接的 10 寸液晶屏是两路供电图省事先把主机开起来再插 HDMI 的人不少屏幕要么不出图要么分辨率掉到很低RViz 的工具栏按钮挤成一团根本点不准。这台车给的顺序是定死的四步先把车体外部引出的 HDMI 线接到 10 寸显示器上再给显示器供电然后按下车体电源开关等 5 秒最后按主控制器开关等系统起完。那 5 秒不是摆设底盘控制板要先完成自检再给主控上电跳过这一步偶尔会碰到主控起来了但底盘驱动没枚举到的情况。上电完成之后别急着开软件先在车端终端确认几件事# 主控启动完成后在车端终端确认三件事架构、ROS 发行版、图形会话 uname -m # 期望 aarch64 或 x86_64确认登的是车端不是开发机 ls /opt/ros/ # 目录名就是这台车预装的 ROS 发行版 echo $ROS_DISTRO # 当前 shell 已 source 的版本为空说明环境变量没加载/opt/ros/下的目录名就是预装版本不同批次的机器可能不是一个版本后面所有 launch 命令都得在这个版本下跑。echo $ROS_DISTRO输出为空时补一句source /opt/ros/版本/setup.bash再 source 对应工作空间的devel/setup.bash否则roslaunch会直接报找不到包。图形会话这边用echo $DISPLAY看一眼正常是:0之类的值为空说明桌面没起来远程桌面也连不上画面。电池这块踩过一次电量显示一格的时候车还能跑十几分钟但一进建图激光雷达和主控同时拉电流电压掉到保护点直接关机地图没存白跑一趟。充电器是 DC12.6V / 2.0A背部指示灯红灯是充电中绿灯是充满看到一格电就插上不要赌。机器半个月以上不用也要按这个规格补一次电再做存放锂电池长时间亏电放着的后果比多充几次严重得多。提示抬车时双手放在前后轮胎之间的底盘位置不要抓激光雷达也不要在雷达上方压放任何东西。机身不进液体学习操作时手和尖锐物都别碰相机模块。2.2 无线网络与向日葵远程助手把车端画面接回开发机车端要先联网手机热点是最省事的做法。命令行里配无线比在图形界面点来点去更容易复现# 车端扫描、连接、确认地址三步确认网络通了 nmcli device wifi list | head -n 10 # 列出可见热点 nmcli device wifi connect 热点名 password 密码 ip addr show wlan0 # 看 inet 那行有没有分到地址 ping -c 4 网关IP # 换成自己热点的网关地址nmcli device wifi connect第一次连会写进系统连接配置下次开机自动重连换热点时记得先nmcli connection delete掉旧的不然两个配置抢同一张网卡表现是连着连着掉线。ping -c 4只发四个包用来确认路由和 DNS 没问题能通就说明车端已经能出网远程桌面才有意义。远程桌面用的是向日葵远程助手电脑端先下载安装车端自带。车端打开后点左下角图标会弹出面板里面能看到本机的识别码和验证码每台设备的识别码都不一样以机器上显示的为准。电脑端同样联网输入识别码和验证码点远程连接画面就过来了。远程桌面只适合“看画面”真正敲命令建议走 SSH跟手程度差一个量级# 开发机侧直接 SSH 进车端命令回显比远程桌面里点终端快得多 ssh 车端用户名车端IP远程桌面走的是画面编码带宽一紧张键盘遥控就有明显延迟建图时车已经撞墙了画面才更新。我的习惯是远程桌面开着看 RViz 和地图命令操作全走 SSH 终端两边分工。2.3 四个工作空间abot_vision、abot_voice、lidar_ws、robot_ws车端桌面点“文件”打开系统文件夹能看到四个跟机器人功能直接相关的工作空间。先把它们各自管什么弄清楚后面看到roslaunch命令才不会乱猜。工作空间管什么常见入口包robot_ws底盘、IMU、外设驱动以及自主巡航这类综合 demoabot_bringuplidar_ws激光雷达、建图与导航abot_slam、robot_slamabot_vision相机与视觉识别usb_camabot_voice语音播报与语音识别robot_voice每个工作空间的src下面放着若干功能包roslaunch后面跟的第一个参数就是包名。上电后先跑一遍体检确认四个空间都编译过# 逐个工作空间确认 src 下的包以及 devel 是否已生成 for ws in robot_ws lidar_ws abot_vision abot_voice; do echo $ws ls ~/$ws/src 2/dev/null ls ~/$ws/devel/setup.bash 2/dev/null echo 已编译 || echo 缺 devel需要 catkin_make done # 再从 ROS 的角度确认这些包能被找到 rospack list | grep -E abot_|robot_devel/setup.bash存在基本等于这个空间编译过缺失时进目录跑一次catkin_make。改 launch 文件不需要重编译改 C 源码才需要这条区分清楚能省不少时间。rospack list里看不到某个包八成是没 source 对应的devel/setup.bash而不是包真的丢了。四个空间的 source 顺序有讲究robot_ws放最后 source它的底盘驱动是其它包的上游依赖。注意不要私自拆解车体。拆过之后出现的任何问题都不在原厂支持范围内这个后悔药买不到。3. 激光雷达建图Gmapping、Hector、Cartographer 三套 launch 的启动与存图3.1 一键脚本 1-gmapping.sh 里到底起了哪些节点车端桌面右键打开终端输入./1-gmapping.sh回车脚本会拉起一串终端窗口建图流程就起来了。但直接跑脚本等于把黑匣子吞下去出问题不知道从哪查。我一般先花两分钟把脚本读一遍# 先定位脚本再看清它到底 launch 了哪些节点 cd ~ find . -maxdepth 3 -name 1-gmapping.sh 2/dev/null cat ./1-gmapping.shfind加-maxdepth 3是防止全盘扫太慢脚本一般在用户目录或桌面。cat出来的内容里能看到它按顺序启动的 launch 文件展开后基本对应用户手册第九节给的手动链路# 手动等价链路三个终端按顺序起前一条确认没报错再开下一条 roslaunch abot_bringup robot_with_imu.launch # 底盘 里程计 IMU提供 odom 和 tf roslaunch robot_slam gmapping.launch # Gmapping 建图算法本体 roslaunch robot_slam view_mapping.launch # RViz看地图和雷达点云第一条robot_with_imu.launch是地基它把底盘驱动、轮式里程计和 IMU 一起拉起来发布/odom和整套tf变换没有它后面两条全是空中楼阁。第二条gmapping.launch订阅/scan和/odom输出/map。第三条view_mapping.launch只是把 RViz 用预设的配置文件打开省得手动加 Map、LaserScan 显示项。三条命令分别在三个终端里跑终端窗口别关关掉对应的节点就退了。启动前把车放到地面并且记下它此刻的位置和朝向。Gmapping 建立的地图坐标系原点就是启动瞬间车的位置后面导航要放回同一个点这个初始位置记不牢导航那一章会吃大亏。我习惯用胶带在地面贴个十字车头方向也标一道。3.2 键盘遥控的按键映射与速度参数脚本会开好几个终端遥控要切到第五个终端窗口里操作。这台车给的按键映射是UIO控制向前、左前、右前JL控制左右转M控制后退和左后、右后。开了英文大写之后UO变成左前右前平移JL变成左右平移变成左后右后平移。全向底盘的价值就在这里窄场地里平移比原地转向好用得多。如果不用脚本自带的遥控标准做法是单独起teleop_twist_keyboard并且把速度降下来# 独立起键盘遥控同时把线速度和角速度压低到适合建图的范围 rosrun teleop_twist_keyboard teleop_twist_keyboard.py _speed:0.2 _turn:0.6speed是线速度单位米每秒默认值对建图来说偏快降到 0.2 左右雷达帧之间车位移小点云拼出来的墙才直turn是角速度单位弧度每秒0.6 大概是一秒转三十多度转向时能看清地图变化。这两个参数用下划线加冒号的写法覆盖不用改源码。建图过程中速度越快、转得越急地图糊得越厉害这不是算法不行是雷达一帧扫完车已经动了运动畸变补不回来。遥控发出去的速度话题是/cmd_vel底盘订阅它执行。如果按键有回显但车不动先看底盘驱动终端有没有报串口错误再看rostopic hz /cmd_vel有没有数据方向别搞反。3.3 保存地图save_map.launch 与路径确认地图建到自己满意之后不要关建图终端另开一个终端执行保存# 建图节点保持运行另开终端保存当前地图 roslaunch abot_slam save_map.launch这条命令直接读运行中的/map话题并落盘建图节点一关/map就没了存出来是空的。保存完先确认文件真的生成了地图一般是.pgm加.yaml成对出现# 确认地图文件成对生成并看一眼元数据 find ~ -name *.yaml -path *map* -mmin -10 2/dev/null cat 上一步找到的.yaml-mmin -10只找十分钟内改过的文件避免翻出一堆旧地图。.yaml里三个字段要会看resolution是每个像素代表多少米常见是 0.05改了它地图比例就全错origin是地图左下角在世界坐标系里的位姿导航时车放的位置对不上多半是这个原点跟当前初始位姿差了image指向同名的.pgm文件两个文件必须待在同一个目录挪动时一起挪。地图文件建议立刻按日期备份一份换场地之后旧地图就找不回来了这个习惯在第六节还会再提一次。3.4 Gmapping、Hector、Cartographer 的切换与取舍三套 SLAM 都能出图但依赖和适用场景不一样车端脚本里都给了入口。Hector 和 Cartographer 的启动命令是这样的# Hector不依赖里程计纯靠激光匹配适合场地小、结构特征多的场景 roslaunch abot_slam hector_mapping.launch roslaunch abot_slam view_mapping.launch # Cartographer带 IMU 融合和回环适合大场地和长走廊 roslaunch abot_bringup robot_with_imu.launch roslaunch abot_slam cartographer.launchHector 的好处是省事不用里程计车推着走就能建图缺点是它假设车走得慢速度一快直接跟丢地图会突然错位一大块。Cartographer 用 IMU 做姿态融合回环检测能把绕一圈的误差拉回来代价是吃 CPU主控负载高的时候建图会卡顿。Gmapping 居中依赖轮式里程计小场地表现最省心跑久了累计误差明显。算法依赖适用场地启动命令Gmapping里程计 激光中小场地日常首选robot_slam gmapping.launchHector仅激光小场地、特征多、推车慢走abot_slam hector_mapping.launchCartographerIMU 激光大场地、长走廊、需要回环abot_slam cartographer.launch选哪个不用纠结太久先跑 Gmapping出图糊了换 Hector 验证是不是里程计漂场地大就上 Cartographer。三套算法启动时都要先起底盘驱动除了 Hector 可以省掉robot_with_imu.launch这一步之外其余都一样。4. 导航与外设联调2D Nav Goal 下发、usb_cam 出图、语音播报和射击触发4.1 导航启动链从 2-navigation.sh 到三条 launch导航的一键入口是车端终端里的./2-navigation.sh它内部拉起的还是那三条命令手动跑一遍更容易定位问题# 导航三段式顺序不能乱 roslaunch abot_bringup robot_with_imu.launch # 底盘、里程计、IMU提供 tf roslaunch robot_slam navigation.launch # 加载地图 AMCL 定位 move_base 规划 roslaunch robot_slam view_nav.launch # RViz带导航专用显示配置第一条和建图时完全一样底盘和传感器先就位。第二条是导航的核心它内部会加载上一节保存的.yaml地图、启动 AMCL 做粒子滤波定位、拉起move_base做全局和局部路径规划代价地图也在这一步生成。第三条只是给 RViz 套一个预设配置把地图、代价地图、激光、规划路径这些显示项配好。启动之前有一个动作必须做把车放回建图时的初始位置朝向也要一致。导航依赖 AMCL 在已知地图里定位初始位姿给错粒子撒得到处都是收敛不回来就表现为规划出一条匪夷所思的路径或者干脆不动。地面贴的那道胶带这时候就值钱了。4.2 2D Nav Goal 下发与初始位姿校正RViz 顶部工具栏有个2D Nav Goal按钮点一下然后在地图的空白区域按住鼠标往目标朝向拖一条箭头松手就开始规划。目标点要落在地图的已知空闲区域里点在墙上或者地图边界外move_base会直接判定目标不可达。如果车在地图上的位置明显偏了——比如 RViz 里车模型没落在实际所站的位置——先用2D Pose Estimate校一次点按钮在实际位置按住鼠标拖出朝向。这一步做完等几秒让粒子收敛再下发导航目标。导航过程中车走一半停住、原地打转、或者撞着墙蹭九成是定位问题而不是规划问题先校位姿再看规划。目标点下发后观察三条东西RViz 里的全局路径是不是一条从车到目标的连续线局部代价地图有没有把障碍物膨胀出来/cmd_vel上有没有速度输出。三条里缺哪条问题就锁定在哪个环节。4.3 导航不动时先看哪几个话题不猜直接查# 导航链路的四个关键话题逐一确认有没有数据 rostopic list | grep -E map|scan|cmd_vel|amcl rostopic hz /scan # 雷达是否在出数正常十几赫兹 rostopic echo /amcl_pose # 定位协方差数值越大越不确定 rostopic info /cmd_vel # 谁在发速度谁在收速度/scan停了说明雷达节点挂了或者网口松了导航必然失败。/amcl_pose里的协方差矩阵对角线数值很大说明定位没收敛回到上一步用2D Pose Estimate重来。/cmd_vel上没人发说明move_base压根没规划出路径去看它的终端输出里有没有“目标点在障碍物内”这类提示。这套排查顺序比在 RViz 里瞎点快得多。4.4 视觉usb_cam 出图与 rqt_image_view 确认视觉模块的验证最短两条命令# 视觉链路先出图再看图两个终端 roslaunch usb_cam usb_cam_test.launch # 相机驱动发布图像话题 rosrun rqt_image_view rqt_image_view # 图形化查看器左上角下拉选话题第一条启动 USB 相机驱动正常会在/usb_cam/image_raw上持续发布图像。第二条起查看器左上角下拉框里选中对应话题画面出来就说明相机和驱动都正常。第一个终端不能关关了话题就断查看器显示无信号。看不到图时按顺序查两步rostopic list | grep image确认话题在不在rostopic hz /usb_cam/image_raw确认帧率是不是零。话题在但帧率为零多半是 USB 带宽不够或者相机被别的进程占着把其它吃 USB 的节点停掉再试。相机镜头别用手摸也别拿尖锐物去碰花了就只能换。4.5 语音roscore、tts_subscribe 和蓝牙耳机语音模块这几个节点没有自己的 master必须先起roscore# 三个终端master、订阅节点、发布测试文本 roscore rosrun robot_voice tts_subscribe rostopic pub /voiceWords std_msgs/String data: 1234第一条起 ROS 主节点这台车上如果已经有别的 launch 在跑roscore就不用重复起。第二条启动语音订阅节点它订阅/voiceWords并把文本送去做语音合成。第三条往这个话题上发一条测试文本data: 1234里的内容就是要播报的文字引号和冒号后面的空格都不能少格式写错rostopic pub会直接报解析失败。声音走蓝牙耳机得先在系统设置里连上耳机并确认它是默认输出设备。连上了但没声音先看系统音量、再看输出设备选没选对最后确认tts_subscribe那个终端有没有打印收到消息。rostopic pub默认发一次就退出想反复试就加-r 1每秒发一次。4.6 射击模块shoot.launch 与 rostopic pub 触发射击模块是独立供电的验证前先把模块上的电源开关打开水弹至少用矿泉水泡 8 小时以上泡不到位打出去是碎的还容易卡弹仓。# 射击链路起驱动发一次触发 roslaunch abot_bringup shoot.launch # 射击模块驱动占用串口 rostopic pub /shoot std_msgs/String data: # 触发一次第一条把射击模块的驱动拉起来它会占用对应的串口设备。第二条往/shoot话题发一条空字符串消息驱动只认“消息到达”这个事件内容是什么无所谓。不要加-r参数加了会持续每秒触发等于连射弹仓里的水弹几秒就打光。注意射击模块任何时候都不要对着人和贵重物品测试前先确认弹仓方向和人员位置。这条不是形式主义水弹近距离打眼睛是能出事的。5. 避坑与排查ABOT-M1-ATK 配置过程中最常见的五个翻车现场5.1 脚本报 Permission denied 或者找不到命令现象终端里敲./1-gmapping.sh回车返回bash: ./1-gmapping.sh: Permission denied或者No such file or directory但文件明明就在那儿。原因两种可能。一是脚本从 U 盘或者压缩包拷过来时丢了可执行权限位二是当前工作目录不在脚本所在目录./是相对当前目录解析的人在~下而脚本在桌面自然找不到。这两种在车端交付时都遇到过。解决先cd到脚本所在目录用ls -l看权限位没有x就补上cd ~/Desktop # 换成脚本实际所在目录 ls -l 1-gmapping.sh # 权限位应是 -rwxr-xr-x chmod x 1-gmapping.sh # 没有 x 就补上 ./1-gmapping.shchmod x只影响当前文件批量处理时用chmod x *.sh。实在不想改权限用bash 1-gmapping.sh也能跑区别是脚本里的相对路径仍然按当前目录解析不如改权限干净。5.2 建出来的地图墙是弯的绕一圈回来对不上现象RViz 里地图一点点长出来看着还行但仔细看长直墙是弧形的绕场地走一圈回到起点新扫的墙和最初的墙错开一大截。原因推车速度太快激光雷达一帧扫完车身已经位移点云拼接时产生运动畸变再就是急转急停让轮式里程计打滑Gmapping 完全信里程计里程计一漂整张图跟着歪。解决把线速度降到 0.2 米每秒以内转向前先停一下再转别一边全速前进一边大角度拐弯。场地允许的话走闭合回路让 Gmapping 有机会做一次回环修正。地图已经歪了就重来别在歪图上继续加越加越救不回来。5.3 导航目标点下去车不动或者原地打转现象RViz 里点了2D Nav Goal目标点也显示出来了但车纹丝不动或者原地左右打转几圈后停下。原因九成是初始位姿和建图起点对不上AMCL 的粒子撒满了整张地图收敛不到真实位置。剩下的一成是navigation.launch里加载的地图路径还指着上一次的旧图或者地图文件被挪走了.yaml找不到.pgm。解决先把车摆回建图起点用2D Pose Estimate手动给一次初始位姿等几秒看 RViz 里粒子云是不是收拢成一团。再确认地图路径# 确认导航加载的是哪张图以及图文件是否成对 grep -r map ~/lidar_ws/src/robot_slam/launch/navigation.launch ls -l 上面看到的 yaml 路径同目录路径对、位姿给了还是不动去看move_base终端的输出那里会明确写目标点在障碍物内、或者全局规划失败。5.4 远程桌面连上了但键盘遥控延迟到没法用现象向日葵画面能动但按一下前进键车要过半秒才动建图时画面里的车已经贴墙了才反应过来。原因远程桌面传的是编码后的画面带宽被画面吃掉键盘事件排队。车端和开发机不在同一个热点下、中间隔了路由延迟会更明显。解决车端和开发机连同一个热点远程桌面里把画质和帧率调低只留看 RViz 够用的清晰度。所有命令操作改走 SSH键盘遥控也在 SSH 终端里敲响应立刻正常。远程桌面负责看SSH 负责操作这个分工定下来之后建图顺畅很多。5.5 语音节点起来了但耳机里没声音现象tts_subscribe终端里能看到收到消息并打印了内容但蓝牙耳机一点动静没有。原因系统默认音频输出还挂在 HDMI 或者板载声卡上蓝牙耳机连上了但没被设为输出设备另一种是先rosrun后roscore节点压根没注册到 master 上。解决先在系统声音设置里确认输出设备是蓝牙耳机能听到系统提示音再继续。启动顺序固定成roscore→rosrun robot_voice tts_subscribe→rostopic pub三个终端各司其职。还是没声音rostopic info /voiceWords看一下订阅者数量是零就说明tts_subscribe没连上 master。6. 装完怎么验证一套十分钟能跑完的全链路自检器件一个个点亮不等于整套系统能跑中间隔着 tf、话题、路径这些黏合剂。我习惯在正式用之前跑一遍全链路自检从冷启动开始按顺序走完八个检查点任何一项卡住就停在那一项排查不要跳过去往下走。检查项操作通过标准上电与显示HDMI 接显示器、供电、电源键、主控键桌面正常出现分辨率正常ROS 环境echo $ROS_DISTRO、rospack list版本非空abot_ 系列包能列出网络与远程连热点、ping 网关、向日葵连接车端能出网远程画面流畅雷达出数rostopic hz /scan帧率十几赫兹且不中断建图与存图跑1-gmapping.sh走一小圈保存地图墙是直的.pgm和.yaml成对导航放回起点跑2-navigation.sh下发目标路径连续车能到点视觉usb_cam_test.launchrqt_image_view画面正常帧率非零语音与射击tts_subscribe播报、shoot.launch触发耳机出声、模块动作建图那一步别偷懒自检用的地图也要按日期备份换场地直接切回对应那天的图比每次重建省事得多# 建完图立刻按日期留档换场地时按目录名切回 mkdir -p ~/maps_backup/$(date %Y%m%d) cp 地图目录/*.pgm 地图目录/*.yaml ~/maps_backup/$(date %Y%m%d)/ ls -R ~/maps_backup | tail -n 20$(date %Y%m%d)会展开成当天日期同名目录已存在就覆盖同一天建两次图记得手动加个后缀区分。cp两个通配符必须都带上只拷.yaml不拷.pgm导航加载时会报图像文件缺失——这个错我犯过一次对着路径看了半天才发现少拷一个文件。还有一个小技巧自检时把手机架在旁边录屏录下从冷启动到导航跑完全程的画面。哪天现场出问题回放一遍就知道是哪个环节先异常的比事后凭记忆复盘可靠得多。建图那几分钟尤其值得录地图是从哪一刻开始歪的视频里一目了然。从那以后我每次换场地都强制走一遍「冷启动—自检—建图—按日期备份—回放导航」的完整流程哪怕这次只改了一个目标点也不跳步骤。这套流程花十分钟能省掉现场半小时的抓瞎。希望帮到你。本文还有配套的精品资源点击获取