机器人操作系统(ROS)是一个用于编写机器人软件的灵活框架。它是一系列工具,库和约定,旨在简化在各种机器人平台上创建复杂而强大的机器人行为的任务。
为什么?因为创建真正强大的通用机器人软件是很难的。从机器人的角度来看,对于人类来说似乎微不足道的问题在任务和环境的实例之间经常变化很大。处理这些变化是非常困难的,没有一个人,实验室或机构可以希望自己去做。
因此,ROS是从头开始构建的,以鼓励协作机器人软件开发。例如,一个实验室可能有专家来绘制室内环境,并且可以贡献世界一流的地图制作系统。另一组可能有使用地图导航的专家,而另一组可能已经发现了一种能够很好地识别小物体的计算机视觉方法。ROS是专门针对这些团体设计的,以协作和建立彼此的工作,如本网站所述。
本篇是我们机器人底盘开发教学的第二篇,将会介绍ROS系统的安装与配置,以及讲述一些简单的例程,让大家可以体验到ROS系统的神奇之处,同样,我们也需要在PC和嵌入式硬件上都安装ROS,但是,由于两者步骤相同,在这里将简化为一章介绍。
ROS到目前为止已经发行了许多个版本,他们之间的安装过程除了一些细微的差别之外,大体相同,其中最稳定,资源最丰富的版本就是indigo,这里先介绍indigo的安装过程,其他版本的区别将会后面一一提到。
设置你的locale
Boost和一些ROS工具需要系统locale被设置,你能如下设置它:
sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX
设置软件中心
在菜单中找到如下窗口,将"restricted," "universe," and "multiverse."的软件源全部勾选,如下图所示,并保存。
Ubuntu 14.04(Trusty armhf)设置镜像源命令如下:
sudo sh -c 'echo"deb http://packages.ros.org/ros/ubuntu trusty main" >/etc/apt/sources.list.d/ros-latest.list'
设置你的秘钥
wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -O - | sudoapt-key add -
更新的Debian包索引
sudo apt-get update
所有版本的ROS都提供3种方式的安装,分别是基本版、完整版和添加特定的工具包,安装命令分别如下:
完全版安装:(推荐):包括ROS,rqt,rviz,机器人通用库,2D / 3D模拟器,导航和2D / 3D感知
sudo apt-get install ros-indigo-desktop-full
基本版安装:ROS,rqt,rviz和机器人通用库
sudo apt-get install ros-indigo-desktop
单个软件包:您还可以安装特定的ROS软件包
sudo apt-get install ros-kinetic-PACKAGE
PACKAGE用包的名字替换掉,例如:
sudo apt-get install ros-kinetic-slam-gmapping
要找各种工具包的名字,使用:
apt-cache search ros-kinetic
对于刚接触ROS系统的使用者来说,这里推荐完整版安装,可以节省我们去配置各种工具包的时间。
由于完整的ROS系统比较大,安装过程需要等待比较长的时间,一般在数个小时左右,当安装完成之后,我们就可以着手对其进行配置,让它更加方便使用。
开机自动启动
将ROS的系统变量自动添加到~/.bashrc中,每次启动shell时自动加载:
echo "source/opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc
初始化
在使用ROS之前,您需要初始化rosdep。rosdep使您能够轻松地为要编译的源安装系统依赖关系,并且需要在ROS中运行一些核心组件。
sudo rosdep init
rosdep update
获得rosinstall
rosinstall是一个经常使用的ROS单独发行的命令行工具。用这个命令使你可以轻松地下载许多源代码树的ROS包。
在ubuntu上加载这个工具,运行:
sudo apt-get install python-rosinstall
确认系统信息,输入:
lsb_release –a
回显如下:
说明已经安装配置完成。下面我们可以开始运行几个简单的例程,开始体验ROS系统的有趣之处了~~
注意:如果想要安装其他版本的ROS系统,只需要将上述教程中的“indigo”换成你想要安装的版本的名字即可,例如groovy, hydro, kinetic等。
本教程介绍ROS文件系统概念,包括命令行工具roscd、rosls和rospack的使用。我们将会用到ros-tutorials程序包,请先安装:
sudo apt-get install ros-
将
文件系统概念:
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest (package.xml): 清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
文件系统工具
程序代码是分布在众多ROS软件包当中,当使用命令行工具(比如ls和cd)来浏览时会非常繁琐,因此ROS提供了专门的命令工具来简化这些操作。
rospack允许你获取软件包的有关信息。在本教程中,我们只涉及到rospack中find参数选项,该选项可以返回软件包的路径信息。
用法:
rospack find [包名称]
例如:
rospack find roscpp
会输出:
YOUR_INSTALL_PATH/share/roscpp
使用roscd
roscd是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。
用法:
roscd [本地包名称[/子目录]]
例如:
roscd roscpp
为了验证我们已经切换到了roscpp软件包目录下,现在我们可以使用Unix命令pwd来输出当前工作目录:
Pwd
你应该会看到:
YOUR_INSTALL_PATH/share/roscpp
你可以看到YOUR_INSTALL_PATH/share/roscpp和之前使用rospack find得到的路径名称是一样的。
注意,就像ROS中的其它工具一样,roscd只能切换到那些路径已经包含在ROS_PACKAGE_PATH环境变量中的软件包,要查看ROS_PACKAGE_PATH中包含的路径可以输入:
echo $ROS_PACKAGE_PATH
本节教程假设使用者已经安装了catkin(安装好的ROS一般是自带的)并获取了你的环境。在进行ROS的开发之后,我们通常会把我们开发出来的项目放到同一个目录下方便管理,这个目录就是我们的工作空间,但首先,我们需要创建一个工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
即使工作区是空的(“src”文件夹中没有包,只有一个CMakeLists.txt链接),您仍然可以编译工作区:
cd ~/catkin_ws/
catkin_make
catkin_make命令可以非常方便地编译catkin工作区。现在你可以开始在这个工作空间中创建自己的ROS包了
一个程序包要想称为catkin程序包必须符合以下要求:
•该程序包必须包含catkin compliant package.xml文件
◦这个package.xml文件提供有关程序包的元信息。
•程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
•每个目录下只能有一个程序包。 ◦这意味着在同一个目录下不能有嵌套的或者多个程序包存在。
最简单的程序包也许看起来就像这样:
my_package/
CMakeLists.txt
package.xml
开发catkin程序包的一个推荐方法是使用catkin工作空间,但是你也可以单独开发(standalone)catkin软件包。一个简单的工作空间也许看起来像这样:
如果全部步骤完成,树莓派和PC均能正常连接如局域网,则可以认为Ubuntu系统已经配置完成,并进入到下一章《ROS系统入门》。