ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

TurtleBot2从零安装到仿真运行:ROS Noetic环境配置与排障指南

TurtleBot2从零安装到仿真运行:ROS Noetic环境配置与排障指南 1. 先想清楚turtlebot2到底是一台什么样的机器人1.1 硬件底子底盘、传感器与主控分工turtlebot2这个名字听起来像是个玩具但实际上它是基于Yujin Robot的Kobuki底盘搭建的移动机器人开发平台。整机核心就三块Kobuki底盘、可插拔的传感器模块最常见的是Kinect或者激光雷达、以及一台运行ROS的上位机通常是笔记本或树莓派。这里要特意聊一下Kobuki底盘因为它是整套系统里最机器人的部分。Kobuki内部自带两个驱动轮电机、编码器、IMU惯性测量单元、碰撞传感器、跌落传感器和扩展端口甚至还有喇叭和LED灯。它的串口协议是公开的ROS驱动包kobuki_node通过串口和它通信下发的速度指令和回传的里程计数据都走同一根USB线。上位机的作用则是处理传感器数据、跑SLAM和导航算法。常见的做法是笔记本直接放在turtlebot2的第二层支架上USB线把Kinect和Kobuki底盘一起接进去。整套系统的分工非常清晰底盘负责运动和里程计传感器负责感知上位机负责大脑。当初选turtlebot2作为ROS入门平台的用户非常多原因也很直接整套硬件链路短、驱动成熟、资料全。相比自己买电机驱动器从头攒小车turtlebot2能在半天之内把环境跑起来把精力集中在学ROS本身而不是被底层硬件调试拖死。1.2 为啥学ROS都绕不开它ROS生态里被玩得最透的移动机器人平台turtlebot系列排第二没人敢排第一。turtlebot2和turtlebot3虽然外观不同但内核逻辑一脉相承它们都是围绕ROS标准消息类型设计的底盘驱动封装成ROS节点里程计话题/odom、速度控制话题/cmd_vel、TF树这些概念都能在上面直接看到实际效果。我个人的建议是如果你是学生或者刚接触ROS的开发者turtlebot2的入门曲线比从零造的底盘平滑得多。因为它把怎么让电机转起来这件事封装好了你只需要关心发布一个/cmd_vel消息机器人就会动这种直接的正反馈对建立信心特别重要。另外turtlebot2的源码包结构也值得学习。整个功能包组分成turtlebot主配置、turtlebot_apps应用、turtlebot_simulator仿真几个仓库每个仓库里面又按功能拆分比如turtlebot_navigation、turtlebot_teleop、turtlebot_rviz_launchers。这种组织方式本身就是ROS工程管理的范本读一遍源码对理解工作空间和功能包的关系有很大帮助。2. 安装前的环境准备Ubuntu与ROS版本怎么选2.1 硬件要求和虚拟机方案安装turtlebot2的软件环境第一件事是选操作系统和ROS发行版。turtlebot2官方主动支持的ROS版本是ROS 1系列换句话说别指望在ROS 2里找到完整的turtlebot2官方驱动。对系统资源的要求不高4GB内存加双核CPU就能跑起来如果要做Gazebo仿真建议8GB内存以上不然加载模型的时候会卡到怀疑人生。磁盘空间尽量留出20GB以上ROS本体加仿真模型加依赖包轻轻松松就吃掉十来个G。我见过不少人想在虚拟机上装然后连真机底盘这里泼盆冷水如果只是跑仿真虚拟机完全没问题但如果要连真实的Kobuki底盘串口USB设备在虚拟机里的映射偶尔会抽风延迟也会影响实时性。最好的方案是装双系统其次是Windows上的WSL2配合USB passthrough可以一试再退一步才考虑虚拟机。2.2 ROS发行版对应的Ubuntu版本ROS 1的最后一个长期支持版是Noetic对应Ubuntu 20.04。这也是装turtlebot2最省心的组合。再往前的Kinetic对应Ubuntu 16.04已经过时Melodic对应Ubuntu 18.04也能用但很多依赖包不再更新。如果你现在才开始学直接上Ubuntu 20.04 ROS Noetic别犹豫。还要提醒一点不要想着在Windows上直接跑ROS 1除非你想体验一下什么叫无穷无尽的坑。ROS 1的Windows版本体验很一般官方文档都不建议用老老实实装Ubuntu。2.3 ROS本体安装ROS本体安装是整条链路里最基础也是出错率最高的一环。我推荐两种方式按优先级排列方式一鱼香ROS一键安装这是国内社区维护的一键脚本别名鱼香肉丝非常有特色用起来很简单wget http://fishros.com/install -O fishros . fishros执行之后会弹出菜单选择安装ROS再选择对应的发行版这里选Noetic脚本会自动完成换源、添加密钥、安装ros-base或desktop-full等步骤。整个过程大概十几分钟基本不需要干预。注意一键脚本本质上是帮你执行官方文档里的步骤如果你希望搞清楚每一步到底发生了什么装完之后最好还是翻一遍官方安装教程对照着理解一遍。方式二官方四步走官方流程也不复杂适合想搞清楚原理的人手动执行sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update sudo apt install ros-noetic-desktop-fulldesktop-full包含ROS、rviz、Gazebo、tf、navigation等常用库一次装齐省得后面缺啥补啥。装完别忘了初始化rosdepsudo rosdep init rosdep updaterosdep的作用是安装编译源码包时需要的系统依赖比如某个包要用的库、插件等。这一步经常因为网络问题失败多试几次或者用鱼香ROS提供的rosdepc替代版rosdepc init rosdepc update也能解决。装完ROS本体之后把环境变量写进bashrcecho source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc验证一下安装结果roscore如果看到ROS master启动的日志说明ROS本体已经没问题了。3. 获取并编译turtlebot2功能包3.1 创建工作空间与源码获取ROS里的代码不是随便丢到某个目录就能跑的需要按工作空间workspace的规则组织起来。这里用catkin工作空间新建方式如下mkdir -p ~/turtlebot2_ws/src cd ~/turtlebot2_ws/src工作空间的src目录专门存放功能包源码比如从GitHub克隆下来的各种repositories。turtlebot2相关的源码分散在几个仓库里需要分别获取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/turtlebot/turtlebot_msgs.git还要注意turtlebot2的很多功能包依赖于kobuki系列的驱动这些也要一并拉下来git clone https://github.com/yujinrobot/kobuki.git git clone https://github.com/yujinrobot/kobuki_msgs.git git clone https://github.com/yujinrobot/kobuki_desktop.git另外还有几个 зависимые包比如kobuki的依赖包git clone https://github.com/yujinrobot/yujin_ocs.git这个yujin_ocs包比较大里面包含yocs_controllers、yocs_velocity_smoother等turtlebot2运行时必需的组件。如果GitHub访问速度慢可以考虑用镜像加速或者用--depth 1只拉取最新提交减少下载量git clone --depth 1 https://github.com/yujinrobot/yujin_ocs.git3.2 编译顺序与依赖安装所有源码都放在~/turtlebot2_ws/src之后回到工作空间根目录用catkin_make编译cd ~/turtlebot2_ws catkin_make第一次编译大概率会报错因为缺少系统级依赖。常见的报错有Could not find a package configuration file provided by XXX这时候就需要rosdep出马了cd ~/turtlebot2_ws rosdep install --from-paths src --ignore-src -r -y这个命令的意思是扫描src目录下所有功能包申明的依赖然后自动安装。-y参数表示自动确认-r表示遇到错误继续尝试后续依赖推荐加上不然卡在某个依赖上就啥也装不了。rosdep install跑完之后再执行catkin_make如果还有报错手动补装依赖就行。这里列几个turtlebot2编译时经常缺的包sudo apt install ros-noetic-ecl-streams ros-noetic-ecl-threads ros-noetic-ecl-geometry ros-noetic-yaml-cpp sudo apt install ros-noetic-sound-play ros-noetic-ar-track-alvar ros-noetic-openni2-launch sudo apt install ros-noetic-dynamixel-workbench-toolbox再执行catkin_make如果还有报错就继续根据提示补依赖这个过程可能需要循环几轮。最终的编译输出应该类似[ 99%] Built target turtlebot_teleop [100%] Built target turtlebot_bringup看到100%就说明所有代码都编译通过。这时候在src目录下会生成devel和build两个文件夹devel里是编译好的可执行文件和setup.bash。3.3 配置环境变量编译完成后需要把工作空间的devel/setup.bash写入bashrc否则每次新开终端都要手动sourceecho source ~/turtlebot2_ws/devel/setup.bash ~/.bashrc source ~/.bashrc这里有个细节如果系统里还装了其他ROS工作空间多个source的先后顺序会影响功能包查找优先级。一般原则是让当前的工作空间最后被source这样它里的同名功能包会覆盖系统里其他空间的同名功能包。验证工作空间是否生效可以看ROS_PACKAGE_PATH环境变量echo $ROS_PACKAGE_PATH输出里应该包含/home/用户名/turtlebot2_ws/src的路径。如果看到了说明turtlebot2的功能包已经可以被ROS正确索引。4. 启动仿真与真实机器人底盘4.1 纯仿真启动流程没有实体机器人的时候Gazebo仿真就是最好的练习场。turtlebot2的Gazebo模型都在turtlebot_simulator包里启动命令如下roslaunch turtlebot_gazebo turtlebot_world.launch这个launch文件会启动一个包含turtlebot2模型的Gazebo世界默认的world是一个带环墙的室内场景适合测SLAM和导航。看到Gazebo窗口里出现一个黑色圆底盘、上面还顶着一圈激光雷达的小车就说明启动成功。注意第一次启动Gazebo会比较慢因为要加载模型资源可能耗时几分钟。如果卡住不动检查一下~/.gazebo目录有没有模型文件缓存或者考虑把gazebo的模型包单独下载放到~/.gazebo/models下。Gazebo起来之后另开一个终端启动rviz显示传感器数据roslaunch turtlebot_rviz_launchers view_robot.launchrviz窗口里会显示turtlebot2的模型、激光点云、坐标系变换等。这时候再开一个终端用键盘遥控roslaunch turtlebot_teleop keyboard_teleop.launch键盘终端会显示按键说明w前进、s后退、a左转、d右转。按几下w看rviz里的小车位置有没有变化Gazebo里的小车有没有移动整个数据链路就通了。仿真模式下还可以直接跑SLAMroslaunch turtlebot_gazebo gmapping_demo.launch roslaunch turtlebot_rviz_launchers view_navigation.launch遥控小车在地图里转一圈就能看到地图逐步被建出来这个成就感非常强。4.2 真实kobuki底盘连接有实体Kobuki底盘的话连接流程比仿真稍微复杂一点主要卡在设备权限和通信配置上。先把USB线从底盘接到电脑查看设备号ls /dev/ttyUSB*正常情况下会出现ttyUSB0如果没有检查USB线是不是数据线很多线只能充电不能传数据或者换一个USB口。接着给串口设备加权限sudo chmod 666 /dev/ttyUSB0这个命令临时有效重启后会恢复。一劳永逸的做法是把当前用户加入dialout组sudo usermod -a -G dialout 用户名/dev/ttyUSB0的所有者是dialout组加进组之后重启系统或者重新登录之后不需要每次改权限。Kobuki底盘驱动通过kobuki_node包启动但turtlebot2的bringup封装好了全套流程roslaunch turtlebot_bringup minimal.launch如果一切正常终端会输出底盘连接信息同时底盘上的LED灯会变色。再用键盘遥控试一下看底盘是否响应。这里有个容易踩坑的地方Kobuki底盘的串口波特率是115200有些仿制的底盘或第三方设备用的波特率不同需要在kobuki_node的配置里改。4.3 确认TF树和里程计数据不管是仿真还是真机启动完成后都要检查数据链路是否完整。用rqt_tf_tree看一下TF树确认odom、base_footprint、base_link、laser这些坐标系都在rosrun rqt_tf_tree rqt_tf_tree正常的TF树应该是odom到base_footprint到base_link再到laser或camera_depth_frame这样的父子关系。如果坐标系缺失或跳变后续的导航和SLAM都会挂掉。再检查里程计话题rostopic echo /odom -n 5能连续输出位姿数据说明底盘驱动工作正常。到这里turtlebot2的安装和基本通信就全部完成了。5. 常见问题与排查技巧5.1 编译报错排查找不到头文件和包编译时的报错千奇百怪但我遇到的90%都是依赖缺失。分辨方法很简单报错信息里如果出现fatal error: XXX.h: No such file or directory那是缺系统库如果是Could not find a package configuration file provided by XXX那是缺ROS功能包。针对缺系统库的情况先搜索一下这个头文件属于哪个包apt search 包名比如ecl_geometry缺了就安装sudo apt install ros-noetic-ecl-geometry针对缺ROS功能包的情况用rosdep统一装cd ~/turtlebot2_ws rosdep install --from-paths src --ignore-src -r -yrosdep没覆盖到的包手动克隆到src目录再编译。这里有一个技巧不要一股脑都克隆到src再一次性编译最好按需添加编译过了再加新包这样出问题时能快速定位。5.2 串口权限和通信失败连接真实Kobuki底盘时最头疼的是串口问题。症状一般是launch报错Failed to open serial port或者Permission denied。排查思路如下确认设备节点存在ls /dev/ttyUSB*确认权限ls -l /dev/ttyUSB0看用户是否在dialout组看硬件连接换线、换口、换电脑交叉验证用minicom直接测串口通信sudo apt install minicom minicom -D /dev/ttyUSB0 -b 115200在minicom界面里按几次回车如果能看到底盘返回的响应字符说明物理链路是通的。如果minicom都没反应那就不是ROS的问题是硬件连接或驱动问题先处理底层的串口通信再说。5.3 终端环境问题和roscore冲突另一个常见问题是在终端里能启动节点但总是找不到功能包报了package turtlebot_bringup not found。这基本都是环境变量没source对。排查方法rospack find turtlebot_bringup如果输出带路径说明能找到如果报[rospack] Error: package turtlebot_bringup not found检查bashrc里有没有source工作空间以及当前终端是否重新加载过环境变量。记住一个原则改完bashrc一定要开新终端或者执行source ~/.bashrc别在旧终端里愣。还有不定期会碰到一个诡异情况一个终端里跑了roscore另一个终端里launch某些节点时日志提示无法连接master。先ps -e | grep roscore确认roscore是否真的在跑再echo $ROS_MASTER_URI看指向的地址。一般的坑是手动设置了ROS_MASTER_URI指向了别的机器或端口导致找不到master。5.4 仿真性能问题Gazebo仿真卡顿是个老生常谈的问题。如果启动turtlebot_world.launch之后小车移动像幻灯片一样先看看CPU占用top如果Gazebo进程占用超过100%说明计算资源已经到瓶颈。可以试试关闭Gazebo的图形渲染改用无界面模式或者降低传感器更新频率。一个更简单的办法是减少同时启动的传感器数量——turtlebot2默认带的激光雷达和摄像头如果都开性能压力会大不少。如果只是想练导航不需要摄像头可以在launch文件里注释掉摄像头相关部分或者用arg参数控制是否加载。6. 最后说点实在的整个turtlebot2安装流程走下来给我最大的感受是它的资料虽然老但正因为老所以踩坑记录特别多什么奇怪问题都能搜到解决方案。这在开源生态里是巨大的优势你不用从零开始试错前人已经把路铺得差不多了。装完环境之后建议先别急着上导航和SLAM用键盘遥控让它在地上转几圈观察rviz里各话题的数据变化对ROS的消息通信机制建立一个直观认知。这是整个学习过程里最值得花时间的一步。另外如果后面有条件强烈建议入手一台真实的Kobuki底盘哪怕只是闲鱼收个二手的。仿真做得再好和真机运行之间的差距还是很明显电机的延迟、轮子打滑、里程计漂移、电池电量变化这些在仿真里根本体验不到。把这些非理想因素真正跑一遍你对机器人系统的理解会上一个台阶。最后再分享一个小技巧每次启动之前养成检查环境变量的习惯尤其在你后来装了多个工作空间的情况下。很多莫名其妙的bug最后都发现是环境变量指错了地方。用echo $ROS_PACKAGE_PATH确认一下十秒钟换一晚上安心。
返回列表