LCM(Lightweight Communications and Marshalling)是一个轻量级的通信和数据序列化库,专为实时系统设计,特别适用于需要高带宽和低延迟的场景,例如机器人技术研究和嵌入式系统开发。它提供了一种发布/订阅的消息传递模型,并支持自动生成多种编程语言的序列化/反序列化代码。LCM 的跨平台特性和高效性使其成为分布式系统开发的理想选择。
LCM 简介
LCM 是一个专注于低延迟消息传递的库,主要特点包括:
- 消息传递模型: 采用发布/订阅模式,允许多个进程通过通道(channel)高效通信。
- 数据序列化: 提供语言无关的类型定义语言(LCM 类型规范),通过
lcm-gen
工具自动生成特定语言的绑定代码。 - 跨平台支持: 支持多种语言(C、C++、Java、Python 等)和操作系统(Linux、Windows、macOS 等)。
- 实时性: 提供低延迟通信和实时流量分析工具(如
lcm-spy
),无需中央通信枢纽。 - 应用场景: 广泛用于机器人、无人机和自主系统的开发。
LCM 的设计目标是简化实时系统的开发,同时保证类型安全和高性能。它的日志记录和回放功能也使其在调试和数据分析中非常实用。
LCM 交叉编译安装教程
交叉编译 LCM 需要准备交叉编译工具链、源代码和依赖库,并正确配置构建过程。以下是详细步骤(以 aarch64(ARM64) 架构为例):
准备工作
在开始之前,您需要准备以下内容:
- Ubuntu或其他Linux系统:本教程基于Ubuntu18.04。
- 交叉编译工具链: 根据目标平台选择合适的工具链,本教程为
aarch64-linux-gnu
。 - git工具:用于拉取LCM源代码及切换版本使用
sudo apt install git
- LCM 源代码:本教程基于**V1.5.0**版本进行编译安装
- 从LCM官方GitHub仓库拉取:https://github.com/lcm-proj/lcm.git
- 依赖库
glib
: LCM 依赖于glib
,需要先为目标平台交叉编译并安装glib
。- glib安装教程请参考博主上篇文章:glib交叉编译
- 构建工具: 安装
cmake
和基本编译工具(如make
)。
sudo apt install cmake
sudo apt install make
安装步骤
1. 拉取LCM代码:
git clone https://github.com/lcm-proj/lcm.git
cd lcm
git checkout v1.5.0
2. 设置交叉编译环境
新建 aarch64_linux_setup.cmake
,内容为:
set(tools_bin_path /work/tools/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin)
set(CMAKE_C_COMPILER ${tools_bin_path}/aarch64-linux-gnu-gcc) # 设置用于编译C代码的交叉编译器
set(CMAKE_CXX_COMPILER ${tools_bin_path}/aarch64-linux-gnu-g++) # 设置用于编译C++代码的交叉编译器
# 设置编译后的程序运行时搜索共享库的路径(RPATH)
set(CMAKE_BUILD_RPATH "~/glib/install/lib") # 这里为替换为你前面编译好的glib的lib目录
3. 创建构建目录并配置CMake:
LCM使用CMake构建系统。创建一个独立的构建目录并运行配置:
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=../aarch64_linux_setup.cmake \
-DCMAKE_INSTALL_PREFIX=install \
-DGLIB2_GLIB_LIBRARY=~/glib/install/lib/libglib-2.0.so \
-DGLIB2_INCLUDE_DIR=~/glib/install/include/ \
-DLCM_ENABLE_TESTS=off -DLCM_ENABLE_LUA=no -DLCM_ENABLE_PYTHON=no -DLCM_ENABLE_JAVA=no ..
-DCMAKE_INSTALL_PREFIX
:指定目标平台的安装路径。- -
DGLIB2_GLIB_LIBRARY
和-DGLIB2_INCLUDE_DIR
:指定已交叉编译的glib
的库和头文件路径。
4.编译lcm
make -j8
5.安装LCM
make install
完成以上步骤后,LCM的库和工具(如 lcm-gen
)将被安装到指定路径(本教程安装在install
目录下),可供目标平台使用。
结论
通过本文,您应该能够完成 LCM 的交叉编译,从环境准备到安装。LCM 的轻量级和高性能特性使其非常适合嵌入式系统开发,而交叉编译则进一步扩展了其应用范围。希望这篇教程能为您的项目提供实用帮助!
参考资料
- LCM 官方文档:https://lcm-proj.github.io/lcm/
- CMake 文档:https://cmake.org/documentation/