课程简介
《ROS2理论与实践》系列课程主要由基础篇、核心篇、应用篇、进阶篇以及项目库五部分组成。本阶段为《ROS2理论与实践——核心篇》课程,核心篇课程设计以官方内容为标准,主要介绍ROS2中的通信机制与开发者工具,其中前者是整个ROS2框架中的核心构成,而后者则为开发者能够高效的构建应用程序提供有力支持。本阶段课程目的是帮助大家快速上手ROS2,为后续进阶奠定基础。
01 课程内容
本阶段教程主要内容如下:
第1章 ROS2概述与环境搭建
学习内容:ROS2相关概念以及如何使用VScode搭建集成开发环境。
学习收获:能够了解ROS2,了解工作中常用的模块有哪些,并可以自行搭建对开发者友好的学习、工作环境。
第2章 ROS2通信机制核心
学习内容:ROS2中频繁使用的通信机制(话题、服务、动作、参数)的应用场景以及实现。
学习收获:该部分与工作内容高度契合,可以让开发者根据不同场景、不同需求灵活实现机器人系统中的数据交互。
第3章 ROS2通信机制补充
学习内容:ROS2中一些零散但比较实用的知识点。
学习收获:避免程序“陷阱”,完善通信机制的应用。
第4章 ROS2工具之launch与rosbag2
学习内容:launch文件与rosbag2录制、回放话题消息。
学习收获:通过launch能够为大型项目构建启动文件;通过rosbag2能够复用、生产数据,降低开发成本,提高开发效率,缩短产品落地时间。
第5章 ROS2工具之坐标变换
学习内容:tf坐标变换。
学习收获:通过坐标变换可以确定机器人不同部件或不同机器人之间的位姿关系,无论是单机器人还是多机器人组队都有着广泛应用。
第6章 ROS2工具之可视化
学习内容:rviz2三维可视化工具和URDF机器人建模。
学习收获:可以创建机器人模型,并可以图形化显示ROS2系统中的抽象数据,让开发者以机器人的视角看世界。
02 课程特点
课程中知识点的学习整体是以案例为导向的,每一个知识点基本都会设计一个具体的案例,然后课程遵循理论结合实践的基本思路来介绍相关内容。
-
在理论部分会介绍该知识点的应用场景、概念以及作用;
-
实践部分则会介绍案例的实现思路、流程以及具体代码实现。
03 答疑
1.学习这套课程需要哪些知识储备?
答:需要提前了解编程语言C++和Python,这两种编程语言是重点,除此之外,还会使用到其他知识点,比如:linux、cmake、xml、yaml等,这部分内容可以现学现用。或者也可以先学习《ROS2理论与实践——基础篇》内容。
2.学习这套课程需要学习ROS1吗?
答:不需要。如果有ROS1基础那么更好,如果没有ROS1基础,也不必担心,《ROS2理论与实践》设计的初衷就是面向小白的零基础机器人教程。
3.这套课程采用的是ROS2的那个版本?运行在什么操作系统上?
答:课程采用的是ROS2的humble版本。运行在Linux(Ubuntu 22.04)操作系统上。
4.这套课程需要使用硬件吗?
答:暂不需要。如果有,那么更好。
04 参考资料
ROS2官网链接:https://www.ros.org/
第1章 ROS2概述与环境搭建
ROS是机器人操作系统(Robot Operating System)的英文缩写,是用于构建机器人应用程序的软件开发工具包。自ROS诞生以来,由于其集开源、免费、易用、低耦合、生态丰富......诸多优点于一身,迅速成为机器人行业内最受欢迎的开发框架之一,在学术、民用、商业、军事、航空航天等领域有着广泛的应用,并且随着ROS2对ROS1的全面迭代升级,也使得ROS日趋于完善,可预见的,未来很长一段时间,ROS仍将是机器人开发的中坚力量,而对于ROS自身而言,ROS1会慢慢退出,ROS2则冉冉升起。
本章作为ROS2核心教程的开篇,以ROS2的综述性知识为主,会循序渐进的带领大家认识ROS2、安装ROS2并搭建其集成开发环境,为ROS2的全方位学习做好准备。
本章概览
案例演示
案例1:ROS2安装完毕后,运行其官方例程:小乌龟。
案例2:自实现第一个ROS2小程序,在终端输出文本:hello world!。
案例3:使用VSCode搭建ROS2集成开发环境,提高开发效率。
1.1 ROS2简介
场景
机器人是一种高度复杂的系统性实现,机器人设计包含了机械结构设计、机械加工、硬件设计、嵌入式软件设计、上层软件设计等诸多模块,是各种硬件与软件的有机结合,甚至可以说机器人系统是当今工业体系的集大成者。机器人体系是相当庞大的,其复杂度之高,以至于没有任何个人、组织甚至公司能够独立完成系统性的机器人研发生产任务。
那么问题随之而来:既然机器人实现如此困难,那么我们应该如何开展相关工作呢?
一种合适的策略是——合作。让机器人研发者专注于自己擅长的领域,其他模块则直接复用相关领域更专业研发团队的实现,当然自身的研究也可以被他人继续复用。这种基于“复用”的分工协作,遵循了不重复发明轮子的原则,显然是可以大大提高机器人的研发效率的,尤其是随着机器人硬件越来越丰富,软件库越来越庞大,这种复用性和模块化开发需求也愈发强烈。
在此大背景下,便诞生了ROS。ROS是一套机器人通用软件框架,可以提升功能模块的复用性,并且随着ROS2的推出,ROS日臻完善,是机器人软件开发的不二之选。
概念
ROS(Robot Operating System)是用于构建机器人应用程序的软件开发工具包。ROS是开源的,它由一组软件库和若干工具组成。
在机器人领域,ROS是一个标准软件平台,这个平台为开发者提供了构建机器人应用程序所需的各个功能模块,并且开发者能够以“可插拔”的方式组织各个功能模块,无论开发者的程序是用于课堂实验、科学研究、原型设计或是最终产品,ROS都提供了一站式的技术支持。
另外需要注意的是,ROS虽然字面意思是机器人操作系统,但是它并非经典意义上的操作系统,更准确的讲ROS是一个 SDK(Software Development Kit)也即软件开发工具包。
作用
秉着“不要重复发明轮子”的原则,通过ROS可以复用已有功能并方便快捷的拓展新功能。
1.1.1 ROS2发展历程
1.起源
2007年,一家名为柳树车库(Willow Garage)的机器人公司发布了ROS,ROS集开源、免费、高复用、低耦合、工具丰富等等诸多优势于一身,一经推出便迅速吸引了大量的开发者、科研人员、硬件供应商的加入,形成了稳定且多样的机器人生态,水到渠成的ROS也成为了机器人领域的主流软件框架并流行至今。
但是自ROS诞生的十几年来,不管是机器人相关软件、硬件还是ROS社区都发生了天翻地覆的变化,加之ROS1存在一些设计上的先天性缺陷,各种内外因素叠加下,导致ROS1在许多应用场景下都已经显得力不从心了。此背景下,官方于2017正式推出了新一代机器人操作系统——ROS2,ROS2基于全新的设计框架,保留了ROS1的优点并改进其缺陷,ROS2的目标是适应新时代的新需求。
2.发行版本
ROS发行版是一组版本化的ROS功能包,它类似于Linux发行版(例如 Ubuntu)。ROS发行版的目的是让开发人员可以在一个相对稳定的代码库上工作,直到新的发行版推出。
以下列表为ROS2各不同发布版本的简单说明。
ROS2版本发布特点:
-
发布版本与Ubuntu版本对应,生命周期也有Ubuntu保持一致,正常情况下偶数年份发布长支持版(5年),奇数年份发布短支持版(2年);
-
版本名称由形容词+名词的格式组成,这一点与Ubuntu版本名称规则一致;
-
正常情况下,每年的5月23日,世界海龟日发布新版本。
需要另外说明的是:
官方于2020年发布了ROS1的最终版本,并将于2025年终止ROS1的维护。而早在2017年就已经推出了ROS2的第一个正式版本,并且随着ROS2的不断完善,于2022年又推出ROS2的第一个5年长支持版。对于ROS而言,这是一个里程碑式的事件,这意味着自此开始,ROS2将全面取代ROS1。
1.1.2 ROS2组成体系
整个ROS生态由通信(Plumbing)、工具(Tools)、功能(Capabilities)与社区(Community)四大部分组成。
通信(Plumbing)
通信是整个ROS系统的核心实现,是ROS内置的一个消息传递系统,通常称之为middleware(中间件)或Plumbing(管道)。
在构建新的应用程序或使用与硬件交互的软件时,如何实现通信是首当其冲的问题,为此ROS提供了专门的消息传递系统,它可以管理不同节点之间的通信细节,提高开发者的工作效率。这套消息传递系统使用了“面向接口”的编程思想,可以通过清晰规范的接口,将不同模块分离,从而也将故障隔离。使得ROS系统更易于维护、扩展性更强且保证了程序的高复用性。
接口规范可以由开发者自行定义。同时为了方便使用,在ROS中也提供了许多标准的接口,这些标准接口有着广泛应用,比如:将雷达或摄像头数据传输到可视化的用户界面或是传输到定位算法模块,都会使用到标准接口。
工具(Tools)
构建机器人应用程序极具挑战性。开发者除了会遇到一些传统的软件开发问题之外,还需要通过传感器或执行器与物理世界进行异步交互。显而易见的,良好的开发工具可以提高应用程序的开发效率,在ROS中就内置了launch、调试、可视化、绘图、录制回放等一系列工具。这些工具不光可以提高开发效率,还可以在发布产品时直接包含在产品之中。
功能(Capabilities)
ROS生态系统是机器人软件的聚宝盆。无论开发者需要用于GPS的设备驱动程序、用于四足仿生机器人的步行和平衡控制器,还是用于移动机器人的地图系统,ROS都能满足你的需求。从驱动程序到算法,再到用户界面,ROS都提供了相关实现,开发者只需专注于自身应用程序即可。
ROS的目标是提供一站式的技术支持,降低构建机器人应用程序的门槛。ROS希望任何开发者都可以将自己的“创意”变为现实,而无需了解底层软件和硬件的所有内容。
社区(Community)
ROS社区规模庞大、多样且全球化,从学生和业余爱好者到跨国公司和