TurtleBot2在ROS Melodic下的完整安装、仿真与真机实战指南
2026/9/15 17:26:26 网站建设 项目流程

如果你跟我一样,手里有一台二手turtlebot2,想在ROS上把它跑起来,那这篇东西应该能帮你省下至少一个周末。我知道现在满屏都是turtlebot3、ROS2、各种视觉导航平台,但turtlebot2依然是一个非常值得折腾的入门机器人。它结构简单、驱动开源、资料多到发霉,几乎所有你搜得到的ROS移动机器人教程,早年都是用turtlebot2跑的。这篇文章不会只给你复制粘贴的命令,我会把“为什么这么装”“装完之后怎么确认成功”“仿真和真机分别怎么起”都讲一遍,顺便把新手最容易踩的坑也抖出来。

不管是学生做课程设计、实验室买回来的二手设备、还是纯粹想学ROS的小白,只要你手里真的有一台turtlebot2,或者你只是想在Gazebo里模拟一台turtlebot2,这篇文章都适用。我会尽量说得细一点,但不会啰嗦到让你睡着。

1. 为什么我在这个时间点还劝人用turtlebot2

1.1 turtlebot2没有过时,只是换了一种存在方式

turtlebot2这台机器人是Willow Garage和Yujin Robot合作推出的,底座是Kobuki,上面可以放Kinect、激光雷达、屏幕和笔记本。它在2012年前后火遍全球高校,ROS1时代的教科书、论文、开源包、视频课程里,到处都有它的身影。

现在ROS2确实越来越主流,turtlebot3也成了很多人的首选。但问题是,turtlebot3的价格并不便宜,除非你只买核心传感器做桌面小车,否则一整台带雷达和导航模块的turtlebot3,预算怎么也得往上升不少。turtlebot2在二手市场反而很常见,很多实验室更新设备后,老turtlebot2会被淘汰出来,价格非常感人。你要是预算有限,又不想从零造轮子,它就是一个性价比极高的选择。

更重要的是,turtlebot2的软件栈没有那么多“黑盒”。它用的是Kobuki底座,驱动名叫kobuki_driver,跑在ROS1上。你可以直接看到底层节点、串口通信、速度指令是怎么传的。相比之下,turtlebot3的软件栈虽然也开源,但很多东西已经被抽象得比较干净,对初学者来说反而少了那种“拨开面团见面粉”的乐趣。

1.2 什么基础的人适合拿它入门

如果你已经会Linux基本操作、知道终端是什么、能看懂几个简单命令,那你拿turtlebot2学ROS是完全可行的。你不需要懂复杂的机械原理,也不需要会写C++,因为turtlebot2的官方功能包已经帮你把底盘、里程计、雷达驱动都写好了,你需要做的只是把它们跑起来,然后通过ROS的topic和launch文件去理解一台移动机器人是怎么工作的。

我没有骗你,我在实验室带过好几个零基础的同学,他们从拆箱到跑起来,基本都是两三天搞定。当然,前提是有人帮他们把环境装好,或者他们自己愿意按教程一步步踩坑。如果你完全没碰过Linux,那我建议你先把cd、ls、sudo、vim这几个命令玩熟,再来动ROS,不然很容易被一个权限问题卡到怀疑人生。

2. 先别急着敲命令:版本选型决定了你会不会半路弃坑

2.1 Ubuntu换不换?我把版本对应关系放在这里

ROS1一共有几个主力发行版,很多新手一上来就装最新版,结果发现turtlebot2的包装不上,才回头来找原因。这里我把对应关系直接列出来,你自己对照:

ROS版本支持的Ubuntu版本turtlebot2相关包的情况
KineticUbuntu 16.04最经典的搭配,老教程几乎都是这个
MelodicUbuntu 18.04官方二进制包齐全,我个人最推荐
NoeticUbuntu 20.04部分包需要源码编译,能跑但不省心
ROS2 HumbleUbuntu 22.04没有官方turtlebot2 ROS2支持,需要自己移植

如果你手头有Ubuntu 18.04的镜像或者电脑允许装双系统,那就直接用18.04加Melodic。这个组合下,几乎所有turtlebot2相关功能包都能通过apt直接安装,不需要跟源码和依赖搏斗。如果你只有Ubuntu 20.04并且不愿意换系统,那也可以跟着装Noetic,但你要有这个心理准备:turtlebot2的Sensor驱动、3D传感器相关的东西可能要在源码层面折腾。

虚拟机的问题也顺便说一句:纯学ROS、跑仿真没问题,但如果你要接真实kobuki底座,请尽量不要用虚拟机。因为虚拟机里的USB设备透传虽然能用,但串口传输延迟和权限配置都容易出幺蛾子。有条件就实体机装Ubuntu,或者至少用WSL2加USB/IP方案,但那个配置复杂度又上去了,不推荐新手第一周就干这个。

2.2 为什么推荐Melodic而不是Noetic

Noetic是ROS1最后一个版本,按理说新功能多、长期支持更好,但turtlebot2这个项目太老了。你可以理解成一款老打印机,它在Windows 7下驱动很稳,到了Windows 10就不是不能用,只是总得手动折腾。

我在一台Ubuntu 20.04机器上试过用Noetic跑turtlebot2,先说结论:可以跑,但比Melodic多花了不少时间。比如turtlebot_bringup需要在源码里改动部分依赖声明,openni_launch这种老相机驱动在Noetic里也会因为OpenCV版本问题报错。如果你只是想学习ROS和移动机器人,没必要把时间浪费在这些兼容性问题上。

这就像你学车,第一台练习车不用是豪华新车,一辆破捷达反而能让你把油离配合练得更扎实。turtlebot2配Melodic就是那辆破捷达,一切教科书命令都能原样复现,遇到问题也搜得到答案。

3. 用鱼香ROS一键安装把ROS环境拉起来

3.1 一条脚本搞定ROS,省下的时间够你多踩三个坑

提到安装ROS,很多教程还在让你去官方源手动加sources.list、加密钥、更新、再安装。这条路本身没问题,但如果你在国内网络环境,官方源可能慢到让你怀疑人生。手动配置镜像源也不是不行,只是新手容易在某个环节漏掉一个空格或者配错版本号。

这时候我强烈推荐鱼香ROS的一键安装脚本。这个脚本在圈内已经很出名了,它支持Ubuntu系统,会自动识别系统版本,让你选择要装的ROS版本,甚至可以顺带帮你把Gazebo、rosdep源这些问题一起处理掉。你不需要记住复杂的镜像地址,也不需要研究密钥文件放到哪里,按脚本提示选择,剩下的交给它。

安装命令一般是这样的:

wget http://fishros.com/install -O fishros && . fishros

执行后会看到一个交互菜单,里面有很多选项,比如“一键安装ROS”“配置rosdep”“安装Gazebo”等。我不建议一次性全选,先安装ROS,装完了再回来跑一遍脚本选配置rosdep,这样每一步出问题你都能定位到是哪个环节。

有一点我必须提醒你:脚本执行过程中可能要求你输入sudo密码,这是正常的,因为安装ROS需要系统权限。另外,脚本会往你的~/.bashrc里写入ROS环境变量,装完之后记得source ~/.bashrc,或者直接关掉终端重开一个。

3.2 装完ROS之后必须立刻做的事

不管你是用脚本装的还是手动装的,装完ROS之后第一件事不是急着下载turtlebot2,而是确认你的ROS环境真的可用了。开一个终端,敲:

roscore

如果能看到一串日志输出,最后停在started core service [/rosout],说明ROS核心节点已经能跑起来。如果提示roscore: command not found,大概率是环境变量没生效,检查一下/opt/ros/melodic/setup.bash有没有被source。

确认roscore能跑之后,再打开一个新终端,测试一下:

rospack list

这个命令会打印当前ROS环境下能找到的所有功能包。后面装完turtlebot2,你也可以用rospack list | grep turtlebot来确认安装是否成功。

然后创建你的工作空间。不管你是想直接apt安装turtlebot2功能包,还是想从源码编译,工作空间都是必需的。用catkin_make建立工作空间的经典流程是:

mkdir -p ~/turtlebot_ws/src cd ~/turtlebot_ws catkin_make source devel/setup.bash

这时候你的~/turtlebot_ws里会出现srcbuilddevel三个目录。devel/setup.bash就是你自己工作空间的覆盖层环境,每次打开终端都要source它,最好也写进~/.bashrc

4. 装turtlebot2功能包:apt二进制包和源码编译怎么选

4.1 最快的方式:apt直接安装官方二进制包

如果你的Ubuntu版本和ROS版本匹配,那最简单的就是直接用apt安装现成的二进制包。在Ubuntu 18.04 Melodic下,一行命令搞定大部分核心功能包:

sudo apt install ros-melodic-turtlebot ros-melodic-turtlebot-apps ros-melodic-turtlebot-simulator ros-melodic-turtlebot-teleop ros-melodic-kobuki-*

这里我说一下这么装的原因。ros-melodic-turtlebot是一个元功能包,它本身没有代码,但是会把你需要的其他turtlebot相关包作为依赖拉进来,比如turtlebot_bringupturtlebot_descriptionturtlebot_bringup等。turtlebot-simulator则包含Gazebo仿真的内容。kobuki-*这一串通配符是把后面要用到的底盘驱动、键盘遥控、可视化相关包都装上。

装完后可以验证一下:

rospack find turtlebot_bringup rospack find turtlebot_gazebo rospack find kobuki_driver

只要这三条命令能输出对应路径,就说明核心包都在了。这个方法的好处是完全不用碰源码,所有依赖和编译过程都有人帮你处理好,适合只想尽快把机器人跑起来的人。

4.2 想改源码的话,怎么把turtlebot仓库拉下来编译

如果你后面想改turtlebot2的启动流程、想加自己的传感器、或者想研究kobuki驱动源码,那就要走源码编译这条路。turtlebot2的代码主要在GitHub上,可以通过git clone拉到你之前建好的~/turtlebot_ws/src里。

需要拉的核心仓库一般是这几个:

cd ~/turtlebot_ws/src git clone https://github.com/turtlebot/turtlebot.git git clone https://github.com/turtlebot/turtlebot_apps.git git clone https://github.com/turtlebot/turtlebot_simulator.git git clone https://github.com/yujinrobot/kobuki.git git clone https://github.com/yujinrobot/yujin_ocs.git

这里有一个很容易踩的坑:kobuki这个包不是独立就能编译的,它依赖yujin_ocs里的部分子包,比如yocs_controllersyocs_math_toolkit。如果你不把yujin_ocs一起拉下来,编译到一半会报找不到依赖。很多新手在这步卡了很久才反应过来。

拉完源码之后,回到工作空间根目录:

cd ~/turtlebot_ws rosdep install --from-paths src --ignore-src -r -y catkin_make

rosdep install是关键,它会读取每个包的package.xml,自动安装缺失的系统依赖和ROS依赖。如果在国内网络下rosdep下载很缓慢,鱼香ROS一键安装脚本里也有处理rosdep的选项,建议你先跑脚本把rosdep源配好,再回到这一步。

编译完成后,新的功能包会出现在~/turtlebot_ws/devel里,记得source一下。需要说明的是,如果你已经用apt装了相同功能的包,源码包和环境里的二进制包可能会冲突。所以两条路选一条走到黑,不要同时混用。

5. 仿真才是你的第一台机器人,跑起来再说

5.1 启动Gazebo仿真,先看到机器人在场景里动起来

很多人买回turtlebot2第一件事就是插电连电脑,但我的建议是先玩仿真。仿真可以帮你确认功能包装得对不对,还能让你在不出门的情况下熟悉launch文件、topic、rviz这一套ROS工作流。

启动turtlebot2的Gazebo仿真,命令很简单:

roslaunch turtlebot_gazebo turtlebot_world.launch

第一次启动可能会比较慢,因为Gazebo要加载世界模型和机器人模型。如果终端一直停在等待模型下载,或者Gazebo界面变成一片灰暗,多半是模型文件缺失。这个我在后面第7节会详细讲。

看到Gazebo窗口里出现一台turtlebot2小车,并且在世界场景中稳定放置,恭喜你,仿真已经起来了。这时候你可以再开一个新终端,看一下节点和话题:

rostopic list

里面应该有/odom/scan/cmd_vel_mux/input/teleop这些话题。/scan是雷达数据,/odom是里程计数据,/cmd_vel_mux/input/teleop是接收速度指令的话题。

5.2 键盘遥控和rviz到底在看什么

仿真跑起来之后,再开一个终端,启动键盘遥控:

roslaunch turtlebot_teleop keyboard_teleop.launch

终端会显示按键说明,按i前进,按,后退,按jl左右转,按k停止。你按下按键的时候,Gazebo里的小车就会动起来,因为keyboard_teleop节点把键盘按键翻译成了Twist速度消息,发布到了/cmd_vel_mux/input/teleop话题上。

这时候你可能会问,为什么我看到的很多launch文件里控制的都是/cmd_vel,而turtlebot2这里多了一个cmd_vel_mux?这个cmd_vel_mux是Kobuki底盘的“速度多路复用器”,它的作用是让多个远程控制源(键盘、自动驾驶节点、手柄)不能同时抢占底盘,而是按优先级选择谁来发速度。这个设计我在真机上会再提到。

再看可视化的rviz:

roslaunch turtlebot_rviz_launchers view_robot.launch

rviz窗口里你会看到机器人的三维模型、点云、激光射线。如果雷达话题有数据,你会看到一圈表示障碍物的扫描点;如果开了键盘遥控并且小车在动,你还能看到里程计轨迹。对于第一次接触ROS人来说,这个画面比一堆黑底白字的日志直观太多了。

5.3 顺手跑一把gmapping建图

既然仿真都起来了,不做点更酷的事就说不过去了。turtlebot2的标配功能就是SLAM建图,在仿真里可以先体验一下:

roslaunch turtlebot_gazebo gmapping_demo.launch

这会启动gmapping算法,同时打开rviz。然后用键盘遥控让小车在世界里走一圈,你会发现rviz里的地图逐渐被点亮,墙壁和障碍物都变成黑色,未知区域是灰色。这个过程非常上瘾,因为你能亲眼看着机器人“认知”环境。

如果你想保存这张地图,后面还需要安装map_server,运行:

rosrun map_server map_saver -f ~/map

这条命令会把当前地图保存成map.pgmmap.yaml两个文件,以后你可以用它做导航实验。建图这一步在真机上也能做,但真机需要传感器标定、底盘里程计正常,建议先仿真熟练,再上真机。

6. 真机接入前必须搞定的kobuki驱动和权限

6.1 kobuki底座接入电脑之前要有udev规则

从仿真切换到真机,最大的变化是你需要和真实的USB串口打交道。Kobuki底座通过USB线连接到电脑,插上之后系统会识别出一个串口设备,名字通常是/dev/ttyUSB0。但如果你没有配置udev规则,ROS里的驱动节点就没有权限访问这个设备,或者设备名不固定,拔插一次就变了。

kobuki驱动包里提供了一个创建udev规则的工具,运行一下:

rosrun kobuki_ftdi create_udev_rules

执行这个命令的时候注意,它会要求你输入sudo密码,因为它要写文件到/etc/udev/rules.d/。运行完成后,拔掉usb再重新插上,然后看设备节点:

ls -l /dev/kobuki

如果输出里能看到一个指向ttyUSB*的符号链接,说明udev规则生效了。之后kobuki驱动就会默认在/dev/kobuki找设备,不会再被随机命名坑到。

还有一个权限问题也经常出现。如果你的账号不在dialout用户组里,访问串口设备会被拒绝,驱动节点启动时报Permission denied。解决方法很简单:

sudo usermod -a -G dialout $USER

执行完这条命令后一定要注销重新登录,或者重启一下,组权限才会生效。

6.2 用minimal.launch启动底盘,以及cmd_vel_mux是什么

驱动权限搞定后,连接好底盘电源,确认急停开关没有被按下,然后启动机器人底盘:

roslaunch turtlebot_bringup minimal.launch

这个launch会启动kobuki节点的核心驱动,同时会启动一个传感器管理器。如果只有底盘没有雷达,你看到的大概只有/odom/cmd_vel_mux这些基本话题。如果接了雷达或者RGB-D相机,那还要根据你的传感器型号再启动对应的launch片段。

这里不得不提一下cmd_vel_mux,它的存在会让第一次接触turtlebot2的人有点困惑,但理解了之后会觉得设计很巧妙。Kobuki底盘的驱动只订阅一个归一化后的速度话题/cmd_vel_mux/input/teleop或者/cmd_vel_mux/input/navigation,这些输入会进入一个mux节点,mux节点根据每个源的优先级决定最终发给底盘驱动的话题。这样就不会出现多个程序同时发速度指令把机器人搞到疯转的局面。

比如你用键盘遥控时,键盘节点发布到/cmd_vel_mux/input/teleop,而导航堆栈发布到/cmd_vel_mux/input/navigation,mux会保证同一时间只有一个来源生效。这也是为什么你在rostopic list里看到的不是简单的/cmd_vel,而是一堆/cmd_vel_mux/input/xxx

真机测试的时候,不要先急着用导航,先用键盘跑一圈,确认底盘响应正常、里程计更新、急停开关有效。尤其是急停开关,它和ROS无关,是硬件层面的保险,真遇到问题直接拍急停,这是所有实验之前都要讲的安全习惯。

7. 新手最容易踩的坑,我按排查链路给你捋一遍

7.1 一个典型排查过程:从错误提示到定位问题

我在带学生装turtlebot2的时候,发现卡住他们的往往不是同一个问题,但排查思路是共通的。我拿“Gazebo仿真起不来”举个完整的例子,你可以感受一下。

你运行:

roslaunch turtlebot_gazebo turtlebot_world.launch

报错是:

Resource not found: turtlebot_gazebo

这个提示说明ROS没有找到turtlebot_gazebo这个包。先不要急着去重装Gazebo,第一件事是确认这个包到底装没装。用:

rospack find turtlebot_gazebo

如果输出为空,说明包确实不在环境里。这时用apt装:

sudo apt install ros-melodic-turtlebot-simulator

装完再rospack find,如果还是没有,那大概率是你没有source当前的ROS环境。很多新手刚装完包就急着运行,忘了重新source,或者把~/.bashrc里的环境变量覆盖掉了。这时候执行:

source /opt/ros/melodic/setup.bash source ~/turtlebot_ws/devel/setup.bash

然后再运行,基本就好了。

如果包确实存在,但是Gazebo启动后黑色一片,终端提示“Model not found”或者一直卡在下载。这是另一个常见问题:Gazebo默认会从网上拉取模型库,国内访问比较慢。解决办法有两种:一种是设置GAZEBO_MODEL_PATH指向本地模型目录,另一种是用现成的模型下载脚本把模型库放到~/.gazebo/models。鱼香ROS一键安装里也有配置Gazebo模型的选项,可以直接跑。

7.2 几条可以救命的小命令

在我自己的调试过程中,有几条命令几乎是每天都要用的,简单但很救命:

# 查看所有话题 rostopic list # 查看某个话题是否在发数据 rostopic echo /odom # 查看所有节点 rosnode list # 查看包是否被找到 rospack find turtlebot_gazebo # 查看节点之间的通信关系 rqt_graph

如果你发现键盘遥控没反应,先看终端有没有报错,再看rostopic list里有没有/cmd_vel_mux/input/teleop,然后用rostopic echo /cmd_vel_mux/input/teleop看按按键的时候有没有数据。如果没数据,说明键盘节点没起好;如果有数据但车不动,那问题可能出在mux配置或者kobuki驱动上。这种一层层缩小范围的方式,比瞎试有用得多。

还有一个容易被忽略的是,多窗口终端环境下,每个终端的ROS环境可能不一样。你在一个终端里source了devel/setup.bash,另一个新终端如果不source,就可能找不到你编译出来的包。我建议把需要source的两行都写进~/.bashrc,一劳永逸。

另外,apt源和ROS源混装也可能出问题。比如你在Ubuntu 18.04上手动添加了ROS的Noetic源,然后又去装Melodic包,系统会提示你找不到包或者版本冲突。确保你的sources.list里只保留一个ROS版本源,别种了一棵树上还想着另一棵。

最后再说一个关于源码编译的坑,catkin_makeCould not find a package configuration file provided by "kdl_parser"这类错误时,不是turtlebot2的代码有问题,而是你漏了系统依赖。老老实实回到工作空间跑一遍:

rosdep install --from-paths src --ignore-src -r -y

把缺的依赖补上,再catkin_make,多半就过了。不要一上来就怀疑是代码版本太老,很多所谓“编译不过”其实只是依赖没装全。

我现在的习惯是,不管是仿真还是真机,先把roscore跑起来,再单独启动驱动和工具,而不是一次性用一个大launch把所有东西都带上。这样出了问题你知道从哪一层开始查。turtlebot2这个平台虽然老,但只要你把ROS基础打牢,后面换成任何一台机器人,你的这套排查思路都能直接带去新项目里用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询