logo资料库

ROS_Robot_Programming_CN.pdf

第1页 / 共496页
第2页 / 共496页
第3页 / 共496页
第4页 / 共496页
第5页 / 共496页
第6页 / 共496页
第7页 / 共496页
第8页 / 共496页
资料共496页,剩余部分请下载后查看
作者序
作者简介
资源说明
目录
第1章 _ 机器人软件平台
1.1. 平台的组件
1.2. 机器人软件平台
1.3. 机器人软件平台的必要性
1.4. 机器人软件平台将带来的未来
第2章 _ 机器人操作系统ROS
2.1. ROS简介
2.2. 元操作系统
2.3. ROS的目的
2.4. ROS的组件
2.5. ROS的生态系统
2.6. ROS的历史
2.7. ROS的版本
2.7.1. 版本规则
2.7.2. 版本周期
2.7.3. 选择版本
第3章 _ 搭建ROS开发环境
3.1. 安装ROS
3.1.1. 常规安装
3.1.2. 简易安装
3.2. 搭建ROS开发环境
3.2.1. ROS配置
3.2.2. 集成开发环境(IDE)
3.3. ROS操作测试
第4章 _ ROS的重要概念
4.1. ROS术语
4.2. 消息通信
4.2.1. 话题(topic)
4.2.2. 服务(service)
4.2.3. 动作(action)
4.2.4. 参数(parameter)
4.2.5. 消息通信的过程
4.3. 消息
4.3.1. msg文件
4.3.2. srv文件
4.3.3. action文件
4.4. 名称(name)
4.5. 坐标变换(TF)
4.6. 客户端库
4.7. 异构设备间的通信
4.8. 文件系统
4.8.1. 文件组织结构
4.8.2. 安装目录
4.8.3. 工作目录
4.9. 构建系统
4.9.1. 创建功能包
4.9.2. 修改功能包配置文件(package.xml)
4.9.3. 修改构建配置文件(CMakeLists.txt)
4.9.4. 编写源代码
4.9.5. 构建功能包
4.9.6. 运行节点
第5章 _ ROS命令
5.1. ROS命令概述
5.2. ROS shell 命令
5.2.1. roscd:移动ROS目录
5.2.2. rosls:ROS文件列表
5.2.3. rosed:ROS编辑命令
5.3. ROS执行命令
5.3.1. roscore:运行roscore
5.3.2. rosrun:运行ROS节点
5.3.3. roslaunch:运行多个ROS节点
5.3.4. rosclean:检查及删除ROS日志
5.4. ROS信息命令
5.4.1. 运行节点
5.4.2. rosnode:ROS节点
5.4.3. rostopic: ROS话题
5.4.4. rosservice:ROS服务
5.4.5. rosparam:ROS参数
5.4.6. rosmsg: ROS消息信息
5.4.7. rossrv:ROS服务信息
5.4.8. rosbag:ROS日志信息
5.5. ROS catkin命令
5.6. ROS功能包命令
第6章 _ ROS工具
6.1. 三维可视化工具(RViz)
6.1.1. RViz安装与运行
6.1.2. RViz画面布局
6.1.3. RViz显示屏
6.2. ROS GUI开发工具(rqt)
6.2.1. rqt安装与运行
6.2.2. rqt插件
6.2.3. rqt_image_view
6.2.4. rqt_graph
6.2.5. rqt_plot
6.2.6. rqt_bag
第7章 _ ROS编程基础
7.1. ROS编程前须知事项
7.1.1. 标准单位
7.1.2. 坐标表现方式
7.1.3. 编程规则
7.2. 发布者节点和订阅者节点的创建和运行
7.2.1. 创建功能包
7.2.2. 修改功能包配置文件
7.2.3. 修改构建配置文件(CMakeLists.txt)
7.2.4. 创建消息文件
7.2.5. 创建发布者节点
7.2.6. 创建订阅者节点
7.2.7. 构建(build)节点
7.2.8. 运行发布者
7.2.9. 运行订阅者
7.2.10. 检查运行中的节点的通信状态
7.3. 创建和运行服务服务器与客户端节点
7.3.1. 创建功能包
7.3.2. 修改功能包配置文件(package.xml)
7.3.3. 修改构建配置文件(CMakeLists.txt)
7.3.4. 创建服务文件
7.3.5. 创建服务服务器节点
7.3.6. 创建服务客户端节点
7.3.7. 构建节点
7.3.8. 运行服务服务器
7.3.9. 运行服务客户端
7.3.10. rosservice call命令的用法
7.3.11. GUI工具Service Caller的用法
7.4. 创建和运行动作服务器和客户端节点
7.4.1. 生成功能包
7.4.2. 修改功能包配置文件(package.xml)
7.4.3. 修改构建配置文件(CMakeLists.txt)
7.4.4. 创建动作文件
7.4.5. 创建动作服务器节点
7.4.6. 创建动作客户端节点
7.4.7. 构建节点
7.4.8. 运行动作服务器
7.4.9. 运行动作客户端
7.5. 参数的用法
7.5.1. 利用参数创建节点
7.5.2. 设置参数
7.5.3. 读取参数
7.5.4. 构建节点和运行节点
7.5.5. 查看参数目录
7.5.6. 参数的用例
7.6. roslaunch的用法
7.6.1. roslaunch的应用
7.6.2. Launch标签
第8章 _ 机器人、传感器和电机
8.1. 机器人功能包
8.2. 传感器功能包
8.2.1. 传感器的类型
8.2.2. 传感器功能包的分类
8.3. 相机
8.3.1. USB摄像头相关功能包
8.3.2. USB摄像头测试
8.3.3. 查看图像信息
8.3.4. 远程传输图像
8.3.5. 相机校准
8.4. 深度相机(Depth Camera)
8.4.1. Depth Camera的类型
8.4.2. Depth Camera测试
8.4.3. Point Cloud Data(点云数据)的可视化
8.4.4. Point Cloud Data相关库
8.5. 激光距离传感器
8.5.1. LDS传感器距离测量原理
8.5.2. LDS测试
8.5.3. 可视化LDS的距离值
8.5.4. LDS的应用
8.6. 电机功能包
8.6.1. Dynamixel舵机
8.7. 已公开的功能包的用法
8.7.1. 搜索功能包
8.7.2. 安装依赖包
8.7.3. 安装功能包
8.7.4. 运行功能包
第9章 _ 嵌入式系统
9.1. OpenCR
9.1.1. 特点
9.1.2. 控制板规格
9.1.3. 搭建开发环境
9.1.4. OpenCR例程
9.2. rosserial
9.2.1. rosserial server
9.2.2. rosserial client
9.2.3. rosserial协议
9.2.4. rosserial的约束条件
9.2.5. 安装rosserial
9.2.6. rosserial例程
9.3. TurtleBot3的固件
9.3.1. TurtleBot3 Burger固件
9.3.2. TurtleBot3 Waffle和Waffle Pi固件
9.3.3. TurtleBot3配置固件
第10章 _ 移动机器人
10.1. ROS支持的机器人
10.2. TurtleBot3系列机器人
10.3. TurleBot3的硬件
10.4. TurtleBot3软件
10.5. TurtleBot3的开发环境
10.6. TurtleBot3远程控制
10.6.1. 遥控TurtleBot3
10.6.2. 可视化TurtleBot3
10.7. Turtlebot3话题
10.7.1. 订阅话题
10.7.2. 通过订阅话题控制机器人
10.7.3. 发布话题
10.7.4. 通过发布话题识别机器人状态
10.8. 使用RViz 仿真 TurtleBot3
10.8.1. 仿真
10.8.2. 运行虚拟机器人
10.8.3. Odometry和TF
10.9. 利用Gazebo仿真TurtleBot3
10.9.1. Gazebo仿真器
10.9.2. 启动虚拟机器人
10.9.3. 虚拟SLAM和导航
第11章 _ SLAM和导航
11.1. 导航及其组成要素
11.1.1. 移动机器人的导航
11.1.2. 地图
11.1.3. 测量或估计机器人姿态的功能
11.1.4. 识别障碍物,如墙壁和物体
11.1.5. 计算最优路径和行驶功能
11.2. SLAM实习篇
11.2.1. 对于使用SLAM的机器人的硬件限制
11.2.2. SLAM的实验环境
11.2.3. 用于SLAM的ROS功能包
11.2.4. 运行SLAM
11.2.5. 利用预先准备好的bag文件运行的SLAM
11.3. SLAM应用篇
11.3.1. 地图
11.3.2. SLAM所需的信息
11.3.3. SLAM的处理过程
11.3.4. 坐标变换(TF)
11.3.5. turtlebot3_slam功能包
11.4. SLAM理论篇
11.4.1. SLAM
11.4.2. 多种位置估计(localization)方法论
11.5. 导航实战篇
11.5.1. 用于导航的ROS功能包
11.5.2. 运行导航
11.6. 导航应用程序
11.6.1. 导航
11.6.2. 导航所需的信息
11.6.3. turtlebot3_navigation的各节点和话题状态
11.6.4. turtlebot3_navigation设置
11.6.5. 设置turtlebot3_navigation的详细参数
11.7. 导航理论篇
11.7.1. Costmap
11.7.2. AMCL
11.7.3. Dynamic Window Approach(DWA)
第12章 _ 服务机器人
12.1. 配送服务机器人
12.2. 配送服务机器人的结构
12.2.1. 系统结构
12.2.2. 系统设计
12.2.3. 服务核心节点
12.2.4. 服务主节点
12.2.5. 服务从节点
12.3. 用ROS Java进行Android平板PC编程
12.3. 用ROS Java进行Android平板PC编程
第13章 _ 机械手臂
13.1. 机械手臂介绍
13.1.1. 机械手臂的结构和控制
13.1.2. 机械手臂和ROS
13.2. OpenManipulator建模和仿真
13.2.1. OpenManipulator
13.2.2. 机械手臂建模
13.2.3. Gazebo设置
13.3. MoveIt!
13.3.1. move_group
13.3.2. MoveIt! Setup Assistant
13.3.3. Gazebo仿真
13.4. 应用于实际平台
13.4.1. 准备和控制OpenManipulator
13.4.2. OpenManipulator与TurtleBot3 Waffle及Waffle Pi
2017年12月22日 ROBOTIS Co., Ltd. #1505, 145, Gasan Digital 1-ro, GeumCheon-gu, Seoul, Republic of Korea contactus2@robotis.com www.robotis.com 979-11-962307-2-2 ROS机器人编程 作者 表允晳 赵汉哲 郑黎蝹 林泰勋 发行日 出版社 地址 E-mail 主页 ISBN ALL RIGHTS RESERVED Copyright © 2017 ROBOTIS Co., Ltd. 本著作物受著作权法保护。禁止无端转载和复制。 使用本书的部分或全部内容,需要获得著作权者和ROBOTIS(株)的书面同意。
ROS机器人编程 表允晳 赵汉哲 郑黎蝹 林泰勋
作者序 iv 即使机器人工程除了在工业机器人行业以外还没有任何商业模式 ,但是它凭 借未来产业和下一代增长引擎的名义,被期待为蓝筹行业。 问题是这些 故事在10年前和现在是一样的,但还没有明确的解答。原因是什么?会有多种看法, 但我认为机器人产业要形成新的商业模式还有很多不足的地方,还有很多需要解决的 问题。我认为这个解决方案应该是跨越国界的超越性合作,我还认为软件平台和支 持这些平台的社区可以解决这些问题。参与开发机器人操作系统ROS的有学术研究人 员、工业一线开发人员和业余爱好者等人群。此外,不仅是机器人专业人士,还有网 络专家、计算机科学家、计算机视觉专家也大有人参加,因此实现着机器人领域和其 他诸多专业的知识的融合。机器人预计从现在开始以不同于以往的方式发展。我们认 为,通过开放和合作,我们可以解决至今尚未解决的问题。我想说,这不是未来的产 业,而已经是现在的产业。 本书是我们四个人在完成多项有关ROS的项目的过程中获得的经验的基础上编写的 ROS机器人编程书。为了初次接触ROS的读者,尽可能涵盖了初学者所需要的大多数 内容。进而包括了可以应用于嵌入式系统、移动机器人和机械手臂的ROS内容。为了 尽量有助于ROS的初学者,将ROS的介绍和各部分所需要的信息都标上脚注,让读者 可以自行在网上找到。真诚希望更多的人通过本书了解和参与当今日益加速的机器人 工程的跨界式的知识融合和跨领域的合作。 下面我想对那些帮助我让这本书面世的人们表达我的谢意。我非常感谢ROS专家 Lee Ji-Hoon博士,Ahn Byung-kyu,Jung Keun-man,Seong Chang-Hyun博士和 Koo Sung-Yong博士,他们对有着诸多缺点的我总是给予新的指导。我想和他们说, 我将来想和你们一起做出更多的事情。另外,感谢对这本不为人所知的ROS专业书籍 的出版提供大力支持的Han Chang-Hoon代表,以及用最佳的编排使得读者更加容易 理解ROS的Lee Yin-Ho,Son Will,Jason,Kim Kayla 老师。我还想感谢ROBOTIS的 成员们。ROBOTIS,一家以“机器人是什么?”这一哲学疑问开始的公司,我想因为 有了他们才有了这本书。我还要感谢立志通过开源代码让更多人一起思考和开发机器 人的“开源团队(OST)”的成员,感谢开源生态界和社区的协助者Kim Jin-Wook先 生,并向本书的共同作者,“ROS英雄团”, 赵汉哲、郑黎蝹和林泰勋鼓掌致意。还 非常感谢正在一起编写日语版ROS书籍的我的指导教授日本九州大学的倉爪亮教授和 長谷川勉教授。他们以丰富的研究经验引领我走向了研究者之路,至今也在不断地学 到很多知识。借此机会,我想向教授传达我的心声“非常感谢您,给予我受益终生的 敦敦教诲”。同时也向为这本书成功出版,不断激励我坚持不懈,向我积极反馈好的
建议的开源机器人社区 Park Hyeng-Il和运营组以及为我加油地会员们,为开源机器人 平台开发付出热情的公开项目负责人表示衷心的感谢。将来,我想继续以开源机器人 为主题一起进行讨论,同时携手进行更有趣的项目。还要向facebook的机器人工程公 开群运营组和为韩国机器人产业发展献计献策的群组成员表示感谢。也要感谢与我一 起燃烧青春的机器人比赛团队“ROBIT”和机器人研究会“ROLAB”的师兄弟们。还 有一点,本书之所以能面世的重要原因之一是本人所属的公司“ROBOTIS”,对开源 代码编著活动及交流活动积极提供支持,为此向CTO Ha Yin-Yong和CEO Kim Byung- Soo表示谢意。 最后向我心爱的家人致谢。首先,向给予我无限的爱的父母说一声“我会永远敬爱 你们,也时时刻刻心存对你们的感恩之心”。还有在旁边一直鼓励我,支持我的岳父 母,“我对你们常怀感恩,一直爱着你们”。爱妻Ken-Mi, 你一直坚守在我的旁边,一 直照顾着我,非常感谢你,爱你, 以后我们要更幸福地生活。世界上最可爱的我的心 肝们,儿子Ji-an还有女儿Ji-Woo, 我为了你们会努力成为使这个世界变得更美好幸福 的好父亲。 2017年7月 表允晳 作者序 v
机器人包含着很多技术要素,因此需要多方面的专业技术。实际上,机器 人为了要进入到我们的生活当中且被广泛运用,目前尚存在着很多 技术局限性,需要进行更多的研究。想要克服当前的问题,专家、相关企业、一般用 户需要携手努力一起发展现状。除了机器人的制作和应用之外,我们需要一个协作和 开发的平台,我认为这就是ROS平台。 ROS具备着降低技术壁垒和有益于传播的各种 因素。 通过ROS平台,希望积累更多的知识和技术,使得更新更进步的机器人加入到 我们的生活中。 嵌入式系统控制传感器和驱动器,进行实时数据处理,作为构成机器人的一部分, 起着重要作用。通常为了实时地进行数据处理,会使用微控制器。这本书以在嵌入式 系统中使用ROS的方法和基本示例为中心进行叙述。我希望这些内容为那些使用ROS 搭建机器人嵌入式系统的用户助一臂之力。 我向Pyo Hyung-Joon,Park Hyung-Il和Park Byung-Hoon为创建OpenCR而付出 的努力表示感谢, 他们弥补了我的很多不足之处,也共度了很多的美好时光,因此给我 留下了很多回忆。也非常感谢开源项目团队(OST)的成员,与他们在一起我觉得很 活跃很开心。我衷心感谢Kim In-Wook,从我刚步入社会时开始到现在,一直与我同 在,在遇到困难时为给予我很多好的建议和激励。同时,也要向为我人生提供新的挑 战机会的ROBOTIS的Kim Byung-Soo代表表示衷心的谢意。当我还小时候,我看到了 Kim Byung-Soo代表在HiTel数码兴趣协会上的写作,通过他的文章我学到很多相关知 识,也成了从事机器人行业的动机。这使得我如今在他的公司开发机器人。 总以工作繁忙为借口没能陪伴儿子,心存亏欠,在此立下决心为我心爱的儿子成为 好爸爸。当笔者备受压力时,默默陪伴我,支持我的爱妻Kyung-Sun,谢谢你理解和 体谅我的任性,借此机会向你表达歉意的同时也要跟你说一声我爱你。 2017年7月 赵汉哲 作者序 vi
作者序 让我们一起如愿以偿地制作我们想要制作的机器人吧!以前我们曾经拿着与书 本配套的机器人套件来制作机器人,仅仅做出简单的动作,也会很满足地说 “这就是机器人”。然而,近年来,随着计算机性能的发展、设备的成本降低、获 取素材变得迅速与便捷,许多有关机器人的概念被重新定义着。机器人爱好者们已 经大量开始投入到机器人制作当中,并且信息量变得庞大,随着各个品牌制作商把 自己的产品进行自动化,如今汽车、飞机甚至潜艇都已成为机器人的平台。人们开 始跨越科学领域,开始融合各自的技术,结果机器人终于开始被制作成梦想中的形 态。我们可以说现在机器人行业正面临着全盛时期,但从中有些人可能开始跟不上 日益变得高性能、高端化的潮流,从而机器人产业可能将成为只有懂机器人的人才 可以生存以及得到发展的领域。 我觉得ROS对他们来说是雪中送碳,即使没有专攻该领域也能学到相关技术,从而 节省时间和金钱。 如果在使用过程中遇到问题,可以向制作人提问并得到反馈,将会 形成互助体系。 如今,像宝马等公司也正在引入ROS。 通过ROS来运营公司或与其他 公司合作,现可以说占据ROS的优势就会成为该领域的赢家。 我希望与本书的读者将来可以在ROS领域里相见。开源代码团队的组员们,尤其是 给予我参与此书编著的表允晳博士,为诸多项目同甘共苦的赵汉哲和林泰勋,向你们 表示感谢。 同时想感谢在机器人领域里慷慨提供各种建议和帮助的Song Hyeon-Jong和Kim Hyeon-Seok,能使得我不断思考的Kim Jin-Wook,为主办自主驾驶比赛而一起努 力的Seng Ki-Jae, 共度美好时光的开源机器人论坛(OROCA)的AuTURBO项目的成 员们,谢谢大家。还要想为我不断牺牲的父母说:“我会一直孝敬你们”。同时也向 陪伴我的弟弟和一直与我同在的Kim Ha表示感谢,最后我把所有荣耀献给创造我的 上帝。 2017年7月 郑黎蝹 vii
近些年,媒体经常报道由于高端技术机器人和人工智能而将发生变化的社 会、经济和文化的新闻。 随着社会发展,有些人以乐观的态度期 待着不断提高改善的生活,但是可能会更早到来的对于劳动市场的负面影响的展望会 使得人们更加不安。如此,我们身边正在进行的机器人和人工智能的研究和发展,会 在不久的将来会对我们产生深远的影响。 所以我们更要关注机器人技术的发展,试着 去了解并为未来做好准备。 为了应对快速发展的技术,开源代码正在利用集体智能来促进技术的发展和普 及。 现在,机器人技术可以通过开源代码,与多种多样的人共同工作和共同发展, 复杂的算法也可以很容易地应用在个人机器人中。 从而,我们可以防止因为技术被 归属于特定群体而影响整个社会的情况,也可以一步一步地揭开机器人的神秘面貌, 克服恐惧心理。 我的目标是通过技术的应用和变化给人们带来感动,使他们对这些技术更感兴趣。 作为第一步,我试图通过开源代码社区学习各种机器人技术,并开放自己项目的代 码,努力与各种各样的人进行协作。 以后,我正计划着与机器人以外其他领域的人进 行交流,互相分享经验和技术。 通过这种方式推广技术,并为人们提供各种体验,使 得人们轻松地适应未来社会的变化。 我参与了这本书的机械手臂部分的编著,比较易懂地整理了维基里ROS、 Gazebo、MoveIt!的内容,同时花了大量时间去试图总结那些没有在维基解释的部 分,努力将更多更准确的信息传达给读者。 我想继续精益求精,成为与人们分享所 学到的知识的人。 首先想要向表允晳博士表示感谢,直到这本书出版,他作为学校前辈、公司 领导、老师,教给我很多知识的同时也给予我勇气和机会。还有对Sung Chang- Hyeon博士表示感谢,在百忙之中腾出时间编审原稿,并且诚恳地回答各种各样的 问题。 我还要感谢从早到晚一起共事的开源代码团队的同事们和总是面带微笑,充 满热情的所有ROBOTIS员工。还要向研究生院指导教授Lee Jong-Ho教授表示感 谢, 在他的指导下,不仅•能学到工学知识和研究过程,还能培养真诚、耐心和责 任感。 再次感谢您。 作者序 viii
分享到:
收藏