前言
本文首先会对TROS手册的communication使用示例做补充说明,基于zmq ipc通信协议,介绍相对简单的使用pub-sub的单设备内部跨进程通信方法。之后会重点讲解基于zmq tcp通信协议,并以pub-sub方式实现Linux和J5的跨设备通信方法。
Linux进程间通信
配置文件
pub端
其中,ParticipantAttr{5}对应了communication.json里participants的id为5的配置,即protocol为zmq_ipc,即同设备内的跨进程通信。创建pub时(auto publisher),第四个参数需要设置为PROTOCOL_ZMQ_IPC。之后设置消息内容,再使用Pub接口将消息发出。
更多的配置/API介绍,可以查看TROS用户手册communication模块基础教程以及接口文档。
sub端
sub端的代码写法与pub端相近,主要多了个回调函数,用于打印pub端传来的信息。ParticipantAttr设置为5。创建sub时,需要在第五个参数写上PROTOCOL_ZMQ_IPC,表明是跨进程通信。
编译
其中,--config参数用于指定编译目标平台及编译工具,可选值:[linux_conan, linux_cmake, j5_conan, j5_cmake, …],这里使用conan编译工具编译可以在Linux平台上运行的程序。
运行
可以看到,现在已经成功实现了Linux内部跨进程的信息通信。
J5进程间通信
这里以J5开发板为例,讲解如何实现板端的跨进程通信。
编译
代码和communication.json文件均无需变动,只需调整编译命令即可:
运行
在运行前,需要确保板端环境已经配置好,否则会运行失败。
板端环境配置方法如下:
1、参考TROS手册的搭建Docker开发环境章节,在开发机端(Linux)以cmake方式安装TROS.A应用开发SDK
2、进入~/.tros/x.y.z/目录(x.y.z为TROS SDK版本号),将J5文件夹复制或映射到开发板
3、在开发板上执行 bash install_platform.sh,如果添加-d参数可以配置debug版本,默认为release
完成上述操作后,开发板会自动将TROS.A板端的动态库路径,设置到LD_LIBRARY_PATH系统变量中,同时将命令行工具路径设置到PATH系统变量,无需用户再手动配置。
Linux-J5跨设备通信
若想实现Linux和开发板之间的跨设备通信,需要进行以下几处修改。
communication.json
pub端
代码修改成以下内容:
主要有两处修改,第一处是将ParticipantAttr从5改成2,对应了communication.json中,id为2的配置,即protocol为zmq_tcp。并且,需要在创建pub时,将第四个参数修改为PROTOCOL_ZMQ_TCP,对应跨设备通信方式。
sub端
代码修改成以下内容:
修改方式与pub端相似,这里不再赘述。
编译
实现跨设备通信,需要编译两次,分别编译linux端和板端的可执行程序,命令如下:
运行
在linux端运行./subsciber,在板端运行./publisher,即可成功实现linux和板端的跨设备通信。
板端/pub端打印信息:

linux端/sub端打印信息:

