ROS Node
node是执行运算的进程。节点相互组合成gragh,并通过streaming topics、PRC service、Parameter Server来进行通信。
ROS中节点的使用为整个系统提供了几个好处。由于崩溃被隔离到各个节点,所以还有额外的容错功能。与单片系统相比,代码复杂性降低。由于节点向图的其余部分展示了最小的API,所以实现细节也被很好地隐藏起来,并且替换实现(即使在其他编程语言中)也可以很容易地被替换。
所有正在运行的节点都有一个资源名称,用于唯一标识系统的其余部分。节点也有节点类型,这简化了引用文件系统上可执行节点的过程。这些节点类型是包资源名称,其中包含节点包的名称和节点可执行文件的名称。为了解析一个节点类型,ROS用指定名称搜索包中的所有可执行文件并选择它找到的第一个可执行文件。因此,不要在同一个包中生成具有相同名称的不同可执行文件。
node在交互的时候分成publishers和subscribers。
ROS Topic
Topic是node交换Messages的命名总线。三者的关系就像:
node是站点,topic是路线,而messages是路线上的车辆。
Topic具有匿名的publishers和subscribers,它将信息的生产从其消费中分离出来。通常,nodes不知道他们正在与谁通信。相反,对数据感兴趣的nodes订阅相关topic; 生成数据的nodes发布到相关topic。一个topic可以有多个publishers和subscribers。
Topic旨在用于单向流式通信。需要执行远程过程调用(即接收对请求的响应)的节点应该使用services而不是topic。此外,还存在用于维护少量状态的Parameter Server。
ROS Message
Node通过将messages发布到topic来相互通信。Message是一个简单的数据结构,包含类型字段。标准的基本类型(整型,浮点型,布尔型等)和原始类型的数组都是受支持的。消Message可以包含任意嵌套的结构和数组(很像C结构)。
Node也可以交换request message和response message作为ROS service call的一部分。这些request message和response message在srv文件中定义。
ROS Service
服务是节点之间通信的另一种方式。
发布/订阅模型是一种非常灵活的通信模式,但是它的多对多单向传输不适用于分布式系统中经常需要的RPC请求/应答交互。请求/回复是通过service完成的,service由一对消息定义:一个用于请求,另一个用于回复。提供的ROS node在字符串名称下提供service,客户端通过发送request message并等待回复来调用service。客户端库通常将这种交互作用呈现给程序员,就像它是一个远程过程调用一样。
Service使用srv文件来定义,srv文件由ROS客户端库编译成源代码。
客户端可以建立与服务的持久连接,从而以较低的服务提供者变更的鲁棒性为代价实现更高的性能。
ROS Master
ROS Master为ROS系统的其余节点提供命名和注册服务。它跟踪发布者和订阅者的主题以及服务。Master的作用是使各个ROS节点相互定位。一旦这些节点互相找到对方,就彼此通信。
Master还提供Parameter Server(参数服务器)。
Master最常用的是使用roscore命令,它将ROS Master与其他重要组件一起加载。
示例:
例如,假设我们有两个nodes: Camera node和Image_viewer node。一个典型的事件序列将开始于Camera通知master,它想要发表的topic“images”的图像:
现在,Camera将图像发布到“images”topic,但是没有人订阅该topic,因此实际上没有发送数据。现在,Image_viewer想订阅topic“images”,看看是否有一些图像:
现在主题“图像”既有发布者又有订阅者,主节点通知Camera和Image_viewer有关相互的存在,以便他们可以开始传送图像到另一个:
ROS Bag
一个bag是ROS中用于存储ROS message data的文件格式。Bags——因为扩展名为.bag而得名——在ROS中起着重要作用,并且ROS中已经编写了各种工具来允许存储、处理、分析和可视化它们。
Bags通常由诸如rosbag之类的工具创建,该工具订阅一个或多个ROS topic,并且在接收到序列化的消息数据时将其存储在文件中。
数据记录是ROS的主要机制,这意味着它们有多种离线用途。研究人员已经使用bag文件工具链来记录数据集,然后对其进行可视化标记,并将其存储起来以供将来使用。
ROS Parameter Server
Parameter server是可通过网络API访问的共享的多变量字典。Nodes使用此server在运行时存储和检索参数。由于它不是为高性能而设计的,因此最好用于静态非二进制数据,例如配置参数。它全局可见,以便工具可以轻松检查系统的配置状态并在必要时进行修改。
ROS Action
ROS中常用的通讯机制是topic和service,但是在很多场景下,这两种通讯机制往往满足不了我们的需求,ROS中有一个actinlib的功能包集,实现了action的通讯机制。那么什么是action呢?action也是一种类似于service的问答通讯机制,不一样的地方是action还带有一个反馈机制,可以不断反馈任务的实施进度,而且可以在任务实施过程中,中止运行。
调试信息宏:五个等级
ROS_DEBUG()
ROS_INFO()
ROS_WARN()
ROS_ERROR()
ROS_FATAL()
ROS_DEBUG()和ROS_INFO()通常显示在stdout上。其它的则显示在stderr上。且颜色也不同。
package和stack的关系
stack和distribution的关系