前因为集成了仝世界机器人领域顶级科研机构,包括斯坦福大学、麻省理工学院、慕尼黑工业大学、加州大学伯克利分校、佐治亚理工大学、弗莱堡大学、东京大学等多年的研究成果,开源机器人操作系统( Robot Operating system,简称ROS)甫一问世便受到了科研人员的广泛关注。随后,ROS又借助开源的魅力吸引了世界各地机器人领域的仁人志士群策群力,推动其不断进步。2013年麻省理工学院科技评论( MIT Technology review)指出“从2010年发布10版本以来,ROS已经成为机器人软件的事实标准( de facto standard)”。译者在德国汉堡大学攻读博士学位期间,有幸于2010年成为ROS的第一批用户,并将其介绍给身边的同事以及国防科技大学的老师和同学。2013年,译者所在研究团队将 NuBot中型组足球机器人的软件系统移植到了ROS框架下,并于2014年和2015年分别参加了在巴西若昂佩索阿和中国合肥举办的机器人足球世界杯。使用ROS后№uBot足球机器人软件系统的鲁棒性、易用性和可维护性均有大幅度提高。对我们将ROS用于中型组足球机器人的工作,国际同行给予了非常积极的评价译者连续两年将ROS的使用作为国防科技大学高年级本科生实践教学的重要环节,发现一个普遍问题:学生能够迅速理解ROS的框架结构和基本概念,但是实际使用时问题却层出不穷,而其中大部分是共性问题! O'Kane教授这本A Gentle Introduction toROs”对ROS初学过程中的常见问题做了全面的总结。当然,这本书不仅仅是常见问题汇编,它还对概念和工具做了比在线文档更深入的剖析!故而,译者在征求 O'Kane教授的同意后,将该书译为中文,供中国的ROS初学者在实际使用时参考。首先,感谢 O'Kane教授对于本书翻译工作的的肯定和支持。其次,本书的翻译得到国防科学技术大学“控制科学与工程高级专题”课程师生的大力支持,其中赵云云、李峻翔、肖志鹏、贾凡、朱琪、郭昭宇、王志强、陈春玉、魏翔宇分别参与了部分章节的翻译工作。此外,王祥科博士审阅了初稿并提出了许多宝贵的意见,对此,译者表示诚挚的谢意。最后,感谢 NuBot研究团队全体成员对于本书的支持和帮助。狠于译者水平,书中难免会有不足之处,热切地希望得到各位读者的宝贵意见。作者的Emal地址是: junhao. xiao@aiee:org译者2015年9月于长沙目录第1章绪论1.1选择ROS的理由12内容概述13行文约定14更多信息15下一章简介第2章门概述1121安装ROS22配置账户1423使用 TURTLESIN的小例子1624功能包/软件包( PACKAGES)25节点管理器( THE MASTER)2226节点( NODES)27话题和消息2628一个更复杂的例子3929问题检查…43210展望.第3章编写RoS程序自。看。看自看自。。。。看自鲁。自。看自看自。自自。。。看非。看香自自。看音。看香看鲁自自。看4531创建工作区和功能包…4532你好,ROS!4833发布者程序..5534订阅者程序6535展望.第4章日志消息41严重级别734.2示例程序744.3生成日志消息4.4查看日志消息814.5启用和禁用日志消息4.6展望92第5章计算图源命名n935.1全局名称935.2相对名称955.3私有名称9754匿名名称( ANONYMOUS NAMES)985.5展望.100第6章动文件1016.1使用启动文件10162创建启动文件……10563在命名空间内启动节点11064名称重映射( REMAPPING NAMES)11365启动文件的其他元素11966展望126第7章参数.…1277.1通过命令行获取参数.12772例: TURTLESIM中的参数1317.3使用C++获取参数.3474在启动文件中设置参数377.5展望.140第8章服务14181服务的专用术语14182从命令行查看和调用服务14283客户端程序14884服务器程序15385展望159第9章消息录制与回放16191录制与回放包文件……16192示例:正方形运动轨迹的包文件16393启动文件里面的包文件……………………16794展望170第10章总结………17101下一步171102展望第1章绪论t合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。老子本章主要个绍ROS系统的优势和本书的框架结构。1.1选择ROS的理由近年来,机器人领域取得了举世瞩目的进展。性价比较高的机器人平台,包括地面移动机器人、旋翼无人机和类人机器人等,得到了广泛应用。更令人感到振奋的是,越来越多的高级智能算法让机器人的自主等级逐步提高尽管如此,对于机器人软件开发人员来说,仍然存在着诸多挑战。本书主要介绍一个软件平台,即机器人操作系统1( RobotOperating Systen,或简称RoS),它可以帮助提高机器人软件的开发效率。ROS系统的官方定义如下ROS是面向机器人的开源的元操作系统( meta -operatingsystem)1。它能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编译、编辑代码以及在多个计算机之间运程序完成分布式计算。虽然上述定义很准确,强调了ROS与传统操作系统的异同,本章由肖军浩、赵云云翻译。但可能仍然无法让读者抓住ROS的核心要义,尤其是使用ROS能够给机器人软件开发带来哪些优势。一般而言,学习一个新的系统框架,特别是RoS这样复杂多样的框架,往往要耗费大量的时间和精力,因此我们必须确保付出这个代价是有意义的。下面简单列举几个使用ROS能够解决的机器人软件开发问题分布式计算现代机器人系统往往需要多个计算机同时运行多个进程,例如:一些机器人搭载多台计算机,每台计算机用于控制机器人的部分驱动器或传感器;即使只有一台计算机,通常仍将程序划分为独立运行且相互协作的小的模块来完成复杂的控制任务,这也是常见的做法;当多个机器人需要协同完成一个任务时,往往需要互相通信来支撑任务的完成;用户通常通过台式机、笔记本或者移动设备发送指令控制枳器人,这种人机交互接口可以认为是机器人软件的一部分。单计算机或者多计算机不同进程间的通信问题是上述例子中的主要挑战。ROS为实现上述通信提供两种相对简单、完备的机制,我们将在第三章和第八章进行详细讨论软件复用随着机器人研究的快速推进,诞生了一批应对导航、路径规划、建图等通用任务的算法。当然,任何一个算法实用的前提是其能够应用于新的领域,且不必重复实现。事实上,如何将现有算法快速移植到不同系统一直是一个挑战,ROS通过以下两种方法解决这个问题⑦RoS标准包( Standard Packages)提供稳定、可调式的各类重要机器人算法实现。ROS通信接口正在成为机器人软件互操作的享实标准,也就是说绝大部分最新的硬件驱动和最前沿的算法实现都可以在ROS中找到。例如,在ROS的官方网页2上有着大量的开源软件库,这些软件使用ROS通用接口,从而避免为了集成它们而重新开发新的接口程序综上所述,开发人员如果使用ROS可以一一当然,在具备ROS基础知识后一一将更多的时间用于新思想和新算法的设计与实现,尽量避免重复实现已有的研究结果。快速测试为机器人开发软件比其他软件开发更具挑战性,主要是因为调试准备时间长,且调试过程复杂。况且,因为硬件维修、经费有限等因素,不一定随时有机器人可供使用。ROS提供两种策略来解决上述问题精心设计的ROS系统框架将底层硬件控制模块和顶层数据处理与决策模块分离,从而可以使用模拟器替代底层硬件模块,独立测试顶层部分,提高测试效率ROS另外提供了一种简单的方法可以在调试过程中记录传感器数据及其他类型的消息数据,并在试验后按时间戳回放。通过这种方式,每次运行机器人可以获得更多的测试机会。例如,可以记录传感器的数据,并通过多次回放测试不同的数据处理算法。在ROS术语中,这类记录的数据叫作包(bag),个被称为 rosbag的工具可以用于记录和回放包数据,见第9章