1.TurtleBot3系列机器人简介



ROS支持的机器人可以在相关wiki(http://robots.ros.org/)上找到。有大约180种。其中一些包括由个人开发者公开发布的自制机器人,但是如果考虑到这是由单一系统支持的机器人的话,却是不少的数量。其中最著名的是Willow garage开发的PR2和TurtleBot。两者都是Willow garage或Open Robotics(前称OSRF)参与开发的机器 人,也是ROS的标准平台。在本章中,我们将重点讨论这两者中以普及型为目的开发的TurtleBot3机器人。
TurtleBot是ROS的标准平台机器人。这里的turtle来源于1967年开发的乌龟机器人。这款机器人是为了用教育计算机编程语言Logo1控制实际机器人而开发的。另外,在ROS基础教程中首先出现的turtlesim节点是一个模仿Logo turtle2程序的命令体系而制作的程序。如图所示,乌龟图标甚至成为了ROS的象征。不仅如此,ROS标志中使用的9个点也来自龟背壳。源于Logo的乌龟的Turtlebot,旨在通过TurtleBot向ROS新手轻松教授ROS的用法(这与Logo的目的类似,Logo的目的是利用Logo语言轻松教授计算机编程语言)。从第一代TurtleBot开始,近10年来,TurtleBot已经成为开发者和学生使用最多的ROS标准平台。
为了普及ROS,以iRobot公司的基于Roombar的研究机器人Create为基础而开发4。它于2010年开发,自2011年起开始销售。然后在2012年,Yujin Robot公司开发出了以基于iCLEBO的研究机器人Kobuki为基础的TurtleBot2。在2017年开发的TurtleBot3弥补了TurtleBot1和TurtleBot2中的不足点,且采纳了用户们的新的需求。TurtleBot3的驱动部采用了ROBOTIS公司的智能舵机Dynamixel。
TurtleBot3是一个小型、低成本、可编程的基于ROS的移动机器人,其目的是用于教育、科研、爱好者作品和产品原型。TurtleBot3的目标是在不牺牲功能和品质的前提下大幅缩小平台的尺寸且降低价格,同时将机器人组件根据用户的需求更改或扩展。根据用户如何选择部件,如机械部件、计算机和传感器,TurtleBot3可以通过各种方法进行定制。此外,TurtleBot3采用了比现有的PC更经济、更小巧,并且适合嵌入式系统的SBC(单板计算机),还应用了距离传感器和3D打印等最新技术。
TurtleBot35有TurtleBot3 Burger、Waffle和Waffle Pi三种官方型号。如不特指,本书中将以TurtleBot3 Burger为例进行说明。此外,TurtleBot3还有如TurtleBot3 Monster、Tank、Carrier等TurtleBot3 + 【后缀】的多种型号。TurtleBot3的基本组件有:用于驱动的舵机、用于运行ROS的SBC、用于SLAM和导航(Navigation)的传感器、可变形的结构件、用作中层控制器的嵌入式控制器OpenCR、兼容轮胎和履带的链轮,最后还有11.1V的锂聚合物电池。Waffle型号的特点是:其形状更易于装载物体、采用扭矩更大的舵机、采用基于Intel处理器的SBC、使用360度距离传感器LDS(Laser Distance Sensor),还有用于三维识别的深度摄像机(Depth Camera)IntelRealSense。TurtleBot3 Waffle Pi与Waffle具有相同的外形,但Waffle Pi的单板机采用了与Burger相同的Raspberry Pi,并且相机采用了RaspberryPi Camera,因此大大提高了性价比。
此外,TurtleBot的所有硬件结构信息都已在云共享三维CAD Onshape中公开,Onshape可供多人同时使用智能手机、平板电脑以及网页浏览器查看 。您可以在网页浏览器中查看TurtleBot3的每个组件,也可以把想修改的零件下载到您的资源库,通过修改设计出自己想要的零件。也可以下载相关的STL文件后, 用3D打印机打出零件。每个型 号的公开文件可以在TurtleBot3的官方wiki6的附录提供的Open Source项目中找到。
TurtleBot3官方维基:http://turtlebot3.robotis.com
TurtleBot3的开源硬件
OpenCR: https://github.com/ROBOTIS-GIT/OpenCR-Hardware
TurtleBot3 Burger: http://www.robotis.com/service/download.php?no=676
TurtleBot3 Waffle: http://www.robotis.com/service/download.php?no=677
TurtleBot3 Waffle Pi: http://www.robotis.com/service/download.php?no=678
TurtleBot3 Friends OpenManipulator Chain: http://www.robotis.com/service/download.php?no=679
TurtleBot3 Friends Segway: http://www.robotis.com/service/download.php?no=680
TurtleBot3 Friends Conveyor: http://www.robotis.com/service/download.php?no=681
TurtleBot3 Friends Monster: http://www.robotis.com/service/download.php?no=682
TurtleBot3 Friends Tank: http://www.robotis.com/service/download.php?no=683
TurtleBot3 Friends Omni: http://www.robotis.com/service/download.php?no=684
TurtleBot3 Friends Mecanum: http://www.robotis.com/service/download.php?no=685
TurtleBot3 Friends Bike: http://www.robotis.com/service/download.php?no=686
TurtleBot3 Friends Road Train: http://www.robotis.com/service/download.php?no=687
TurtleBot3 Friends Real TurtleBot: http://www.robotis.com/service/download.php?no=688
TurtleBot3 Friends Carrier: http://www.robotis.com/service/download.php?no=689
TurtleBot3的开源软件
https://github.com/ROBOTIS-GIT/OpenCR
https://github.com/ROBOTIS-GIT/turtlebot3
https://github.com/ROBOTIS-GIT/turtlebot3_msgs
https://github.com/ROBOTIS-GIT/turtlebot3_simulations
https://github.com/ROBOTIS-GIT/turtlebot3_applications
2.TurtleBot3系列机器人仿真环境搭建
(1)安装环境依赖
sudo apt-get install ros-melodic-joy ros-melodic-teleop-twist-joy ros-melodic-teleop-twist-keyboard ros-melodic-laser-proc ros-melodic-rgbd-launch ros-melodic-depthimage-to-laserscan ros-melodic-rosserial-arduino ros-melodic-rosserial-python ros-melodic-rosserial-server ros-melodic-rosserial-client ros-melodic-rosserial-msgs ros-melodic-amcl ros-melodic-map-server ros-melodic-move-base ros-melodic-urdf ros-melodic-xacro ros-melodic-compressed-image-transport ros-melodic-rqt-image-view ros-melodic-gmapping ros-melodic-navigation ros-melodic-hector-slam
(2)安装TurtleBot3仿真功能包
cd ~/catkin_ws/src/
git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git
git clone https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
注:以上三行不用运行,可以直接在资料区的TurtleBot3文件夹下载turtlebot3.zip
cd ~/catkin_ws && catkin_make
(3)模型配置
将模型文件拷贝到 .gazebo 中,快速加载gazebo (需要运行至少一次才会自动创建,也可以自行创建)
在资料区的TurtleBot3文件夹下载models.zip,解压后把该文件夹下所有的模型移动到~/.gazebo/models/
使用以下指令把仿真包里面的模型复制到~/.gazebo/models/
cp -r ~/catkin_ws/src/turtlebot3_simulations/turtlebot3_gazebo/models/turtlebot3_burger ~/.gazebo/models/
3.Slam建图
(1)运行Gazebo,加载仿真模型
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch
gazebo启动常见报错解决方法,报错1 可以忽略。
报错1:
#1."[Err] [REST.cc:205] Error in REST request "报错解决方法
sudo gedit ~/.ignition/fuel/config.yaml
#用 # 注释掉 : https://api.ignitionfuel.org
#添加 url: https://api.ignitionrobotics.org
报错2:
#2 "VMware: vmw_ioctl_command error 无效参数 "报错解决方法
echo "export SVGA_VGPU10=0" >> ~/.bashrc
source ~/.bashrc
(2)运行SLAM
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_slam turtlebot3_slam.launch
(3)使用键盘操作Turtlebot,进行建图
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

(4)保存地图
mkdir -p ~/maps/housemap
$ rosrun map_server map_saver -f ~/maps/housemap/housemap
4.自动驾驶仿真
(1)运行Gazebo,加载仿真模型
$ export TURTLEBOT3_MODEL=waffle
$ roslaunch turtlebot3_gazebo turtlebot3_house.launch
(2)启动自动驾驶
export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_navigation turtlebot3_navigation.launch map_file:=/home/XXX/maps/housemap/housemap.yaml
注: #XXX修改成自己本地路径;以上从roslaunch开始 是一行指令
接下来首先要做的是调整RViz中turtlebot在地图中的位姿,使其与Gazebo中turtlebot在环境中的位姿一致。做法是用鼠标选中RViz工具栏中的“2D Pose Estimate”,左键点击选中位置,不放调整姿态。然后根据Gazebo中tuetlebot的位姿点击RViz地图中的相应位置,注意姿态也要相同。
(3)远程操作Turtlebot

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch
控制小车缓慢旋转一到两圈,便可使小车根据周围特征找到自己确切位置。可以通过观察激光 scan与地图边缘重合性判断自定位效果。调整完成后关闭该节点,避免干扰自动驾驶控制信号。
(4)给定目标点
鼠标选择工具栏中的“2D Nav Goal”,在地图中任意设置一个目标位姿,turtlebot便会自动规划路径,进行自动驾驶。
