ROS入门与实践--2(ROS系统架构)

ROS入门与实践--2

  • 1 ROS系统架构
    • 1.1 OS层
    • 1.2 中间层
    • 1.3 应用层
  • 2 ROS架构-系统实现角度
    • 2.1 计算图
    • 2.2 文件系统
      • 2.2.1 文件系统结构
      • 2.2.2 文件系统相关工具命令
    • 2.3 开源社区

1 ROS系统架构

根据ROS的系统架构图,如下图所示,可以将其分为OS层、中间层和应用层三个层次。
ROS入门与实践--2(ROS系统架构)_第1张图片

1.1 OS层

OS 层,即为经典意义的操作系统,而ROS虽然机器人操作系统(Robot Operating System)的简称,但ROS并不是一个经典意义上的操作系统,并不能像Windows、Mac、Linux这些操作系统那样直接在计算机硬件上运行。对于ROS的OS层,我们需要依托官方推荐的Linux的Ubuntu系统来运行,同时一些较新的ROS版本也可以运行在Windows、Mac这些系统上,这里不在赘述。

1.2 中间层

ROS经常运行在Linux操作系统上,但Linux是一个开源的通用系统,并没有针对机器人的一些功能和实现提供特殊的中间件,所以ROS在中间层封装了大量的关于机器人开发的中间件。最为主要的就是基于TCP/UDP继续封装的TCPROS/UDPROS通信系统。首先ROS的通信系统是基于TCP/UDP网络的,在此之上进行再次封装,从而成为了TCPROS/UDPROS。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。
除此之外,为了适合对数据传输实时性方面有较高要求的应用。ROS还提供了一种进程内的通信方法——Nodelet,可以为多进程通信提供–种更优化的数据传输方式。
在通信机制的基础上,ROS为开发者提供了大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。

1.3 应用层

为了保证整个ROS系统的正常运行,ROS需要在应用层运行一个管理者,即Master。在ROS的社区内,官方和开发者们共享了大量和机器人开发相关的应用功能包,功能包内的模块以节点为单位运行起来,通过ROS标准的输入输出作为接口,功能包内封装好了功能实现的逻辑代码,但这不是开发者人员关注的重点,只需要了解接口的规则和协议即可实现复用,从而大大提高了开发效率。

2 ROS架构-系统实现角度

从系统实现的角度,即ROS自身实现而言,可以分为计算图、文件系统、开源社区三层。
ROS入门与实践--2(ROS系统架构)_第2张图片

2.1 计算图

计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器(Parameter Server)、消息(Messages)、服务(Services)、话题(Topics)和包(Bags),它们都以不同的方式向图(Graph)提供数据。

  • 节点(Nodes):节点是一个可执行文件,它可以通过ROS来与其他节点进行通信。
  • 消息(Messages):订阅或发布话题时所使用的ROS数据类型。
  • 话题(Topics):节点可以将消息发布到话题,或通过订阅话题来接收消息。
  • 主节点(Master):ROS的命名服务,例如帮助节点发现彼此。
  • rosout:在ROS中相当于stdout/stderr(标准输出/标准错误)。
  • roscore:主节点 + rosout + 参数服务器。
    当ROS 程序运行之后,不同的节点之间是错综复杂的,ROS 中提供了一个实用的工具:rqt_graphrqt_graph能够创建一个显示当前系统运行情况的动态图形。ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程。rqt_graphrqt程序包中的一部分。
    如果我们在第一节安装的是桌面完整版的ROS,那么我们可以直接使用这个功能,Ctrl+Alt+T,在roscore运行的状态下,调出终端在并输入以下指令
rosrun rqt_graph rqt_graph

ROS入门与实践--2(ROS系统架构)_第3张图片
在没有运行任何节点的情况下,rqt_graph的GUI界面是空白的,这时候我们可以调用ROS系统内置的乌龟GUI节点来演示rqt_graph的作用。
首先按照第一节的操作调出乌龟GUI节点,然后重新打开一个终端,输入rosrun rqt_graph rqt_graph,可以看到以下界面,图中的形式类似网络拓扑图,并且显示了各个节点之间的关系。
ROS入门与实践--2(ROS系统架构)_第4张图片
图中显示了节点/teleop_ turtle和节点/turtlesim之间通过话题/cmd_vel进行通信。

2.2 文件系统

文件系统层概念主要指在硬盘里能看到的ROS目录和文件。

2.2.1 文件系统结构

和操作系统类似,ROS将所有的文件按照一定的组织规则进行组织,ROS文件系统就是在硬盘上ROS源代码的组织形式,其结构如下图所示:
ROS入门与实践--2(ROS系统架构)_第5张图片

Work_Space --- 自定义的工作空间

    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。

    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。

    |--- src: 源码

        |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成

            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件

            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)

            |-- scripts 存放脚本文件(比如Python文件 *.py,shell文件 *.sh)

            |-- src 存储C++源文件(*.c/*.cpp)

            |-- include 头文件(*.h)

            |-- msg 消息通信格式文件(*.msg)

            |-- srv 服务通信格式文件(*.srv)

            |-- action 动作格式文件

            |-- launch 可一次性运行多个节点 (*.launch)

            |-- config 配置信息(*.yaml等)
            
            |-- urdf 存放定义机器人模型文件(*.urdf)
            

        |-- CMakeLists.txt: 编译的基本配置
        

这里功能包的创建、src目录下cpp文件的编写、scripts目录下python文件的编写、launch目录下launch文件的编写,配置package.xml 与 CMakeLists.txt 文件。在后续的教程我们将会详细介绍,这里先进行简单的了解。

2.2.2 文件系统相关工具命令

程序代码散落在许多ROS包中。使用Linux内置命令行工具(如ls和cd)来进行查找和导航可能非常繁琐,因此ROS提供了专门的命令工具来简化这些操作。下面列出了一些命令及作用。

命令 作用 例子
catkin_create_pkg 自定义包名 依赖包 创建新的ROS功能包 catkin_create_pkg xxx roscpp rospy
sudo apt install 功能包名 安装 ROS功能包 sudo apt install
sudo apt purge 功能包名 删除某个功能包 sudo apt purge xxx
rospack list 列出所有功能包 rospack list
rospack find 功能包名 查找某个功能包是否存在,如果存在返回安装路径 rospack find xxx
roscd 功能包名 进入某个功能包 roscd xxx
rosls 功能包名 列出某个包下的文件 rosls xxx
apt search 功能包名 搜索某个功能包 apt search xxx
rosed 功能包名 文件名 修改功能包文件 rosed xxx xxx.cpp
roscore 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信 roscore/roscore -p xxxx (指定端口号)
rosrun 功能包名 可执行文件名 运行指定的ROS节点 rosrun turtlesim turtlesim_node
roslaunch 功能包名 launch文件名 执行某个包下的 launch 文件 roslaunch xxx xxx.launch

注:roscore 将启动:ros master、ros 参数服务器、rosout 日志节点。

2.3 开源社区

ROS的社区级概念是ROS网络上进行代码发布的一种表现形式:

  • 发行版(Distribution)
    ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。
  • 软件库(Repository)
    ROS依赖于共享开源代码与软件库的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。
  • ROS维基(ROS Wiki)
    ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及其他行为。网址是http://wiki.ros.org/。
  • Bug提交系统(Bug Ticket System)
    如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。
  • 邮件列表(Mailing list)
    ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。网址是http://lists.ros.org/。
  • ROS问答(ROS Answer)
    用户可以使用这个资源去提问题。网址是https://answers.ros.org/questions/。
  • 博客(Blog)
    你可以看到定期更新、照片和新闻。网址是https://www.ros.org/news/,不过博客系统已经退休,ROS社区取而代之,网址是https://discourse.ros.org/。
    为了便于理解,下图给出了ROS资源社区的组织形式。
    ROS入门与实践--2(ROS系统架构)_第6张图片

至此,机器人操作系统(ROS)入门与实践–2的内容全部更新完,接下来我将继续更新ROS入门与实践的后续内容,希望大家支持,本人是自学ROS的研究生小白,主要是根据赵虚左老师的课程、官方的文档以及按照自己的实际操作来写的教程,其中部分内容借鉴了赵虚左老师的方法,在这里给出教程的网址,希望大家一起学习,谢谢大家!!!

参考资料:
http://www.autolabor.com.cn/book/ROSTutorials/
http://wiki.ros.org/ROS/Concepts

你可能感兴趣的:(ROS入门学习,机器人)