背景
Ubuntu 16.04
C++ API
lcm 1.30
1. 安装
版本: 1.3.0, 下载
安装 autoconf
:
$ sudo apt-get install autoconf
解压, 编译, 在LCM目录下执行:
$ autoreconf -i
$ ./configure
$ make -j8 -l8
$ sudo make install
安装位置:/usr/local/
:
- 在/usr/local/bin目录下安装lcm-gen, lcm-logger, lcm-logplayer, lcm-logplayer-gui, lcm-spy可执行程序
- 在/usr/local/lib目录下安装liblcm.la, liblcm.so, liblcm.so.1, liblcm.so.1.3.3库文件
- 在/usr/local/include目录下安装eventlog.h, lcm_coretypes.h, lcm-cpp.hpp, lcm-cpp-impl.hpp, lcm.h头文件
配置头文件, 在home/igs/.profile
中添加以下内容后, 重启:
#glib c++
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/glib-2.0:/usr/lib/x86_64-linux-gnu/glib-2.0/include
#lcm
#export CLASSPATH=.:$CLASSPATH:/program/3rd/lcm/lcm-1.2.1/lcm-java/build/lcm
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
#glib c
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include/glib-2.0:/usr/lib/x86_64-linux-gnu/glib-2.0/include
2. 介绍
LCM(Lightweight Communications and Marshalling)是一套用于消息传递和数据编组的库和工具,针对高带宽和低延迟至关重要的实时系统。 它提供了一个发布/订阅消息传递模型和自动编组/解组代码生成,并为各种编程语言的应用程序提供绑定。
C++ API 提供了三个类两个结构体封装LCM:
class lcm::LCM
struct lcm::ReceiveBuffer
class lcm::Subscription
struct lcm::LogEvent
class lcm::LogFile
3. 教程
该教程介绍了如何使用C++ API交换LCM信息(LCM 提供了多种语言的API, 这里只以C++ 为例). 教程包含以下几部分:
3.1 创建类型定义(type definition)
由于类型定义与编程语言类型无关,故第一步对所有编程语言都一样; 类型规则的定义与C语言非常像, 下面是一个名为example_t的示例类型, 创建一个名为 example_t.lcm
的文件.
package exlcm;
struct example_t
{
int64_t timestamp;
double position[3];
double orientation[4];
int32_t num_ranges;
int16_t ranges[num_ranges];
string name;
boolean enabled;
}
更多类型规范,下表是基本类型规范:
type | Description |
---|---|
int8_t | 8-bit signed integer |
int16_t | 16-bit signed integer |
int32_t | 32-bit signed integer |
int64_t | 64-bit signed integer |
float | 32-bit IEEE floating point value |
double | 64-bit IEEE floating point value |
string | UTF-8 string |
boolean | true/fal |