Turtlebot
机器人)作为一名工信部直属某工科大学计算机专业的学生,我直到大二上完跟实验室项目组干活才真正体验到什么叫做计算机专业的“研究”、“摸索”、“自学”。这个过程确实是很艰难的,每天面临一个又一个意想不到的bug、系统错误、版本不兼容,短短几个月之内各大论坛网站翻了个遍,英文阅读水平也被迫得到了极大提升,你不知道哪个时刻你的精神就会随着系统一起崩溃。
因此本着救人一命胜造七级浮屠(皮 的精神,我把自己安装调试的全过程记录下来,希望能对广大刚入门的同学们有一些些微小的帮助。
以我的经验,很多人打开一个图文教程最想先知道的就是,这份教程对我来说是不是天书。很多新入门的同学会期待一份“零基础十分钟快速入门教程”,但是凭借我大学两年多入了无数次各种门的经验,我认为不存在这种事情(至少在大部分计算机专业相关的领域不存在这种事)。Alinx
公司推出的 Zynq
开发板教程里说的很好,“零基础”也是相对的,如果你基本的电路图都看不懂,C语言数组和指针都不知道是什么东西,这样的基础是负基础,不适合入门这个领域。
学习本教程需要你懂得以下知识:
给ROS入门级初学者的一些建议:
Ubuntu
与ROSUbuntu
,一种Linux,桌面系统友好;ROS,机器人操作系统的缩写,欲知详细定义请百度。Ubuntu
版本和ROS版本是严格一一对应的,如下表所示:
Ubuntu版本 | ROS版本 | Gazebo版本 |
---|---|---|
Ubuntu 14.04 Trusty Tahr | ROS Indigo Igloo | Gazebo 2.X 2014-2019 |
Ubuntu 16.04 Xenial Xerus | ROS Kinetic Kame | Gazebo 7.X 2016-2021 |
Ubuntu 18.04 Bionic Beaver | ROS Melodic Morenia | Gazebo 9.X 2018-2023 |
第三列的Gazebo是一种仿真软件,在后面的教程中我们会经常使用到。ROS版本和Gazebo版本的对应不是严格的,表格列出的是在安装ROS完整版的时候会自动安装的Gazebo版本。
第一列所列出的 Ubuntu
版本是 Ubuntu
的长期支持版本。
关于 Ubuntu
, 很多教程会教大家使用虚拟机去挂载一个Linux系统,来运行我们的ROS,但无数事实表明,虚拟机与真机相比有太多地方不同,也许你一省了一时的装系统麻烦,却会在后面面临更多兼容性问题。如果真的想要仔细学学机器人,建议直接装真机 Ubuntu
系统。如果你是和我一样只有一台笔记本的学生党,建议百度“双系统安装Ubuntu”,完成安装双系统。若条件允许,建议找一台笔记本安装单独的 Ubuntu
系统,获取更多的存储和计算资源。
本教程基于 Ubuntu 16.04LTS
( win10
双系统)和 ROS Kinetic
。
假定你已经拥有了安装 Ubuntu 16.04
真机的电脑,下面开始安装ROS。
在这里分享一份ROS的安装脚本,可以省去很多手动输入指令和调试的麻烦。这份脚本并非我所写,如有侵权请联系我删除。
#!/bin/bash -e
echo -e "\033[42;37mSetting up your sources.list...\033[0m"
#设置ROS源为清华源
#sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
#设置ROS源为中科大源
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'
#获取公钥
echo -e "\033[42;37mSetting up your keys\033[0m"
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
#安装
echo -e "\033[42;37mInstallating ROS-Desktop-Full...\033[0m"
sudo apt update
sudo apt install ros-kinetic-desktop-full -y
#配置依赖项
echo -e "\033[42;37mInitializing rosdep...\033[0m"
apt search ros-kinetic
sudo rosdep init
rosdep update
#环境变量设置
echo -e "\033[42;37mEnvironment setup\033[0m"
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source /opt/ros/kinetic/setup.bash
source ~/.bashrc
#安装编译功能包所需的依赖项
echo -e "\033[42;37mDependencies for building packages\033[0m"
sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential -y
#把当前用户加入dialout用户组
echo -e "\033[42;37mAdd current user to dialout group.\033[0m"
sudo usermod -a -G dialout $USER
#安装turtlebot官方功能包
echo -e "\033[42;37mInstalling turtlebot packages...\033[0m"
sudo apt install ros-kinetic-turtlebot ros-kinetic-turtlebot-apps ros-kinetic-turtlebot-rviz-launchers -y
sudo apt-get install ros-kinetic-turtlebot-* -y
echo -e "\033[42;37mROS for turtlebot is installed!\033[0m"
在home路径下单击右键创建文档,命名为install_ros.sh
,复制以上代码到该文件,保存
随后打开一个终端(快捷键:ctrl+alt+T),输入以下命令运行该脚本:
./install_ros.sh
脚本中有很多下载和安装的命令,用于安装相关包和依赖包,安装过程会耗时较长。其中最后一个模块安装 turtlebot
,所谓 turtlebot
是一款入门级机器人小车,是我们后面教程机器人部分的主角。经过漫长的等待,脚本安装完成后会提出现以下提示:
且中途没有任何报错,证明安装成功。至此我们成功安装了ROS-Kinetic完整版。如果中途有报错,大多是由于网络的原因(安装过程中要从github下载一些文件,有时候系统会因为网络超时而掐掉进程然后报错),若发现是网络问题则多尝试几次即可,有条件的同学可以买梯子连外网,会快很多。
1.1.4.1 检测ROS核
想要检测安装,可以打开终端用以下命令启动ROS核:
roscore
得到如下的结果:这是ROS启动的master节点,其他所有功能都在启动这一命令的基础上运行。在这里ctrl+C可以退出。
1.1.4.2 检测可视化控制程序Rviz
想要单独测试Rviz程序本身能否运行,只需要以下的命令,单独启动Rviz:
rviz
启动后我们可以看到软件的界面。
随后我们需要测试ROS能否指挥Rviz的启动。注意这与我们手动开启该程序有本质区别,ROS通过他独有的消息发布机制启动其他程序。在启动roscore之后,重新开启一个终端,键入以下命令启动Rviz:
rosrun rviz rviz
回车之后会弹出如下的窗口,这是对机器人和地图的可视化控制程序,这也是我们后面控制机器人经常使用的程序,可以将加载地图、显示路径等操作在有显示器的电脑上可视化。
1.1.4.3 检测仿真软件Gazebo
然后我们测试仿真软件Gazebo。前面提到了,Gazebo是一种仿真软件,在我们上真机之前,或者在没有真机器人的条件下,可以通过仿真来测试我们的项目。我们安装的ROS-Kinetic完整版自动安装了Gazebo7,如果后面有更高版本的需求我们可以重装Gazebo。打开终端通过下面的指令启动Gazebo:
gazebo
但是在你的电脑第一次启动Gazebo的时候会耗费很长时间,这段时间里软件界面是黑屏的,就像下图:
这是由于仿真软件需要加载很多模型,以图形化的方式把所仿真的环境给我们看,诸如球体、圆柱、桌椅板凳,而这些模型文件需要在第一次启动的时候从外网下载。不论有没有梯子,都需要等待相当长的时间。解决这个问题的思路很容易:从别处下载模型文件,再移动到它应该在的目录下即可。使用以下的操作:
# 下载模型文件到根目录:
cd ~
hg clone https://bitbucket.org/osrf/gazebo_models
# 此时根目录下有文件夹gazebo_models,将其移动到~/.gazebo文件夹中,并重命名为models:
mv ~/gazebo_models/ ~/.gazebo/models
此时我们解决了首次启动模型加载的问题。重新启动Gazebo,我们发现可以正常打开啦。
与RViz的情况相同,我们可以通过ROS的消息发布机制来运行Gazebo,并且可以加载我们已经安装的turtlebot机器人模型来尝试仿真。运行以下代码直接打开turtlebot机器人官方的仿真世界(world):
roslaunch turtlebot_gazebo turtlebot_world.launch
Gazebo程序会被启动,是如下的界面:
可以通过鼠标来控制界面的视角,也可以在这个world中添加元素。其中主角就是中央的turtlebot机器人了:
在这里我们还可以运行turtlebot官方提供的代码,通过键盘控制这只机器人移动。在Gazebo开启的基础上,重新打开一个终端,使用以下的命令启动键盘控制节点:
roslaunch turtlebot_teleop keyboard_teleop.launch
点开Gazebo界面,再点开开启键盘控制节点的那个终端(保证该终端在所有窗口之上),就可以依据该终端反馈的信息,通过键盘的 i, j, k, l 等键控制我们的机器人前后左右移动或旋转,还可以增减它的速度,如下:
至此我们的基本软件安装和测试已经完成了。