我的ROS学习笔记(一)


前言

之前学习ROS的时候,因为身边的人可能接触的比较少,只能自己不断摸索。刚开始看了古月的21讲,之后又不断寻找各种资料,同时在官网运行例程。我想根据我所学习的整理一下笔记。

ROS系统架构

ROS系统架构主要分为三部分:

1.文件系统级(解释ROS的内部构成,文件夹结构,工作的核心文件)
2.计算图集(体现进程与系统的通信)
3.开源社区集(解释一系列工具和概念)

1.文件系统级

在这里插入图片描述
**功能包(Package)**功能包是ROS中软件组织的基本形式。一个功能包具有最小的结构和最少的内容,用于创建ROS程序。它可以包含ROS运行的进程(节点)、配置文件等。

**功能包清单(Manifest)**功能包清单提供关于功能包、许可信息、依赖关系、编译标志等的信息。功能包清单是一个manifests.xml文件,通过这个文件能够实现对功能包的管理。

**功能包集(Stack)**如果你将几个具有某些功能的功能包组织在一起,那么你将会获得一个功能包集。在ROS系统中,存在大量的不同用途的功能包集,例如导航功能包集。

**功能包集清单(Stack manifest)**功能包集清单(stack.xml)提供一个关于功能包集的清单,包括开源代码的许可证信息、与其他功能包集的依赖关系等。

**消息类型(Message /msg type)**消息是一个进程发送到其他进程的信息。ROS系统有很多的标准类型消息。消息类型的说明存储在my_package/msg/MyMessageType.msg 中,也就是对应功能包的msg文件夹下。

**服务类型( Servicelsrv type)**对服务的类型进行描述说明的文件在ROS系统中定义了服务的请求和响应的数据结构。这些描述说明存储在my_package/ srv/ MyServiceType.srv中,也就是对应功能包的srv文件夹下。

接下来对上面其中几个作进一步的解释

功能包

指一种特定的文件结构和文件夹组合。结构包括:

bin/这是我们编译和链接程序后,用于存储可执行文件的文件夹。

include/package_name/此目录包含了你所需要库的头文件。不要忘记导出功能包清单,因为它们还会被其他功能包所使用。

msg/如果你要开发非标准消息,请把文件放在这里。

scripts/其中包括Bash、Python或任何其他脚本的可执行脚本文件。

src/这是存储程序源文件的地方。你可能会为节点创建一个文件夹或按照你希望的方式去组织它。

srv/这表示的是服务(srv)类型。

CMakeLists.txt这是CMake的生成文件。

manifest.xml这是功能包清单文件。

常用操作功能包的命令:
rospack使用此命令来获取信息或在系统中查找功能包。
roscreate-pkg当你想要创建一个新的功能包时,使用此命令。rosmake使用此命令来编译功能包。
rosdep此命令安装功能包的系统依赖项。
rxdeps如果你想要查看功能包的依赖关系图,使用此命令。

功能包集

ROS系统中的很多功能包被组织成ROS 功能包集。如果说功能包的目标是创建易于代码复用的最小代码集合,那么功能包集的目标则是简化代码共享的过程。
功能包集必需的三个文件是:CMakeList.txt、Makefile和stack.xml。如果你在文件夹中见到stack.xml,那么可以确定这是一个功能包集。

创建功能包集命令:roscreate-stack

消息类型

ROS提供了很多预定义消息类型。如果你创建了一种新的消息类型,那么就要把消息的类型定义放到功能包的msg/文件夹下。在该文件夹中,有用于定义各种消息的文件。这些文件都以.msg 为扩展名。

消息类型必须具有两个主要部分:字段和常量。字段定义了要在消息中传输的数据的类型,例如 int32、float32、string或之前创建的自定义类型,如叫做type1和type2的新类型。常量用于定义字段的名称。
例如 int32 id
ROS消息中的一种特殊数据类型是报文头,主要用于添加时间戳、坐标位置等。报文头还允许对消息进行编号。通过在报文头内部附加信息,我们可以知道是哪个节点发出的消息,或者可以添加一些能够被ROS处理的其他功能。

2.计算图级

在这里插入图片描述
ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点交互,获取其他节点发布的信息,并将自身数据发布到网络上。

**节点(Node)**节点是主要的计算执行进程。如果你想要有一个可以与其他节点进行交互的进程,那么你需要创建一个节点,并将此节点连接到ROS网络。通常情况下,系统包含能够实现不同功能的多个节点。你最好让每一个节点都具有特定的单一的功能,而不是在系统中创建一个包罗万象的大节点。节点需要使用如roscpp或rospy的ROS客户端库进行编写。

**节点管理器(Master)**节点管理器用于节点的名称注册和查找等。如果在你的整个ROS系统中没有节点管理器,就不会有节点、服务、消息之间的通信。需要注意的是,由于ROS本身就是一个分布式网络系统,你可以在某一台计算机上运行节点管理器,在其他计算机上运行由该管理器管理的节点。

**参数服务器(Parameter Server)**参数服务器能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能够在运行时配置节点或改变节点的工作任务。

**消息(Message)**节点通过消息完成彼此的沟通。消息包含一个节点发送到其他节点的数据信息。ROS中包含很多种标准类型的消息,同时你也可以基于标准消息开发自定义类型的消息。

**主题( Topic)**主题是由ROS网络对消息进行路由和消息管理的数据总线。每一条消息都要发布到相应的主题。当一个节点发送数据时,我们就说该节点正在向主题发布消息。节点可以通过订阅某个主题,接收来自其他节点的消息。一个节点可以订阅一个主题,而并不需要该节点同时发布该主题。这就保证了消息的发布者和订阅者之间相互解耦,完全无需知晓对方的存在。主题的名称必须是独一无二的,否则在同名主题之间的消息路由就会发生错误。

**服务(Service)**在发布主题时,正在发送的数据能够以多对多的方式交互。但当你需要从某个节点获得一个请求或应答时,就不能通过主题来实现了。在这种情况下,服务能够允许我们直接与某个节点进行交互。此外,服务必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端库所编写的代码与它通信。
消息记录包(Bag)消息记录包是一种用于保存和回放ROS消息数据的文件格式。消息记录包是一种用于存储数据的重要机制。它能够获取并记录各种难以收集的传感器数据。我们可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试。在使用复杂机器人进行实验工作时,需要经常使用消息记录包。

3.开源社区级

ROS开源社区级的概念王要天于ROS资源,能够迪过独立的网络社区分孕软件和知识。这些资源包括:
发行版(Distribution) ROS发行版是可以独立安装的、带有版本号的一系列功能包集。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合来维持一致的版本。

软件源(Repositorie) ROS依赖于共享开源代码与软件源的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。

ROS wiki ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户和贡献自己的文件、提供更正或更新、编写教程以及其他信息。

邮件列表(Mailing list ) ROS 用户邮件列表是关于ROS的主要交流渠道,能够交流从ROS软件更新到ROS软件使用中的各种疑问或信息。

总结

我觉得ROS刚开始的概念都是很重要的,所以前面尽量详细一些。之后就是上面相关内容在ubuntu上的实践操作啦!
参考书籍《Learning ROS for Robotics Programming》

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值