Lightweight Communications and Marshalling (LCM)是消息传递和数据编码的工具库,高带宽和低延迟的实时系统,提供发布/订阅消息传递模型。
官方开源地址:https://github.com/lcm-proj/lcm
本文主要基于官方文档介绍JAVA版本的使用,本文在ubuntu下编译,下文设计的命令在ubuntu下有效。
lcm-gen编译安装
参考文档 build-instructions.md,相关命令如下:
$ git clone https://github.com/lcm-proj/lcm lcm-proj
$ cd lcm-proj
$ mkdir build
$ cd build
$ sudo apt install openjdk-8-jdk-headless cmake libglib2.0-dev build-essential
$ cmake ..
$ make
编程完成后,会在build目录生成相关的文件,将会用到以下两个文件
build/lcmgen/lcm-gen
build/lcm-java/lcm.jar
LCM 使用
LCM是基于发布、订阅消息模型,参考docs/content/tutorial-java.md。
- 发送消息源码:
examples/java/example_t_demo/SendMessage.java - 订阅消息的源码:
examples/java/example_t_demo/MySubscriber.java - 编译运行前,准备所需要的
example_t.lcm
和lcm.jar
$ cd examples/java/example_t_demo
$ cp ../../types/example_t.lcm ./
$ cp ../../../build/lcm-java/lcm.jar ./
-
使用lcm-gen将
*.lcm
转换为exlcm/example_t.java
../../../build/lcmgen/lcm-gen -j example_t.lcm
-
编译所有的java文件
javac -cp .:lcm.jar *.java exlcm/*.java
-
运行订阅者
MySubscriber
java -cp .:lcm.jar MySubscriber
-
新建一个命令窗口,运行发布者
SendMessage
java -cp .:lcm.jar SendMessage
-
运行正常,会在
MySubscriber
窗口显示如下数据
问题备注
- 在WIFI下,收不到局域网的数据包,或者丢包严重
- 收发数据包太大,WIFI路由器性能受限;
- 收发设备性能受限,可以参考 multicast_setup 修改
- 关于JAVA UPD 包大小限制说明,可以参考 java-datagrampacket-udp-maximum-send-recv-buffer-size