简介:面向参加中国机器人及人工智能大赛、全球校园精英人工智能算法大赛巡航赛项的参赛学生与ROS入门者的ABOT-M1-ATK智能车配置指南,以单份PDF文档呈现,压缩包约2.3MB,共1个文件。文档围绕激光雷达环境感知、建图定位、机器人导航与视觉识别等无人驾驶关键技术展开,依次覆盖整机启动与远程桌面接入、三种建图方式的指令与地图保存、目标点自主导航、射击模块、摄像头视觉与语音交互等功能测试,并梳理视觉、语音、激光导航及底盘配置等工作空间的用途与启动方式,同时附上取机、供电、充电和禁止私自拆解等安全事项。读者可据此完成从开箱到全器件自检的完整流程,快速搭起可复现的调车环境,对照指令逐项验证并定位问题,减少反复摸索的时间成本。该文档目前已有591人学习。
1. 先别急着上电:ABOT-M1-ATK 这套 ROS 环境到底装什么
智能车 ABOT-M1-ATK 配置这件事,最容易翻车的不是某条 roslaunch,而是上电顺序、ROS 工作空间和激光雷达的初始状态没对齐。它把机器人导航、视觉识别、无人驾驶巡航这些模块塞进一台小车里,装不好时表现很玄学:远程桌面能连、雷达也有点,但建图重影、导航不走。这套环境适合准备机器人巡航赛项、想复现激光雷达建图和导航链路的开发者。装之前先把车端 ROS 发行版、工作空间、远程桌面和供电状态列清,后面每一步才有对照。
2. 上电与远程桌面:ABOT-M1-ATK 首次开机的配置顺序
ABOT-M1-ATK 第一次上电不要直接跑建图脚本。车端镜像里通常已经放好 ROS 工作空间和启动脚本,但显示器、网络、远程桌面会话、终端环境变量这四件事只要有一件没对齐,后面就会出现“命令明明敲对了,包却找不到”的情况。我的习惯是先把机器当成一台普通 Linux 主机验一遍:能亮屏、能联网、能远程进入桌面、能看到工作空间目录,再谈雷达和导航。这样排错时不会把网络问题误判成 ROS 问题。
2.1 硬件连接与上电顺序
取机器时双手放在前后轮胎间的位置抬起,不要用手托拽激光雷达,雷达上方也不要压放任何物体。车上有 HDMI 接口,先把外部显示器和 10 寸液晶显示器供电接好,再按电源开关,等 5 秒左右按主控制器开关。材料里前后出现过 10 寸和 10.7 寸两种写法,按随机附带的显示器接,电源适配器不要混用。电量显示只剩一格时就充电,充电器用 DC12.6V/2.0A,背部红灯是充电状态,绿灯是充满状态;长时间半个月不用,也要补一次电维护电源。
| 检查项 | 输入材料中的要求 | 上电前动作 |
|---|---|---|
| 抬车方式 | 双手放前后轮胎间 | 不托拽激光雷达 |
| 雷达上方 | 不压放物体 | 目视确认无遮挡 |
| 机身 | 不洒液体 | 桌面远离水杯 |
| 相机模块 | 不用手或尖锐物触碰 | 镜头盖按需保留 |
| 供电 | DC12.6V/2.0A | 一格电先充 |
| 充电指示 | 红灯充电、绿灯充满 | 不靠猜电量 |
注意:未系统学习前不要私自拆解机器,按手册顺序逐项测试;不上电时如果主控制器已关机,随手关闭电源。
上电后先看桌面是否完整出现。如果 HDMI 有画面但远程桌面黑屏,不要急着怀疑 ROS,先确认车端桌面会话已经登录、显示器没有休眠、网络没有掉。远程桌面工具只是把车端桌面投到电脑上,车端本身没有进入桌面,远程端再重连也没用。
2.2 远程桌面工具安装与连接参数
车端联网可以用 wifi,也可以用手机热点。车端连上网络后,在桌面打开终端查地址:
# 查看车端当前 IPv4 地址,远程桌面连不上时先确认车在不在同一网络 hostname -I # 查看默认网关,判断车端是否真的拿到了路由 ip route | grep defaulthostname -I列出的是本机地址,不是远程端的地址;ip route里的 default 行能看出车端有没有默认网关。远程桌面工具通常用识别码和验证码连接,不一定依赖 IP,但排错时要知道车端到底在不在线。电脑端下载并安装同一个远程桌面助手,版本尽量和车端一致,输入车端界面显示的识别码和验证码。每台设备的识别码不同,以机器上显示的为准,不要抄别人的连接记录。
电脑端也要联网,远程连接成功后先看鼠标键盘能否操作车端桌面。能操作桌面,再打开终端敲printenv ROS_DISTRO和rosversion -d。这两个命令一个看环境变量,一个看 ROS 发行版;如果命令不存在,说明当前终端没有进入 ROS 环境,或者车端镜像根本不是这套 ROS1 工作空间。ABOT-M1-ATK 的启动命令以roslaunch、rosrun为主,看到ros2命令先停手确认镜像,不要混用两套启动方式。
# 确认当前终端看到的 ROS 发行版和版本 printenv ROS_DISTRO rosversion -d # 确认四个工作空间目录是否存在 ls -d ~/abot_vision ~/abot_voice ~/lidar_ws ~/robot_ws 2>/dev/nullprintenv ROS_DISTRO输出为空时,先 source 对应发行版的环境文件;ls -d只列目录本身,不展开内容,适合快速确认工作空间有没有少。四个目录分别对应视觉、语音、激光导航和机器人配置,少一个都会导致后面的 launch 找不到包。
2.3 工作空间环境变量与终端习惯
ROS1 的工作空间编译后在devel/setup.bash里生成环境脚本,新开终端不会自动继承上一个终端的环境。常见做法是每个终端先 source 基础环境和当前要用的工作空间:
# 先加载 ROS 基础环境,再加载机器人配置工作空间 source /opt/ros/$ROS_DISTRO/setup.bash source ~/robot_ws/devel/setup.bash # 建图和导航终端再按需加载激光工作空间 source ~/lidar_ws/devel/setup.bash/opt/ros/$ROS_DISTRO/setup.bash里的$ROS_DISTRO来自当前 shell,如果它为空,先确认上一步的printenv结果。devel/setup.bash是 ROS1 的开发空间脚本,有的镜像用install/setup.bash,看工作空间里实际有哪个目录。不要在同一个终端里把所有工作空间反复 source 好几遍,包名冲突时终端会先找到旧路径,表现为“刚改的 launch 不生效”。我一般一个终端只服务一个 launch,建图终端、遥控终端、RViz 终端分开开,排错时一眼能看出是哪个节点出的问题。
提示:远程桌面连上后先别开
roscore,很多 bringup launch 会自己拉起 master;重复开 master 会让后面的节点连到另一个 ROS 图上。
3. 激光雷达与建图:ABOT-M1-ATK 的 gmapping、hector、cartographer 三套启动方式
激光雷达建图是 ABOT-M1-ATK 最核心的落地环节,也是新手最容易把“地图重影”归因成雷达坏了的环节。车端资料里给了三套建图入口:gmapping、hector、cartographer,另外还有1-gmapping.sh这种快捷脚本。快捷脚本本质是把多条 launch 串起来,适合第一次跑通;真要排错,还是拆成终端逐条启动更清楚。建图前把车放在场地里的初始位置并记住这个点,后面导航回到同一位置时,地图和实际场地才对得上。
3.1 雷达驱动与底盘 bringup 的启动顺序
建图前先起底盘、IMU 和雷达的 bringup。输入材料里 gmapping 和导航都用到robot_with_imu.launch,说明底盘驱动、IMU 和激光雷达的启动被封装在这个 launch 里。先在一个终端启动它:
# 终端 1:启动底盘、IMU 和雷达相关节点 source ~/robot_ws/devel/setup.bash roslaunch abot_bringup robot_with_imu.launch这个 launch 的名字里带imu,说明它不只启动轮子,还把姿态数据带进来。建图时如果 IMU 没起来,gmapping 的角度估计会漂,表现是墙线越走越歪。启动后不要只看终端有没有报错,另开终端查话题:
# 终端 2:确认雷达和底盘话题是否存在 rostopic list | grep -E 'scan|odom|imu|cmd_vel' rostopic hz /scanrostopic list里的scan是激光雷达扫描话题,odom是里程计,imu是姿态,cmd_vel是速度控制。rostopic hz /scan看雷达实际出数频率,频率忽高忽低或完全没有,先查雷达供电和上方遮挡,不要直接改建图参数。常见做法是等/scan稳定出数后再起建图节点,否则 gmapping 第一帧就拿不到完整激光数据。
3.2 gmapping 建图与键盘遥控
gmapping 依赖里程计和激光数据,适合轮速计正常、场地平整的巡航赛项。启动顺序是 bringup、gmapping、RViz 查看,最后开键盘遥控:
# 终端 2:启动 gmapping source ~/lidar_ws/devel/setup.bash roslaunch robot_slam gmapping.launch # 终端 3:打开建图可视化 roslaunch robot_slam view_mapping.launch # 终端 4:键盘遥控,按键说明见下方 rosrun teleop_twist_keyboard teleop_twist_keyboard.pygmapping.launch负责把激光和里程计拼成地图,view_mapping.launch只是 RViz 视图,不起建图算法。键盘遥控里 U、I、O 控制前向和左前、右前,J、L 控制左右转,M、<、> 控制后向和左后、右后;开启英文大写时,部分按键会变成平移控制。新手常犯的错是按住按键不松,车一下冲太快,激光帧间匹配跟不上,地图边缘就糊了。慢速、小步、原地转圈补角度,比追求一圈建完更稳。
车端桌面还提供了./1-gmapping.sh快捷入口。跑之前先看脚本内容,知道它替你启动了哪些 launch:
# 查看快捷脚本实际启动了哪些节点,排错时不要把它当黑匣子 cat ./1-gmapping.sh脚本里的路径通常是相对机器人桌面目录的,终端不在那个目录会提示找不到文件。用find ~ -name '1-gmapping.sh'找位置,不要凭记忆硬敲路径。快捷脚本适合演示,拆开终端启动适合排错;两种方式不要同时跑,否则同一个话题会被两个节点抢。
3.3 hector 与 cartographer 的差异和切换
hector 建图不依赖轮速计,靠激光帧间匹配,适合快速验证雷达是否正常。启动方式和 gmapping 类似,但包名换到abot_slam:
# 终端 1:底盘和雷达 roslaunch abot_bringup robot_with_imu.launch # 终端 2:hector 建图 roslaunch abot_slam hector_mapping.launch # 终端 3:可视化 roslaunch abot_slam view_mapping.launchhector 对雷达数据质量更敏感,雷达上方压了东西、场地里全是玻璃或长走廊,地图容易重影。它的好处是轮速计打滑时也能出图,适合先确认激光雷达和 TF 链路。cartographer 的回环能力更强,适合大场地,但资源占用也高,启动前先关掉不必要的 RViz 和远程桌面大图传:
# cartographer 建图入口 roslaunch abot_bringup robot_with_imu.launch roslaunch abot_slam cartographer.launch rosrun teleop_twist_keyboard teleop_twist_keyboard.py| 建图方案 | 主要依赖 | 适用场景 | 启动命令 | 参数取舍 |
|---|---|---|---|---|
| gmapping | 里程计、激光、IMU | 平整场地、轮速计正常 | roslaunch robot_slam gmapping.launch | 速度放慢,先确认/odom |
| hector | 激光、TF | 快速验雷达、轮速计不稳 | roslaunch abot_slam hector_mapping.launch | 雷达不能被遮挡 |
| cartographer | 激光、IMU、配置 | 大场地、需要回环 | roslaunch abot_slam cartographer.launch | 资源占用高,别开太多视图 |
三套方案不要同时开。gmapping 和 cartographer 都会发布/map,两个地图源同时存在时 RViz 会跳图,导航也会收到错的地图。切换方案前把旧终端 Ctrl+C 掉,再rosnode list确认旧节点已经退出。
3.4 地图保存与路径确认
建图完成后不要直接关终端,先保存地图:
# 保持建图终端不关,另开终端保存地图 source ~/lidar_ws/devel/setup.bash roslaunch abot_slam save_map.launch # 查 abot_slam 包路径,确认地图实际落在哪个目录 rospack find abot_slamsave_map.launch通常调用 map_server 的保存工具,把.pgm和.yaml写到 launch 里配置的目录。rospack find abot_slam输出包根目录,进去看map一类目录,不要在用户主目录里乱翻。常见做法是保存后立刻用find确认文件时间戳:
# 找最近生成的栅格地图和配置文件 find ~ -name '*.pgm' -o -name '*.yaml' 2>/dev/null | head -20find里-o表示或关系,head -20只看前二十条,避免输出刷屏。地图文件有了,但导航用的 YAML 里image路径、resolution、origin三项必须和场地匹配;换场地后不要直接拿旧地图导航,先重新建图。
4. 导航与视觉语音:ABOT-M1-ATK 功能包配置与启动命令
ABOT-M1-ATK 的功能包按工作空间分得比较清楚:abot_vision管视觉,abot_voice管语音,lidar_ws管激光和导航,robot_ws管机器人配置、底盘驱动和综合 demo。导航、视觉识别、语音播报、射击模块各自有独立 launch,但都依赖底盘和 ROS master。先起 bringup,再起功能 launch,是这套车最稳的顺序。下面把导航、视觉、语音、射击四条链路拆开写,命令按终端分开,避免互相抢话题。
4.1 导航 launch 与 2D Nav Goal
导航前把车放回建图时的初始位置,这个动作不是形式主义。导航包需要知道机器人在 map 坐标系里的初始位姿,放歪了,RViz 里车模型会贴着墙走,局部规划器一直避障,车就不动。启动顺序:
# 终端 1:底盘、IMU、雷达 source ~/robot_ws/devel/setup.bash roslaunch abot_bringup robot_with_imu.launch # 终端 2:导航算法 roslaunch robot_slam navigation.launch # 终端 3:导航可视化 roslaunch robot_slam view_nav.launchnavigation.launch起 move_base 一类导航节点,view_nav.launch只负责 RViz。RViz 里先看地图有没有加载、激光点云有没有贴墙、车模型位置对不对。常见做法是用 RViz 的 2D Pose Estimate 给一个初始位姿,再点 2D Nav Goal 在地图空白处设目标点,鼠标松开后车才开始规划。输入材料里直接写“点击 2D NAV goal”,实际排错时初始位姿这一步不能省。
导航不走时先查三个话题:/map有没有地图、/scan有没有激光、/cmd_vel有没有速度输出。rostopic echo /cmd_vel能看到规划器有没有发速度;有速度但车不动,查底盘使能、电量、急停。没有速度,查目标点是不是落在障碍物里、代价地图是不是把整条路都标成禁行。
4.2 视觉 usb_cam 与 rqt_image_view
视觉识别链路先确认相机设备,再起 usb_cam 测试 launch:
# 终端 1:启动 USB 相机测试节点 source ~/abot_vision/devel/setup.bash roslaunch usb_cam usb_cam_test.launch # 终端 2:打开图像查看器 rosrun rqt_image_view rqt_image_viewusb_cam_test.launch里一般配置了设备节点、分辨率、像素格式,换相机或换 USB 口后设备号可能从/dev/video0变成/dev/video1。先查设备:
# 列出视频设备,确认相机被系统识别 ls -l /dev/video* v4l2-ctl --list-devicesls -l /dev/video*看设备节点是否存在,v4l2-ctl看设备名称和能力。没有v4l2-ctl就装v4l-utils,但先确认镜像源可用。rqt_image_view左上角下拉框选图像话题,具体话题名用rostopic list | grep image查,不要凭猜。画面黑屏但话题有数据,查镜头盖、曝光、相机供电;话题都没有,查 launch 里的video_device参数和 USB 接触。
4.3 语音 tts 与蓝牙耳机
语音测试先连蓝牙耳机,再起语音节点。车端右上角设置里进蓝牙连接,耳机连接成功后再开终端:
# 如果底盘 launch 已经起了 roscore,这里不要再开 roscore rosrun robot_voice tts_subscribe # 发一条文本,让语音节点播报 rostopic pub -1 /voiceWords std_msgs/String "data: '1234 '"rostopic pub -1里的-1表示只发一次,不加会持续发布。std_msgs/String是消息类型,data字段里放要播报的文本。耳机里能听到声音、第二个终端能看到订阅输出,语音链路就算通。没声音先查蓝牙输出设备有没有切过去,再查roscore是不是重复开了;重复 master 会让tts_subscribe连到另一个图,终端看着正常,耳机就是不响。
4.4 射击模块的安全测试
射击模块测试前先把水弹用矿泉水泡 8 小时以上,没泡开的水弹会卡弹。开启射击模块电源开关,确认弹仓周围没有人和贵重物品,再起驱动:
# 启动射击模块驱动 roslaunch abot_bringup shoot.launch # 发一次空字符串触发,确认有射击动作 rostopic pub -1 /shoot std_msgs/String "data: ''"shoot.launch起射击驱动,/shoot话题接收字符串消息,空字符串也会触发一次动作。测试时不要把射击模块对着人,水弹没泡好不要硬装。射击模块是功能测试项,不是上车就默认开的模块;不用时关掉它的电源开关,减少误触发。
| 工作空间/目录 | 相关包或入口 | 用途 | 常用启动 |
|---|---|---|---|
robot_ws | abot_bringup | 底盘、IMU、射击、综合 demo | robot_with_imu.launch、shoot.launch |
lidar_ws | abot_slam、robot_slam | 激光建图、保存地图、导航 | gmapping.launch、navigation.launch |
abot_vision | usb_cam | 视觉识别相机 | usb_cam_test.launch |
abot_voice | robot_voice | 语音播报 | tts_subscribe |
5. 避坑与排查:ABOT-M1-ATK 跑不起来时先查这 5 处
这套车的血泪经验是:大部分“坏了”不是硬件坏了,而是终端环境、初始位姿、话题占用这三类问题叠在一起。远程桌面能连不代表 ROS 图正常,RViz 有画面不代表导航能走。下面五条按“现象 → 原因 → 解决”写,都是装完第一次跑最容易踩的坑。每条先查最小链路,再动参数,别一上来就改 launch。
5.1 上电、网络和包路径的坑
现象一:终端里roslaunch提示找不到包,但目录明明存在。原因通常是当前终端没有 source 工作空间,或者 source 了错误的工作空间。新开终端不会继承上一个终端的ROS_PACKAGE_PATH,远程桌面重连后终端也是新的。解决:
# 看当前终端到底能看到哪些包路径 echo $ROS_PACKAGE_PATH rospack find abot_bringup rospack find robot_slamecho $ROS_PACKAGE_PATH输出里没有robot_ws或lidar_ws,就重新 source 对应devel/setup.bash。rospack find返回空,说明包名或工作空间不对,不要继续敲 launch。常见误用是把所有工作空间都写进一个终端,包名冲突时先找到旧路径,改完的 launch 不生效。
现象二:远程桌面连上了,但终端里hostname -I没有地址,或者车端上不了网。原因是车端 wifi 没连上、热点没开 DHCP,或者远程桌面走的是中继而车端本身没网。解决:先在车端桌面右上角确认网络图标,手机热点重新连一次,终端里ip route | grep default看默认网关。远程桌面能连不代表车端能访问外部网络,建图不依赖外网,但下载工具和查资料会受影响。车端网络恢复后再跑hostname -I,把地址记下来。
现象三:上电后雷达没有/scan,或者rostopic hz /scan频率很低。原因是雷达上方压了物体、供电不稳、雷达线缆松动,或者 bringup 还没起完就开了建图。解决:先关机检查雷达上方,按手册要求不压放任何物体;再起robot_with_imu.launch,另开终端rostopic list | grep scan。没有scan就查雷达驱动节点有没有起来,不要直接改 gmapping 参数。雷达出数稳定后再起建图,第一帧地图会干净很多。
5.2 建图、导航和执行器的坑
现象四:建图时墙线重影,走一圈回来地图合不上。原因常见有三种:建图起点没记录、键盘遥控速度太快、轮速计打滑或 IMU 漂。解决:把车放回场地初始位置,重新起 gmapping,遥控时用小步慢速,转弯分段转,不要按住按键不放。检查/odom和/imu是否正常发布:
# 看里程计和 IMU 是否有数据,频率是否稳定 rostopic hz /odom rostopic hz /imu/odom频率很低或没有,先查底盘驱动;/imu漂得厉害,建图角度会跟着歪。地图重影时不要用橡皮擦硬修,重新建一遍比修图快。
现象五:导航点了 2D Nav Goal,车不动,或者走两步就停。原因是初始位姿没给、目标点落在障碍物里、代价地图把路封了,或者旧建图节点还在发/map。解决:先把车放回建图起点,在 RViz 用 2D Pose Estimate 给初始位姿;再点空白处设目标。查话题:
# 导航不动时,先看地图、激光、速度指令三条链路 rostopic list | grep -E 'map|scan|cmd_vel|move_base' rostopic echo -n 1 /cmd_velrostopic echo -n 1只取一条消息,看有没有速度输出。有速度但车不动,查底盘使能和电量;没有速度,查目标点、代价地图和旧节点。旧 gmapping 终端没关时,先 Ctrl+C 掉再导航,两个地图源同时存在会让规划器混乱。视觉打不开时同理,先ls -l /dev/video*查设备,再查usb_cam_test.launch里的设备号;语音没声音先查蓝牙输出设备和roscore是否重复。排查顺序固定下来,比东改一处西改一处省时间。
6. 装完怎么验证:ABOT-M1-ATK 从建图到导航的一次闭环
装完不要只看单个模块能不能启动,要走一次“上电 → 远程桌面 → 雷达出数 → 建图保存 → 导航到点”的闭环。我的验证习惯是先查最小链路,再动车。车端终端里跑:
# 每次上车先确认雷达、地图、速度控制三条链路 rostopic list | grep -E 'scan|map|cmd_vel' rostopic hz /scan rosnode list | grep -E 'bringup|slam|navigation'rostopic hz /scan要看到稳定频率,rosnode list里要有 bringup 和建图或导航节点。随后按建图流程走一小圈,保存地图,确认.pgm和.yaml文件时间戳是新的;再把车放回起点,起导航,在 RViz 里给初始位姿和目标点,看车能不能走到目标附近。视觉链路用rqt_image_view确认有画面,语音链路用蓝牙耳机确认能播报,射击模块只在安全场地单独测。
| 验证项 | 动作 | 通过标准 |
|---|---|---|
| 远程桌面 | 电脑端连车端识别码 | 鼠标键盘能操作车端桌面 |
| 激光雷达 | rostopic hz /scan | 频率稳定,无长时间断流 |
| 建图 | 慢速走一小圈 | RViz 墙线连续,无明显重影 |
| 地图保存 | roslaunch abot_slam save_map.launch | 生成新的.pgm和.yaml |
| 导航 | 2D Pose Estimate + 2D Nav Goal | 车能规划并走到目标附近 |
| 视觉 | rqt_image_view选图像话题 | 画面正常,不黑屏 |
| 语音 | 发/voiceWords | 蓝牙耳机有播报 |
从那以后我每次上车都先跑一遍/scan频率和rosnode list,再动底盘;建图前一定把初始位置记下来,导航前一定先给 2D Pose Estimate。这套顺序看着笨,但能少很多“看着都启动了、车就是不走”的返工。这套配置顺序和启动命令我整理在资源包里,复现时按工作空间目录取用即可。希望帮到你。
本文还有配套的精品资源,点击获取