专栏算法工具链Communication服务发现配置方法

Communication服务发现配置方法

DR_KAN2023-12-04
42
0

前言

TROS的communication模块支持服务发现模式,在该模式下,用户不需要在communication.json配置文件中配置具体的participant id信息,并且在创建pub/sub等通信实体时,也不需要添加participant id信息,communication会自动在当前广播域中按照规则进行匹配,具体的匹配规则为:相同domain + 相同topic + 相同通信协议,符合该规则,communication即可自动关联通信域中的可通信实体,实现自动链接并通信。

本教程会具体介绍如何使用服务发现模式,并展示实际运行效果。

概念详解

服务发现

服务发现的主要功能是,通过局域网广播,让多个进程之间互相发现对方,并且交换进程之间的通信相关信息,从而实现自动匹配,自动创建链接的目的。当用户无法提前确定通信主机的IP地址时,建议使用服务发现模式。

domain

domain是虚拟化的namespace,起到隔离的作用,只有处在同一个domain中的通信实体才能进行通信。为减少不必要的带宽浪费,处于不同domain下的节点,即使topic相同,也无法建立通信。

topic

topic指主题,正在发布的信息会被分到称为topic的通道,topic具有唯一名称,只有相同domain且相同topic的节点之间才能进行通信。

通信协议

通信实体要实现彼此之间的通信,必须遵循特定的规则和约定,也就是通信协议。对于communication的服务发现模式,支持的通信协议有以下几种:

zmq tcp(基于 zmq 的 tcp socket 通信,用于跨设备的通信)

zmq ipc(基于 zmq 的 ipc socket 通信,用于进程间通信,windows 平台不支持)

zmq epgm(基于zmq的epgm socket通信,用于组播通信,且通信双方必须在同一个局域网)

intra(进程内通信)

shared memory(基于共享内存的通信,分为CPU shared memory和hbmem shared memory两种)

Fast-DDS(基于 eProsima Fast DDS 通信,用于跨设备的通信)

Hybrid

其中,Hybrid不是一个具体的通信协议,仅支持在服务发现模式下使用,communication会根据对端与本端的关系自动选择连接协议,具体规则如下:

同进程:intra

同主机不同进程:shared memory

不同主机:zmq tcp

配置方法

首先,建议用户根据社区文章《基于communication的进程间/跨设备通信方案》的指导,完成Linux进程间通信的最简代码编写,能成功使用pub-sub方式实现基于linux的跨进程通信。相关工程位于SDK的samples/component_samples/communication_ex目录。
启用服务发现模式,只需要在代码中创建CommAttr时,不传入participant id即可。具体的代码片段展示如下,其中,pub端和sub端的domain均为“0”,topic均为“topic”,通信协议均为“PROTOCOL_ZMQ_IPC”,符合服务发现的匹配规则要求。

pub端

sub端

communication.json

配置文件不需要修改,和服务发现有关的配置项展示如下,具体含义可参考TROS用户手册的模块介绍-communication-基础教程-配置说明章节。

运行结果

修改代码后,在sample目录下执行python3 build.py --config linux_conan即可编译。

程序执行时,如果成功基于服务发现模式进行通信,pub端和sub端会分别打印以下信息。

pub端

sub端





算法工具链
杂谈
评论0
0/1000