图书前言

前言

ROS是开源的机器人操作系统软件平台,是机器人技术和人工智能技术的一个令人兴奋的结合点。2007年前后,ROS起源于美国斯坦福大学人工智能实验室与Willow Garage公司的项目合作; 2013年,ROS的开发和维护工作被移交给了开源机器人基金会(Open Source Robotics Foundation)。十余年来,ROS在国际学者的大力支持下迅速发展。随着机器人与人工智能热潮的到来,基于ROS的开发与应用近几年在我国也开展得如火如荼。

ROS的主要目标是为不同类型的机器人提供基础中间件和应用软件,降低机器人的开发和应用难度,避免重复开发。ROS定义抽象层,允许软件被多种机器人重用。然而,现有ROS在设计软件框架时未预料到会如此受欢迎,其已有的架构越来越难以满足众多新用途和潜在的市场需求。例如,在ROS的masterslave架构下,当master节点发生问题时,将产生系统通信中断的严重后果,不适合多机器人协作的应用场景。现有ROS的另一个重要瓶颈是实时性能差,难以应用于对实时性能要求很高的领域。例如,运行于复杂动态环境中的高机动移动机器人、高速运行的流水线作业机器人等,要求机器人以极快的速度对指令进行响应,以极高的可靠性完成任务。

为了解决ROS的诸多不足,设计新的软件框架以满足目前及未来市场需求势在必行,ROS2也因此应运而生。在ROS2开发过程中,对原ROS框架进行了重大改进。为了满足多机器人协同工作的高可靠、实时性要求,ROS2摒弃了原来的masterslave架构,使用更加先进的分布式架构,采用了数据分发服务(DDS)技术,节点可以分布于不同主机,可以互为服务器/客户端,方便负载均衡,可降低中心节点失效导致slave节点通信失败的风险。更为重要的是,ROS2提供对实时操作系统和嵌入式设备的支持,使得实时控制可以直接在ROS2上运行,并支持节点间、进程间实时通信。ROS2的第一个正式版本Ardent Apalone于2017年12月8日发布,该版本并未完全脱离ROS,而是继承了ROS的众多优点,如接口与编程语言无关、驱动程序和算法可封装成独立的库、方便移植、支持多语言等。

作为国内机器人操作系统的积极应用者和推动者,研究团队一直关注ROS和ROS2的发展,并积极探索、改进和应用ROS及ROS2,开发了支持ROS和ROS2的JuLab系列机器人通用硬件平台。为了更好地与对ROS2感兴趣的相关人员分享开发与应用ROS2的成果和经验,更深入地展示ROS2的架构优势、运行模式以及应用方法,本书从源代码层面深入解析ROS2,并对常用工具库及操控机器人的常用模块进行了系统介绍。基于JuLab系列机器人,进行了具体应用场景的代码和功能介绍。

本书共包括6章。第1章介绍ROS2 Ardent版本、ROS2安装及环境配置、基本命令等。第2章分析ROS2 Ardent的总体框架,进行源代码概述,开展ament、FastCDR、FastRTPS、RMW、robot_model、RCL、RCLcpp等代码分析。第3章介绍ROS2常用工具库中的orocos_kinematics_dynamics、POCO、urdfdom、PCL以及MoveIt。第4章阐述SLAM导航及应用,通过ROS2发布里程计信息,基于JuLab1机器人完成SLAM开发。第5章介绍六轴机械臂轨迹规划,基于JuLab1机器人完成实例开发。第6章介绍OpenCV图像和视频基础,图像转换,机器人3D视觉技术等。本书的电子文档资源同步在www.airtros.com网站发布。本书深入浅出地分析了ROS2的核心功能,并结合了典型工程案例。书中实践案例部分以JuLab机器人为载体,该机器人助力哈尔滨工业大学计算机学院两支队伍夺得了2018年全国大学生物联网大赛总决赛一等奖和二等奖。

本书作者均为从事机器人、操作系统科研和教学工作的人员。第1章由丁亮、曲明成、夏科睿撰写,第2章由曲明成、张亚楠、刘鹏飞撰写,第3章由张亚楠、曲明成、夏科睿撰写,第4章由丁亮、夏科睿、郭龙撰写,第5章由曲明成、夏科睿、丁亮撰写,第6章由张亚楠、夏科睿撰写。全书由丁亮统稿,张亚楠组织编辑和校对。相关研究工作和本书的编著得到了哈工大机器人集团董事长王飞、高级副总裁于振中等领导的大力支持,郭龙、金马、王权、陈伟伟、蒋晨旭、彭超、侯旗、何婷婷、张韬庚、姬鹏鹏等参与了本书案例的开发和编写工作,清华大学出版社的编辑对本书出版给予了大力支持,在此表示衷心的感谢!

本书涉及的研究工作得到了国家自然科学基金优秀青年基金项目(51822502)、安徽省科技重大专项项目、合肥市庐州产业创新团队项目、哈工大机器人(合肥)国际创新研究院立项项目等资助,在此表示感谢!

由于作者水平所限,书中难免存在不足之处,敬请各位读者批评指正。

作者2018年秋