最近在一家无人驾驶公司实习做感知算法工程师,牵扯到感知到的信息传输问题,据了解,现有的无人驾驶行业领域信息的传输都采用了LCM传输协议,速度快封装简便。
那么,LCM协议是怎么组成的呢:
LCM(Lightweight Communications and Marshalling)是一套用于消息传递和数据编组的库和工具的集合,旨在为实时系统提供高带宽和低延迟的消息传递的能力,由于其基于UDP传输的属性,传输速度较快。它提供了一个发布/订阅消息传递模型以及为各种编程语言的应用程序自动生成编/解组代码。
LCM允许多个进程以安全和高性能地方式进行消息的交换。消息是LCM通信的基本单元,LCM传输协议是通过不同的Channel进行传输,在不同的Channel封装好信息之后,进行整体信息传输。LCM协议的编写支持C、C++、Java、 Python等编程语言,关于LCM协议的使用可以参考官方文档。
LCM官方有一个Github地址:https://github.com/lcm-proj/lcm
在Github里可以下载LCM,下载完成之后,进行安装(Ubuntu16.04)。
$ unzip lcm-X.Y.Z.zip
$ cd lcm-X.Y.Z
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
//安装完成之后需要进行编译链接
$ export LCM_INSTALL_DIR=/usr/local/lib
$ echo $LCM_INSTALL_DIR > /etc/ld.so.conf.d/lcm.conf
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$LCM_INSTALL_DIR/pkgconfig
首先,要新建一个LCM传输协议的struct,就是要封装的内容格式。
typedef struct _exlcm_example_t exlcm_example_t;
struct _exlcm_example_t {
int64_t timestamp;
double position[3];
double orientation[4];
int32_t num_ranges;
int16_t ranges;
char name;
int8_t enabled;
};
官方的指导文档已经介绍的比较全面了:http://lcm-proj.github.io/
主要的就是有几个命令帮助比较大,但是我没在官方文档里找到:
lcm-logger :记录文档
lcm-logplayer:可视化log文件