ROS机器人编程实战(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-21 09:30:37

点击下载

作者:(印度)库马尔·比平(Kumar Bipin)

出版社:人民邮电出版社有限公司

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

ROS机器人编程实战

ROS机器人编程实战试读:

前言

ROS是一个用于实现机器人编程和开发复杂机器人应用程序的开源软件框架。尽管研究团体在开发具有ROS的应用程序方面非常活跃,并且不断增加其功能,但是相关的参考资料和文档的数量仍然不足以满足开发者的需求。因此,本书的目的是提供关于ROS的全面和最新的信息。而ROS目前已经被公认为机器人应用的主要开发框架。

本书的前几章面向初学者,主要介绍了ROS的基本原理和基础。之后开始研究一些高级的概念,首先介绍了 Gazebo/RotorS 的基本概念,其中包括移动机器人、机器臂和微型飞行器,这也正是机器人应用最主要的3个分支。本书还介绍了移动机器人和微型飞行器所使用的自主导航框架(包括ORB-SLAM和PTAM),以及机械臂机器人的运动规划和抓取程序。

最后,本书讨论了ROS-Industrial(ROS-I)。这是一个将ROS软件的高级功能扩展到制造业的开源项目。

对于那些希望了解更多关于ROS的功能和特性的ROS用户和开发人员,我相信这本书将是一本优秀的指南。目标读者

本书的目标读者是来自学术界或工业界的工程师们。本书介绍了一系列在实际工作中会遇到的问题、解决方案以及未来机器人应用开发中的研究问题。读者最好具备GNU/Linux、C++和Python编程与GNU/Linux环境的基本知识,以便能够轻松地理解本书的内容。本书内容

第1章“ROS入门”介绍了如何在各种不同的平台(例如桌面系统、虚拟机、Linux容器和基于ARM的嵌入式开发板)上安装ROS。

第2章“ROS的体系结构与概念Ⅰ”介绍了ROS的核心概念以及如何使用ROS框架。

第3章“ROS的体系结构与概念Ⅱ”介绍了ROS的高级概念,如参数服务、actionlib、pluginlib、nodelet、坐标变换(TF)等。

第4章“ROS可视化与调试工具”讨论了ROS中可用的各种调试和可视化工具,如gdb、valgrind、rviz、rqt和rosbag。

第5章“在ROS中使用传感器和执行器”讨论了传感器和执行器等硬件组件与ROS的接口,还涉及使用I/O扩展板(如Arduino和Raspberry Pi)的接口传感器。

第6章“ROS建模与仿真”介绍了物理机器人的建模和基于Gazebo的虚拟环境仿真,还讨论了移动机器人和机械臂的建模问题。

第7章“ROS中的移动机器人”讨论了ROS最强大的功能——导航功能包集,它使移动机器人能够自主移动。

第8章“ROS中的机械臂”讲解了如何为机械臂机器人创建和配置MoveIt功能包,并执行运动规划和抓取操作。

第9章“基于ROS的微型飞行器”介绍了微型飞行器(MAV)的仿真框架(RotorS)。我们在这个框架中对MAV进行了研究和开发,还涉及自主导航框架以及ORB SLAM和PTAM。

第10章“ROS-Industrial(ROS-I)”讨论了ROS工业软件包,该软件包提供了一个与工业机械臂机器人连接和控制的解决方案。我们使用一些强大的工具,如MoveIt、Gazebo和RViz。本章还讨论了ROS工业软件包未来在硬件支持、功能和应用方面的发展趋势。本书要求

读者只需要一台可运行Ubuntu 16.04/18.04的计算机就能够处理本书中的几乎所有示例,不需要任何额外的硬件要求。不过在涉及使用外部传感器、执行器和I/O扩展板的例子时,需要额外的硬件组件。

另一种方案,读者可以使用安装在虚拟机上的Ubuntu 16.04/18.04,例如安装在Windows系统上的virtualbox或VMware,但是这需要更强的计算能力。

本书中讨论的机器人应用需要商业硬件,如I/O扩展板(Arduino、Odroid和Raspberry Pi)、视觉传感器(Kinect和Camera)和执行器(伺服电机和操纵杆)。

最重要的是,建议读者通过本书提供的源代码来学习,以便熟悉技术概念。排版约定 这个图标表示警告或需要特别注意的内容。 这个图标表示提示或者技巧。资源与支持

本书由异步社区出品,社区(https://www.epubit.com/)为您提供相关资源和后续服务。配套资源

本书提供配套资源,请在异步社区本书页面中单击,跳转到下载界面,按提示进行操作即可。注意:为保证购书读者的权益,该操作会给出相关提示,要求输入提取码进行验证。提交勘误

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区,按书名搜索,进入本书页面,单击“提交勘误”,输入勘误信息,单击“提交”按钮即可。本书的作者和编辑会对您提交的勘误进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给我们;有意出版图书的作者也可以到异步社区在线提交投稿(直接访问www.epubit.com/selfpublish/submission即可)。

如果您是学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接发邮件给我们。您的这一举动是对作者权益的保护,也是我们持续为您提供有价值的内容的动力之源。关于异步社区和异步图书“异步社区”是人民邮电出版社旗下IT专业图书社区,致力于出版精品IT技术图书和相关学习产品,为作译者提供优质出版服务。异步社区创办于2015年8月,提供大量精品IT技术图书和电子书,以及高品质技术文章和视频课程。更多详情请访问异步社区官网https://www.epubit.com。“异步图书”是由异步社区编辑团队策划出版的精品IT专业图书的品牌,依托于人民邮电出版社近30年的计算机图书出版积累和专业编辑团队,相关图书在封面上印有异步图书的LOGO。异步图书的出版领域包括软件开发、大数据、AI、测试、前端、网络技术等。异步社区微信服务号第1章 ROS入门

在这一章中,我们将会就以下主题展开讨论:● 在桌面系统中安装ROS;● 在虚拟机中安装ROS;● 在Linux Container中使用ROS;● 在ARM开发板上安装ROS。1.1 简介

机器人操作系统(ROS)是一个用于实现机器人编程和开发复杂机器人应用程序的开源软件框架。表面上看,ROS虽然可以完成操作系统的很多功能,但是它仍然需要安装在例如Linux之类的操作系统中,所以也经常被称为元操作系统(meta-operating system)或者中间件软件框架。

此外,ROS和所有的操作系统一样,它提供了一个用于构建机器人应用程序的硬件抽象层。有了它的存在,开发者就无须考虑底层硬件的差异。ROS的核心是一个可以同步或者异步传递消息的中间件框架,即使是不同机器上的进程和线程,也可以通过它进行交流和传输数据。ROS软件的组织形式是功能包(package),这种形式提供了良好的模块性和复用性。这两个特性保证了一个程序可以无须改动或者只需进行微小的修改就可以应用到其他机器人应用软件中。

ROS得到了机器人科学界包括从该领域的研究人员到商业机构的专业开发人员的广泛认可和应用。ROS起源于2007年的Switchyard项目,它是当时的斯坦福人工智能实验室为了支持STAIR(斯坦福大学人工智能机器人项目)而建立的。

从2008年开始,Willow Garage公司一直在持续发展Switchyard。不过现在这个项目已经转由开源机器人基金会(OSRF)维护了。

现在将开始学习本书的入门章节,我们在其中将学习到在各种平台上安装ROS的方法。1.2 在桌面系统中安装ROS

我们假设你现在使用的是一台安装Ubuntu 16.04 或者Ubuntu 18.04 LTS系统的设备,它配置了Intel Core i5 @3.2 GHz的处理器,8GB的内存或者性能相同的硬件。因此我们必须掌握Linux以及命令行工具的基本知识。如果你需要学习或者更新这些知识的话,可以到互联网上查找相关的学习资源,也可以查阅一些关于这些内容的书籍。

在本节中,我们将研究ROS发行版以及其对应支持的操作系统,这些内容将帮助我们根据需求选择正确的组合。1.2.1 ROS 发行版

ROS发行版就是一套ROS功能包集合,它与Linux发行版十分相似。ROS发行版的目的是让开发人员在开始下一步工作之前可以针对相对稳定的代码库进行工作。每个发行版会维护一组稳定的核心功能包,直到该发行版的生命周期结束。

目前最新的推荐ROS发行版是Kinectic Kame,它将一直被支持到2021年5月。而最新的ROS发行版为Melodic Morenia,于2018年5月23日发布,将被支持到2023年5月。不过这个最新的ROS版本存在一个问题:它不支持目前大部分的功能包文件。而这些包还需要一些时间才能完成从之前版本到最新版本的移植,所以我们并不推荐使用这个版本。在ROS网站上可以找到发行版列表(见图1-1)。图1-1 发行版列表1.2.2 支持的操作系统

ROS在设计上与Ubuntu系统是完全兼容的,而且按照计划,ROS发行版是与Ubuntu的发行版对应的。此外,Ubuntu ARM、Gentoo、macOS X、Arch Linux和OpenEmbedded也都实现了对ROS的部分支持。表1-1给出了ROS的各种发行版以及它们支持的操作系统。表1-1ROS发行支持的操作系统实验用的操作系统版Melodic Ubuntu 18.OS X(Homebrew)、Gentoo、Ubuntu ARM和Morenia04(LTS);OpenEmbedded/YoctoDebian 9Kinetic Ubuntu 16.OS X(Homebrew)、Gentoo、Ubuntu ARM和Kame04(LTS)和OpenEmbedded/Yocto(LTS)15.10;Debian 8Jade TurtleUbuntu 15.04、14.10OS X(Homebrew)、Gentoo、Arch Linux、和14.04;Debian 8Android NDK、Ubuntu ARM和OpenEmbedded/YoctoIndigo Igloo Ubuntu 14.OS X(Homebrew)、Gentoo、Arch Linux、(LTS)04(LTS)和Android NDK、Ubuntu ARM和13.10;Debian 7OpenEmbedded/Yocto

正如在1.2.1节讨论过的,这里有多个ROS发行版可供下载和安装。我建议使用其中有LTS标识的版本,这表示它是最稳定的,同时也是得到了最大支持的版本。

如果你需要使用ROS的最新特性,则可以选择使用最新版本。不过你可能无法立刻使用完整的功能包文件,因为它们从前一个发行版迁移到这个版本需要一定时间。

在本书中我们将会使用两个LTS发行版—— ROS Kinetic 和ROS Melodic来完成所有实验。图1-2给出了这两个ROS的选择界面。

我们可以在ROS网站获得每个发行版的完整安装说明。在这个网站的导航栏中依次单击Getting Started|Install,打开的新页面中将显示最新ROS发行版的图形列表。图1-2 两个ROS的选择界面1.2.3 如何完成

在下面的内容中我们将会介绍如何安装最新的ROS发行版。1.配置Ubuntu 软件库(repositories)

配置Ubuntu的软件库时,我们首先要在Ubuntu的查找工具栏中找到Software & Updates,然后在Ubuntu Software中的main、universe、restricted和multiverse选项前进行勾选,如图1-3所示。图1-3 软件与更新(Software & Updates)选项卡2.配置source.list文件

接下来我们需要设置桌面系统接受来自packages.ros的软件,ROS软件库服务器的信息必须要添加到/etc/apt/source.list中:$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release - sc) main" > /etc/apt/sources.list.d/ros-latest.list'3.设置密钥

在向Ubuntu软件库管理器中添加一个新的软件库的时候,我们必须通过添加密钥的方式来使操作系统信任来自它的包。为了确保能够从授权的服务器进行下载,在开始安装之前,我们应该向Ubuntu中添加如下的密钥:$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv- key 421C365BD9FF1F717815A3895523BAEEB01FA1164.安装ROS Kinetic

现在,我们开始在Ubuntu上安装ROS Kinetic功能包。第一步是使用以下命令来更新功能包列表:$ sudo apt-get update

在ROS中有许多不同的库和工具,这里提供了4种不同的配置方式。(1)桌面完整版(Desktop-Full)安装(推荐):$ sudo apt-get install ros-kinetic-desktop-full(2)桌面版(Desktop)安装:$ sudo apt-get install ros-kinetic-desktop(3)基础版(ROS-Base)安装:$ sudo apt-get install ros-kinetic-ros-base(4)独立ROS功能软件包(Individual Package)安装:$ sudo apt-get install ros-kinetic-PACKAGE5.安装ROS Melodic

现在,我们开始在Ubuntu 18.04上安装ROS Melodic功能包。第一步是使用以下命令来更新包列表:$ sudo apt-get update

在ROS中有许多不同的库和工具,这里同样也提供了4种不同的默认配置。(1)桌面完整版(Desktop-Full)安装(推荐):$ sudo apt-get install ros-melodic-desktop-full(2)桌面版(Desktop)安装:$ sudo apt-get install ros-melodic-desktop(3)基础版(ROS-Base)安装:$ sudo apt-get install ros-melodic-ros-base(4)独立ROS功能软件包(Individual Package)安装:$ sudo apt-get install ros-melodic-PACKAGE6.初始化rosdep

在使用ROS之前,你需要执行rosdep的初始化操作。这样在进行编译的时候,它会帮助你轻松地安装好系统依赖项和在ROS中运行所需的核心组件。$ sudo rosdep init$ rosdep update

配置环境

干得不错!我们已经完成了ROS的安装。现在大部分的ROS脚本和可执行文件都安装在目录/opt/ros/中。

我们需要将ROS环境变量添加到bash会话中才能访问这些脚本和可执行文件。下面给出了使用source命令为ROS Kinetic添加bash文件的命令。$ source /opt/ros/kinetic/setup.bash

如果使用ROS Melodic,则需要进行如下设置:$ source /opt/ros/melodic/setup.bash

如果每次在启动新的shell时,ROS环境变量都可以自动添加到bash会话,这对于我们来说会很方便。

对于ROS Kinetic来说,需要进行如下配置:$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc$ source ~/.bashrc

而如果是ROS Melodic,则需要使用如下配置:echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrcsource ~/.bashrc

如果我们不止安装了一个ROS发行版,那么需要使用source命令来将当前使用版本的setup.bash添加到~/.bashrc中。$ source /opt/ros//setup.bash7.获得rosinstall

rosinstall是ROS中常用的一个命令行工具,它能够帮助我们轻松地使用单个命令从多个源下载ROS包。

这个工具是基于Python的,我们可以使用下面命令来安装它:$ sudo apt-get install python-rosinstall8.Build Farm的状态

ROS包是由ROS Build Farm构建而成的。

好了,恭喜你已经完成了ROS的安装。接下来执行下面的命令来检查安装是否正确。

打开一个新的命令行(shell)窗口运行roscore:$ roscore

然后在另一个命令行(shell)窗口中打开一个turtlesim节点:$ rosrun turtlesim turtlesim_node

如果一切正常的话,我们就会看到如图1-4所示的界面。图1-4 ROS执行演示1.3 在虚拟机中安装ROS

正如我们所了解的那样,只有在Ubuntu和Debian发行版上才能使用ROS的全部功能。如果我们是Windows或macOS X用户,而且还不想将计算机的操作系统更改为Ubuntu,那么此时就可以使用诸如VMware或VirtualBox之类的工具来帮助我们在计算机上虚拟出新的操作系统。

VMware Workstation Pro可以在单个的PC设备上虚拟出多个操作系统。它本身是一款商业软件,不过也提供了免费的产品试用以及演示。

另外,你也可以选择使用VirtualBox,这是针对 x86架构计算机上的免费开源程序,它支持多种操作系统,例如Linux、macOS、Windows、Solaris和OpenSolaris。 你可以在VMware和VirtualBox的官方网站获得它们的详细信息,也可以在互联网上搜索相关教程。如何完成

当启动了虚拟机而且进行了正确的配置之后,我们就可以看到如图 1-5所示的虚拟机系统界面了。图1-5 虚拟机系统界面

在虚拟机安装ROS与在真实设备上没有什么区别。因此我们可以按照前面讲述的方法来轻松地完成ROS Kinetic的安装。在虚拟机中我们可以运行大多数示例和功能包集(stacks)。有点麻烦的是,ROS在通过虚拟机和外部硬件进行工作和连接时可能会遇到一些问题。另外,在虚拟机中运行ROS还会出现性能下降的情况。我们将在第4章中讲解的示例代码很有可能无法执行。

图1-6显示了一个ROS在虚拟机中的安装和运行状况。图1-6 在虚拟机中运行的ROS1.4 在Linux容器中运行ROS

随着虚拟化技术的快速发展,各种类型的容器技术开始崭露头角。目前,其中的Docker和LXC技术占据了Linux操作系统虚拟机市场的最大份额。1.4.1 准备工作

LXC(Linux Containers)是一种可以在单个主机上创建和运行多个隔离Linux虚拟环境(VE)的操作系统级虚拟技术。这些隔离级别(level)或者Container可以用来实现特定应用程序的沙箱或者模拟出全新的主机。LXC使用了Linux 2.6.24版本中引入的控制组(cgroup)功能,它允许主机CPU可以更好地将内存分配给称为工作区(namespace)的隔离级别。

Docker之前一直被称作dotCloud,它最开始只是作为一个业余项目开发出来的,在2013年开始对外开源。实际上它是LXC功能的扩展。这是通过使用一个高等级的API实现的,它提供了一个可以独立运行进程的轻量级虚拟化解决方案。Docker是使用Go语言开发出来的,它利用了LXC、cgroup和Linux 内核的功能。由于Docker Container是基于LXC实现的,所以它并不包括单独的操作系统。相反它要依赖操作系统自身的功能(例如底层设备提供的功能)。因此Docker是一个可以移植的容器引擎,你可以将虚拟容器中的应用程序及其依赖项打包复制到其他Linux服务器上运行。 注意,Linux VE与虚拟机(VM)并不相同。1.4.2 如何完成

由于Docker是一个有助于应用程序和完整系统分发的开放平台,并且它基于LXC,所以我们将研究如何使用ROS Docker镜像,以及如何将复杂的应用程序与完整的系统集成为一个独立的镜像进行分发。1.安装Docker

在安装Docker之前,我们需要下载更新的包文件:$ sudo apt-get update

使用下面的命令向系统添加官方DOCK软件库的GPG密钥:$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 –recv -keys 58118E89F3A912897C070ADBF76221572C52609D2.将DOCK软件库添加到APT源中

对于Ubuntu 16.04,需要执行以下命令:$ echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudotee /etc/apt/sources.list.d/docker.list

对于Ubuntu 18.04,需要执行以下命令:$ echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudotee /etc/apt/sources.list.d/docker.list

使用新添加软件库中的Docker包来更新功能包数据库,使用的命令如下所示:$ sudo apt-get update

接下来确保我们是从Docker软件库,而不是从默认的Ubuntu软件库完成下载:$ apt-cache policy docker-engine

注意此时如果还没有安装docker-engine,可以使用下面的命令来安装它:$ sudo apt-get install -y docker-engine

检查Docker是否启动:$ sudo systemctl status docker

使用以下命令来启动Docker服务:$ sudo service docker start$ docker

我们可以使用docker命令的search子命令在Docker Hub中查找可用的镜像。$ sudo docker search Ubuntu

最后使用下面的命令来运行Docker container:$ sudo docker run -it hello-world3.获取和使用ROS Docker镜像

Docker镜像是类似于虚拟机中设置完毕的操作系统的快照文件。有些服务器中提供了镜像,用户只需要执行下载操作即可。主服务器是Docker Hub,从这里你可以找到不同类型系统和经过各种配置的Docker镜像。

好了!在官方的ROS软件库中列出了所有的ROS Docker镜像。我们将使用ROS Kinetic镜像,下面给出了获取它的命令:$ sudo docker pull ros$ sudo docker pull kinetic-ros-core$ sudo docker pull kinetic-ros-base$ sudo docker pull kinetic-robot$ sudo docker pull kinetic-perception

我们使用相同的方法也可以获取ROS Melodic镜像,下面给出了获取它的命令:$ sudo docker pull ros$ sudo docker pull melodic-ros-core$ sudo docker pull melodic-ros-base$ sudo docker pull melodic-robot$ sudo docker pull melodic-perception

成功下载容器之后,我们可以使用下面的命令来运行它:$ docker run -it ros

这就像进入到Docker container的会话中一样。前面的命令将从主镜像中创建新的container,这个主镜像中已经安装好了完整的Ubuntu操作系统和ROS Kinetic。这样我们就能像使用常规系统一样,安装额外的包和运行ROS节点。

下面的命令可以列出所有可用的Docker containers以及它们镜像的源:$ sudo docker ps

恭喜你现在已经完成了Docker的安装。为了在Container中建立ROS环境以便开始使用ROS,我们必须运行以下命令(ros_version: kinetic/melodic):$ source /opt/ros//setup.bash

虽然运行docker应该已经足够了,但是我们可以使用SSH通过名称或者ID来远程控制一个运行的Docker containers,就像控制一个普通设备一样。$ sudo docker attach 665b4a1e17b6 #by ID ...OR$ sudo docker attach loving_heisenberg #by Name

如果使用attach命令的话,那么我们只能使用shell的一个实例。但是如果我们想在containers中打开新的命令行(shell),并且可以启动新的进程,就需要运行以下的几条命令:$ sudo docker exec -i -t 665b4a1e17b6 /bin/bash #by ID ...OR$ sudo docker exec -i -t loving_heisenberg /bin/bash #by Name

我们在另外的一个命令行(shell)中使用docker stop也可以结束Docker containers,而且它们也可以使用docker rm命令来删除。1.4.3 参考资料

本书附带了一个可以正常工作的Docker镜像,它基于ROS Kinetic建立并包含了所有的实例代码。在GitHub软件库可以找到下载和安装它的说明文件,在那里还可以找到其他的代码。1.5 在基于ARM的开发板上安装ROS

从事商业机器人产品研发的行业对运行在嵌入式平台(主要是ARM平台)上的ROS有很高的要求。现在维护开源ROS的OSRF已经宣布对ARM平台的正式支持。1.5.1 准备工作

目前主要有两个支持ARM平台上运行的ROS操作系统系列:● Ubuntu ARM;● OpenEmbedded(meta-ros)。

其中Ubuntu ARM最受研究人员的欢迎,因为它易于安装,而且已经得到了很多ARM板的支持。在图1-7中列出了其中的一部分ARM板。此外,许多ROS包已经得到了Ubuntu ARM的支持或者可以通过最小的修改就可以移植到Ubuntu ARM。图1-7 Ubuntu ARM支持的平台

而OpenEmbedded则主要被专业人员用来开发商业产品。表1-2中给出了两者的比较。表1-2Ubuntu ARMOpenEmbedded二进制ROS包用于基于caktin的ROS包的交叉编译工具链可以编译为通用ARM体系架构从源编译所有的包使用常用的Ubuntu工具(dpkg、支持多个架构:ARM、MIPS、PowerPC等APT等)进行安装安装简便、快捷易于适应新的机器和结构无须编译源的基本ROS包允许对基本ROS包进行更改标准Ubuntu风格小型Linux内核和镜像在开发板上进行额外编译需要一个强大的系统设置来保证构建机器和工具链运行

虽然有多种选择,我们还是决定在Ubuntu ARM上安装ROS,因为这个系列的发行版更为普遍,而且也可以在多种基于ARM的平台上运行,例如UDOO、ODROID-U3、ODROID-X2和Gumstix Overo。我们建议你在平台上使用Ubuntu ARM 16.04 Xenial armhf操作系统与ROS一起工作。

当我们在向指定的ARM平台上安装ROS之前,必须先满足一些先决条件。由于本书的重点是ROS,因此我们只会列出这些内容,并不会给出详细的讲解。不过对于特定的ARM平台来说,你可以通过它们的网站、论坛或者相关的书籍来查阅有关Ubuntu ARM的信息。

当我们选定的平台上已经安装完Ubuntu ARM后,就需要安装网卡,并通过配置网络设置(例如IP、DNS和网关)来提供访问网络的功能。

一个适用于大多数ARM平台的Ubuntu镜像可以安装到一个大小为1GB~4GB的MicroSD卡中。不过它的容量并不能承载ROS Kinetic的大部分功能包。为了解决这个问题,我们可以使用更大内存的SD卡,并通过重新分区将文件系统扩展到所有空间。

这里可以使用GParted软件。它是一个开源的图形工具,可以用来完成磁盘分区及其文件系统的创建、删除、调整大小、移动、检查和复制操作,如图1-8所示。图1-8 GParted(一个分区工具)1.5.2 如何完成

好了,我们现在已经做好了安装ROS的准备。此后的安装过程与前面讲过的桌面系统下的安装过程非常类似。两者最大的区别在于在Ubuntu ARM平台下不能进行桌面完整版(Desktop-Full)安装。我们可以按照需要来自定义安装所需要的功能包,不过,这一点对于使用源代码来构建和安装ROS软件库中没有的包是十分方便的。● ROS Kinectic 与Ubuntu 16.04 Xenial Xerus兼容。● ROS Melodic 与Ubuntu 18.04 Bionic Beaver兼

容。

配置软件库的步骤如下所示。

第一步要配置Ubuntu软件库允许“restricted”“universe”和“multiverse”:$ sudo vi /etc/apt/sources.list

我们对Ubuntu 16.04进行如下操作:deb http://ports.ubuntu.com/ubuntu-ports/ xenial main restricted universe multiverse#deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial main restricteduniverse multiverse deb http://ports.ubuntu.com/ubuntu-ports/ xenial-updates main restricted universe multiverse#deb-src http://ports.ubuntu.com/ubuntu-ports/ xenial-updates mainrestricted universe multiverse#Kernel source (repos.rcn-ee.com) :https://github.com/RobertCNelson/linux-stable-rcn-ee##git clone https://github.com/RobertCNelson/linux-stable-rcn-ee#cd ./linux-stable-rcn-ee #git checkout 'uname -r' -b tmp# deb [arch=armhf] http://repos.rcn-ee.com/ubuntu/ xenial main#deb-src [arch=armhf] http://repos.rcn-ee.com/ubuntu/ xenial main

同样,我们对Ubuntu 18.04进行如下操作:deb http://ports.ubuntu.com/ubuntu-ports/ bionic main restricted universemultiverse#deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic main restricteduniverse multiverse deb http://ports.ubuntu.com/ubuntu-ports/ bionic-updates main restricted universe multiverse#deb-src http://ports.ubuntu.com/ubuntu-ports/ bionic-updates mainrestricted universe multiverse#Kernel source (repos.rcn-ee.com) :https://github.com/RobertCNelson/linux-stable-rcn-ee##git clone https://github.com/RobertCNelson/linux-stable-rcn-ee#cd ./linux-stable-rcn-ee#git checkout 'uname -r' -b tmp# deb [arch=armhf] http://repos.rcn-ee.com/ubuntu/ bionic main#deb-src [arch=armhf] http://repos.rcn-ee.com/ubuntu/ bionic main

第二步使用如下操作更新源:$ sudo apt-get update1.5.3 设置系统位置

ROS中的一些工具(例如Boost),需要调整系统区域设置。这个设置的命令如下所示:$ sudo update-locale LANG=C LANGUAGE=C LC_ALL=C LC_MESSAGES=POSIX1.5.4 设置sources.list(源列表)

接下来我们将要根据ARM平台上所安装的Ubuntu版本配置源列表。下面给出了安装Ubuntu armhf软件库的命令:$ sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release - cs) main" > /etc/apt/sources.list.d/ros-latest.list'1.5.5 设置秘钥

正如前文提到的那样,我们执行这个步骤的目的是确保代码的来源是准确的,而且没有人在代码所有者不知情的情况下对代码或者程序进行过修改。$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net --recv-key 0xB01FA1161.6 安装ROS包

在安装ROS包之前,需要确保所使用的Debian包索引是最新的。$ sudo apt-get update

在ROS中包含很多不能完全与ARM相匹配的库和工具,因此我们不能进行桌面完整版(Desktop-Full)的安装。这里只能对所需的ROS包进行单独的安装。

我们可以安装ros-base(准系统),它包含了ROS包、构建和通信库,但是不包含图形化操作工具(当允许操作时使用ENTER(Y))。$ sudo apt-get install ros--ros-base

另外,我们也可以尝试去安装桌面系统,它包括ROS、rqt、RViz和机器人通用库。$ sudo apt-get install ros--desktop1.6.1 添加单个软件包

我们可以使用如下命令来安装一个指定的ROS包:$ sudo apt-get install ros--PACKAGE

使用以下命令查找可用的包:$ apt-cache search ros-1.6.2 初始化rosdep

在我们使用ROS之前,必须要安装和初始化命令行工具rosdep。rosdep可以在你需要编译某些源码的时候为其安装一些系统依赖,同时也是某些ROS核心功能组件所必须用到的工具。$ sudo apt-get install python-rosdep $ sudo rosdep init $ rosdep update1.6.3 环境配置

现在我们已经完成了在ARM平台上安装ROS的操作。大部分的ROS脚本和可执行文件都安装在/opt/ros/中。

如果要访问这些脚本和可执行文件,需要将ROS环境变量添加到bash会话中。我们需要使用source命令来指定下面的bash文件:$ source /opt/ros//setup.bash

如果每次启动新的shell时,ROS环境变量都会自动添加到BASH会话中,这是十分方便的:$ echo "source /opt/ros//setup.bash" >> ~/.bashrc$ source ~/.bashrc

如果你安装有多个ROS版本,需要使用 source命令来指定你当前使用版本所对应的 setup.bash。$ source /opt/ros//setup.bash1.6.4 获取rosinstall

rosinstall 是ROS中一个独立的常用命令行工具,有了它,只要用一条命令,你就可以很容易为指定功能包下载完整的源码树。

该工具是基于Python的,你可以使用以下命令来安装它:$ sudo apt-get install python-rosinstall

下面给出一个基本的例子。首先我们在命令行(shell)上运行ROS核心:$ roscore

然后在另一个命令行(shell)中,发布一条Pose信息:$ rostopic pub /dummy geometry_msgs/Pose Position: x: 3.0 y: 1.0 z: 2.0 Orientation: x: 0.0 y: 0.0 z: 0.0 w: 1.0 -r 8

接下来,在桌面系统(位于同一网络中)设置ROS_MASTER_URI指向我们的ARM平台(IP为192.168.X.X)。

在笔记本计算机中添加以下内容:$ export ROS_MASTER_URI=http://192.168.1.6:11311

我们将会看到从ARM平台向笔记本计算机发布的pose。

最后向笔记本计算机中添加以下内容:$ rostopic echo -n2 /dummy Position: x: 1.0 y: 2.0 z: 3.0 Orientation: x:0.0 y: 0.0 z: 0.0 w: 1.0 ---第2章 ROS的体系结构与概念Ⅰ

在这一章中,我们将要围绕以下主题展开学习:● 对ROS文件系统的深入解析;● 对ROS计算图的分析;● 与ROS社区进行交流;● ROS的学习与实践。2.1 简介

在第1章中我们学习了ROS的安装方法。在本章中我们将会就ROS的体系结构和概念以及其组件进行研究。另外我们还将通过实例来学习如何创建和使用ROS组件。这些组件包括节点、功能包、信息和服务等。

ROS的体系结构和设计可以划分成3个部分。● ROS文件系统:在这个层次中包含了一组用来解释ROS的内部

构成方式、文件夹结构以及工作所需的核心文件的概念。● ROS计算图:在这个层次中,我们将看到建立ROS计算网络和

环境、处理所有过程以及与多台计算机通信等所需的所有概念和

机制。● ROS社区:这个层次非常重要,与大多数开放源码的软件项目

一样,ROS也提供了包含工具和概念的交流社区,以便于开发

人员互相之间共享知识、算法和代码。此外,拥有一个完善的社

区不仅可以帮助新手了解复杂的技术,而且可以快速解决一些较

为普遍的问题,它也是推动ROS技术发展的主要力量。2.2 对ROS文件系统的深入解析

ROS文件系统的主要目标是在实现项目构建过程集中化的同时提供足够的灵活性来分散其依赖关系。ROS文件系统(见图2-1)是在ROS中开发项目时最为重要的概念之一,当你付出了一些时间和耐心之后,就会发现它其实很容易掌握,而且也会很快认识到它在管理复杂项目及其依赖性时的作用。图2-1 ROS文件系统2.2.1 准备工作

和我们计算机上所使用的操作系统相类似,ROS文件系统也被划分成许多个文件夹(见图2-2)。而且在这些文件夹中包含了描述其功能的文件。图2-2 ROS文件系统中的文件夹● ROS功能包(package):ROS中的软件是以功能包的形式进行

组织的,这也是ROS操作系统中的基本单元。一个功能包可以

包含ROS节点(进程)、ROS独立库、配置文件等部分。这些内

容可以在逻辑上被定义为一个完整的软件模块。例如,

chapter2_tutorials就是一个简单的功能包。● ROS功能包清单(package manifest):功能包清单是一个名为

package.xml的XML文件,它必须位于功能包文件夹中。该文件

中包含了关于功能包的各种信息,例如功能包的名字、版本、作

者、维护者、许可证、编译标志以及对其他功能包的依赖项。另

外,系统包的依赖关系也应该在package.xml中声明,当你需要

在设备上通过源代码来构建包时,这一点是非常必要的。● ROS消息(message):在ROS框架中,节点(node)之间通

过将消息发布到话题(topic)中来实现彼此的异步通信,这里提

到的话题是一种简单的数据结构。消息文件的扩展名为.msg,

它位于所在功能包的msg文件夹中,其中的内容是一些类型字段。● ROS服务(service):ROS节点还可以通过系统服务的调用来

同步交换请求(request)和响应(response)消息。这些请求

和响应消息位于SRV文件夹中,扩展名为.srv。● ROS元功能包清单(metapackage manifest):虽然元功能包清

单package.xml与功能包清单十分类似,但它们是ROS catkin构

建系统中的专用包,除了package.xml清单之外,它不包含任何

代码、文件或其他项。元功能包定义了Debian打包系统中所使用

的虚拟包,提供了一个或者多个相关包的引用。● ROS元功能包(metapackage):它将多个包组合在一个组中,

以实现特定的目的和功能(例如导航任务)。不过在诸如Electric

和Fuerte等旧版本的 ROS 中,它被称为栈(stack),但是后来

它被元功能包所取代了。元功能包可以看作一个简单并且易于表

示的包栈,例如ROS导航栈(navigation stack)就是一个典型的

元功能包实例。2.2.2 如何完成

现在是时候将所学的知识应用到实践中去了。在这一节中,我们将学习用于在ROS文件系统中实现导航功能的ROS工具,并通过实例来掌握ROS工作空间的设置、功能包和元功能包的创建和构建等操作。我们首先执行以下步骤来创建一个ROS工作空间。(1)首先我们来建立自己的工作空间。本书中所有使用到的示例代码都会集中放置在这个工作空间中。(2)使用下面的命令可以获得ROS正在使用的工作空间:$ echo $ROS_PACKAGE_PATH

这条命令执行的输出结果为:/opt/ros/kinetic/share:/opt/ros/kinetic/stacks(3)创建和初始化ROS工作空间的命令为:$ mkdir -p ~/catkin_ws/src$ cd ~/catkin_ws/src$ catkin_init_workspace

我们已经通过上面的命令创建了一个空的ROS工作空间,其中只包含一个CMakeLists.txt文件。(4)如果你想要编译这个工作空间的话,可以使用如下命令:$ cd ~/catkin_ws$ catkin_make

现在我们就可以看到前面make命令创建好的build和devel文件夹了。(5)使用以下命令来完成配置:$ source devel/setup.bash

这条命令将从ROS工作空间重新加载setup.bash文件,并覆盖默认配置。(6)如果希望在打开或者关闭每个命令行(shell)时都拥有相同的效果,我们应该在~/.bashrc脚本末尾添加以下命令:$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc$ echo "source /home/usrname/catkin_ws/devel/setup.bash" >>~/.bashrc

ROS提供了多个用于在文件系统中导航的的命令行工具,我们先来了解其中一些最为常用的。

如果想要获得关于ROS环境中的功能包和栈的信息,例如它们

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载