ROS2:从初识到深入,探索机器人操作系统的进化之路

本文涉及的产品
资源编排,不限时长
简介: 前言最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。ROS的发展历程ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op

前言

最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。

ROS的发展历程

ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。

2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Operating System,简称为ROS。

2014年起,ROS跟随Ubuntu系统,每两年推出一个长期支持版,每个版本支持五年时间,这标志着ROS的成熟,也让ROS加快了普及的步伐。

在2022年5月底,迎来了ROS2第一个长期支持版——ROS2 Humble,ROS2已经成熟,我们也进入了一个全新的ROS2时代。

提高机器人软件复用率,这个目标简单来讲就是不要重新造轮子

围绕这个核心目标,ROS在自身的设计上也尽量做到了模块化,由通信机制、开发工具、应用功能、生态系统四大部分组成。

ROS的相关社区

ROS全球社区有几个重要网站:

  • answers.ros.org:这是一个ROS问答网站,大家可以在上边提出任何关于ROS的问题,全球很多开发者都很乐意回答我们的问题;
  • wiki.ros.org,这是ROS的维基百科,记录了ROS教程和各种功能包的使用;
  • discourse.ros.org,这是ROS论坛,关于ROS开发的新鲜事都可以在这里发表和查看,比如ROS的活动、新功能包的发布等等。
  • index.ros.org,是ROS各种资源的一个索引网站;
  • packages.ros.org,是ROS功能包存储的数据库。

ROS与ROS2的对比

ROS最早的设计目标就是开发这样一款PR2家庭服务机器人,这款机器人绝大部分时间都是独立工作,为了让他具备充足的能力:

它搭载了工作站级别的计算平台和各种先进的通信设备,不用担忧算力不够,有足够的实力支持各种复杂的实时运算和处理;由于是单兵作战,通信绝大部分都自己内部完成,那就可以用有线连接,保证了良好的网络连接,没有丢数据或者黑客入侵的风险;这台机器人最终虽然小批量生产,但是由于高昂的成本和售价,也只能用于学术研究。

随着ROS的普及,应用ROS的机器人类型已经和PR2机器人有了天翻地覆的问题,也并不具备PR2这样的条件,那原本针对PR2设计的软件框架,就会出现一些问题,比如:要在资源有限的嵌入式系统中运行;要在有干扰的地方保证通信的可靠性;要做成产品走向市场,甚至用在自动驾驶汽车和航天机器人上。

类似的问题不断涌现,致使更加适合各种机器人应用的新一代ROS2顺势而生。

其具备以下优势:

  1. 多机器人系统:未来机器人一定不会是独立的个体,机器人和机器人之间也需要通信和协作,ROS2为多机器人系统的应用提供了标准方法和通信机制。
  2. 跨平台:机器人应用场景不同,使用的控制平台也会有很大差异,比如自动驾驶汽车中的算力性能肯定比AMR机器人强很多,为了让所有机器人都可以运行ROS2,ROS2可以跨平台运行于Linux、Windows、MacOS、RTOS,甚至是没有任何系统的微控制器(MCU)上,这样我们就不用纠结自己的控制器能不能用ROS了。
  3. 实时性:机器人运动控制和很多行为策略要求机器人具备实时性,比如机器人要可靠得在100ms内发现前方的行人,或者稳定的在1ms周期内完成运动学、动力学的解算,ROS2为类似这样的实时性需求提供了基本保障。
  4. 网络连接:无论在怎样的网络环境下,ROS2都可以尽量保障机器人大量数据的完整性和安全性,比如在wifi信号不好的时候数据也要尽力发送过去,在有黑客入侵风险的场景下要对数据进行加密解密。
  5. 产品化:,大量机器人已经走向我们的生活,未来还会越来越多,ROS2不仅可以用于机器人研发阶段,还可以直接搭载在产品中,走向消费市场,这对ROS2的稳定性、强壮性也提除了巨大挑战。
  6. 项目管理:机器人开发是一个复杂的系统工程,设计、开发、调试、测试、部署等全流程的项目管理工具和机制,也会在ROS2中体现,更方便我们去开发一款机器人。

ROS2推翻了ROS,全部进行了重构。

  • 系统架构进行了颠覆性的变化,ROS1中所有节点都需要在节点管理器ROS Master的管理下进行工作,一旦Master出现问题,系统就面临宕机的风险,ROS2实现了真正的分布式,不再有Master这个角色,借助一种全新的通信框架DDS,为所有节点的通信提供可靠保障。
  • 软件API进行了重新设计,ROS1原有的接口已经无法满足需求,ROS2结合C++最新标准和Python3语言特性,设计了更具通用性的API,虽然导致原有ROS1的代码无法直接在ROS2中运行,但是尽量保留了类似的使用方法,同时提供了大量移植的说明。
  • 编译系统进行了升级,ROS1中使用的rosbuild和catkin问题诸多,尤其是针对代码较多的大项目以及Python编写的项目,编译、链接经常会出错,ROS2对这些问题也进行了优化,重新优化后的编译系统叫做ament和colcon。

DDS的介绍

DDS其实是物联网中广泛应用的一种通信协议,类似于我们常听说的5G通信一样,DDS是一个国际标准,能够实现该标准的软件系统并不是唯一的,所以我们可以选择多个厂家提供的DDS系统,比如这里的OpenSplice、FastRTPS,还有更多厂家提供的,每一家的性能不同,适用的场景也不同。

不过这就带来一个问题,每个DDS厂家的软件接口肯定是不一样的,如果我们按照某一家的接口写完了程序,想要切换其他厂家的DDS,不是要重新写代码么?这当然不符合ROS提高软件复用率的目标。

为了解决这个问题,ROS2设计了一个ROS Middleware,简称RMW,也就是指定一个标准的接口,比如如何发数据,如何收数据,数据的各种属性如何配置,都定义好了,如果厂家想要接入ROS社区,就得按照这个标准写一个适配的接口,把自家的DDS给移植过来,这样就把问题交给了最熟悉自家DDS的厂商。对于我们这些用户来讲,某一个DDS用的不爽,只要安装另一个,然后做一个简单的配置,程序一行的都不用改,轻松更换底层的通信系统。

总之,DDS的加入,让ROS2系统更加稳定,也更加灵活,当然复杂度也会高一些。这样,我们不用再纠结ROS的通信系统是否稳定、该如何优化等问题,更多精力都可以放在其他三个部分,专注优化我们的机器人应用功能。

主要的核心概念:

ROS2的安装

目前手上用的是ubuntu20.04版本的PC,因而不是用最新版本的ROS2,但安装的方法都是一摸一样的。

1.设置编码

$ sudo apt update && sudo apt install locales
$ sudo locale-gen en_US en_US.UTF-8
$ sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 
$ export LANG=en_US.UTF-8

2.添加源

$ sudo apt update && sudo apt install curl gnupg lsb-release 
$ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg 
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

在安装和配置ROS的过程中遇到类似这样的报错:

curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 16 ms: Connection refused

就自己改一下host

sudo vi /etc/hosts

3.安装ROS

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install ros-foxy-desktop

4.设置环境变量

$ source /opt/ros/foxy/setup.bash
$ echo " source /opt/ros/foxy/setup.bash" >> ~/.bashrc

至此,ROS2就已经在系统中安装好了。

ROS2的测试

先试试ROS2底层通信系统DDS是否正常

启动第一个终端,通过以下命令启动一个数据的发布者节点:

$ ros2 run demo_nodes_cpp talker

启动第二个终端,通过以下命令启动一个数据的订阅者节点:

$ ros2 run demo_nodes_py listener

看到一直报hello world就说明成功了。

ROS的命令行

想要运行ROS2中某个节点,我们可以使用ros2 run命令进行操作

ros2 run turtlesim turtlesim_node

查看节点信息

ros2 node list

如果对某一个节点感兴趣,加上一个info子命令

ros2 node info /turtlesim

查看话题信息

ros2 topic list

看到某一个话题中的消息数据,加上echo子命令试一试

ros2 topic echo /turtle1/pose

构建开发环境

目前我都是用的vscode,推荐以下插件使用:

  1. Python插件
  2. C++插件
  3. CMake插件
  4. vscode-icons
  5. ROS
  6. Msg Language Support
  7. URDF
  8. Markdown All in One
相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
20天前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
|
6月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
178 1
|
1月前
|
人工智能 搜索推荐 物联网
操作系统的进化之路:从命令行到智能时代
【10月更文挑战第18天】 本文将带你穿越操作系统的演变历程,从最初的命令行界面到今天的智能操作系统。我们将探讨操作系统如何从简单的任务管理工具发展成为支持复杂应用程序和人工智能的多功能平台。
27 0
|
4月前
|
弹性计算 运维 自然语言处理
启迪操作系统智慧的神:操作系统智能助手OS Copilot
OS Copilot 是阿里云针对Linux推出的一款智能助手,基于大模型构建,简化了Linux操作和运维工作。它支持自然语言问答,辅助命令执行,阿里云CLI调用以及系统运维和调优。这款工具特别适合初学者和运维人员,减少了对命令记忆的需求,通过对话式交互即可完成任务。
186 15
|
4月前
|
人工智能 运维 自然语言处理
理想的操作系统助手
《理想的操作系统助手OS Copilot》介绍了阿里云针对Linux系统推出的智能助手,该助手基于大模型,专为Alibaba Cloud Linux 3设计,提供自然语言问答、命令执行辅助和系统运维调优功能。OS Copilot简化了命令行操作,尤其适合不熟悉Linux的用户。用户需申请邀测资格,然后在Alibaba Cloud Linux 3上安装客户端,并配置AK以使用云端能力。虽然目前不支持图形界面和多模态交互,但其智能化和高效性得到了好评。然而,安全性、个性化和跨平台兼容性是其潜在的局限性。总的来说,OS Copilot是一个免费且实用的Linux命令行增强工具。
|
传感器 机器人 C++
机器人操作系统ROS 编程开发--详细总结
最近工作涉及到自动驾驶的,需要学习ROS,学习中总结了一些知识点,分享给大家。 机器人操作系统ROS,是一种分布式处理框架(又名Nodes),ROS常用C++和python编程语言开发;(这里项目开发采用C++ 11版本)。ROS的点对点设计以及服务和节点管理器等机制,可以分散由计算机视觉和语音识别等功能带来的实时计算压力,能够适应多机器人遇到的挑战。ROS免费并且开源。
1388 0
|
存储 传感器 算法
机器人操作系统ROS浅析
ROS是Robot Operating System的缩写,原本是斯坦福大学的一个机器人项目,后来由Willow Garage公司发展,目前由OSRF(Open Source Robotics Foundation, Inc)公司维护的开源项目
739 0
机器人操作系统ROS浅析
|
机器人 人机交互
ROS人机交互软件
ROS人机交互软件
ROS人机交互软件
|
传感器 数据可视化 机器人
下一篇
无影云桌面