VLink 2.0.0
A high-performance communication middleware
载入中...
搜索中...
未找到
VLink

一套极简的 API,12 种传输,切换零代价

官方网站: https://vlink.work

Github: https://github.com/thun-res/vlink

English | 中文

VLink 是面向**自动驾驶与具身智能**的轻量级 C++ 通信中间件,定位为 ROS 2 的轻量化替代方案。

极简的 API,3-5 行即可完成通信,传输后端零成本切换,编译期自动推导序列化。支持 **12 种传输后端**、**14 种序列化格式**、**3 种通信模型**、**9 个 CLI 工具**,以及可选的 Foxglove / Rerun 可视化桥接。


📚 文档

Part I — 入门

文档 内容
技术白皮书 背景、定位、整体架构与深度技术论文
构建指南 CMake / Conan / 集成 / 跨平台
示例代码 各场景完整可运行示例(最快上手路径)

Part II — 核心通信模型

文档 内容
Event 模型 Publisher / Subscriber(发布订阅)
Method 模型 Client / Server(请求响应)
Field 模型 Setter / Getter(状态同步)
序列化 14 种序列化类型与自动推断

Part III — 传输与常用能力

文档 内容
传输后端 12 种后端详解与 URL 格式
QoS 服务质量配置与策略
零拷贝 CameraFrame / PointCloud(大数据量必备)
基础库 Logger / MessageLoop / Timer / ThreadPool / 并发 / IPC / Profiler
录制与回放 Bag / MCAP 文件格式与 API
CLI 工具 9 个命令行工具完整参考
环境变量 VLINK_* 配置变量参考

Part IV — 工具与可视化

文档 内容
Viewer Qt 桌面工具:Viewer / Player / Analyzer
WebViz vlink-foxglove / vlink-rerun 可视化桥接
Proxy ProxyServer / ProxyAPI
服务发现 UDP 组播发现与拓扑

Part V — 进阶主题

文档 内容
节点基类 Node 基类模板底层共享接口与生命周期(init/deinit/interrupt)
安全加密 AES-128-CBC 与自定义加密回调

Part VI — 扩展与贡献

文档 内容
C API C 封装与多语言 FFI(六原语数据面)
扩展开发 插件系统与自定义传输
测试与覆盖率 doctest 框架与 gcov/lcov
PR 规范 分支、提交、代码风格与 CI 门槛

速查与参考

文档 内容
速查卡 单页 API / URL / QoS / CLI / 环境变量速查
故障排查 按症状索引的问题处理手册
CHANGELOG 版本更新记录

🚀 30 秒看懂 VLink

Quick Start
Publisher<Imu> pub("dds://sensor/imu"); // 跨机器 DDS
Publisher<Imu> pub("shm://sensor/imu"); // 同机共享内存
Publisher<Imu> pub("intra://sensor/imu"); // 进程内
Publisher<Imu> pub("dds://sensor/lidar?qos=sensor"); // QoS profile
Publisher<Imu> pub("shm://sensor/image?depth=10"); // 历史深度

URL 语法见 传输后端


🏛️ 软件架构

VLink 架构

🚌 传输后端

Scheme 底层 范围 零拷贝 状态
intra:// 无锁队列 进程内 ✅ 稳定
shm:// Iceoryx 同机跨进程 ✅ 稳定
dds:// Fast-DDS 跨机 ✅ 稳定
ddsc:// CycloneDDS 跨机 ✅ 稳定
shm2:// Iceoryx2 同机 🟡 Beta
ddsr:// RTI Connext 跨机 🟡 Beta
ddst:// TravoDDS(国产 DDS 实现) 跨机 🟡 Beta
zenoh:// Zenoh 跨机/云边 🟡 Beta
someip:// vsomeip 车载以太网 🟡 Beta
mqtt:// Paho MQTT 云端 🟡 Beta
fdbus:// FDBus 同机 🟡 Beta
qnx:// QNX IPC 同机(QNX) 🟡 Beta

📡 通信模型

三种通信模型

Event — 发布/订阅

Publisher<Imu> publisher("dds://sensor/imu");
publisher.publish(msg);
Subscriber<Imu> subscriber("dds://sensor/imu");
subscriber.listen([](const Imu& msg) { process(msg); });

Method — 请求/响应

Server<Req, Resp> server("dds://calc/add");
server.listen([](const Req& req, Resp& resp) {
resp.set_sum(req.left() + req.right());
});
Client<Req, Resp> client("dds://calc/add");
if (auto r = client.invoke(req, 3s)) { use(*r); } // 同步 → std::optional<Resp>
client.invoke(req, [](const Resp& r) { use(r); }); // 异步回调
auto future = client.async_invoke(req); // future
Client<Req> fire("dds://event/notify"); // RespT 默认为 EmptyType
fire.send(req); // 仅发送(fire-and-forget,仅 RespT = EmptyType 时可用)

Field — 状态同步

Setter<Status> setter("shm://vehicle/status");
setter.set(status); // 新 Getter 连接时自动收到最新值
Getter<Status> getter("shm://vehicle/status");
getter.listen([](auto& s) { use(s); });
getter.set_change_reporting(true); // 仅变化时触发

🔧 快速开始(构建)

cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build -j
ctest --test-dir build --output-on-failure
sudo cmake --install build

CMake 集成:

# 导入指定模块
find_package(vlink REQUIRED COMPONENTS shm dds)
target_link_libraries(my_app PRIVATE vlink::vlink vlink::shm vlink::dds)
# 导入全部模块
find_package(vlink REQUIRED COMPONENTS all)
target_link_libraries(my_app PRIVATE vlink::all)
# 导入生成 proto 目标
vlink_generate_cpp(TARGET example_gen PROTO example1.proto example2.proto)
target_link_libraries(my_app PRIVATE example_gen)

完整内容参见 CMake 目标列表 以及 构建指南


💻 平台支持

平台 架构 编译器 状态
Linux x86_64 / aarch64 GCC 9+ / Clang 10+ ✅ 稳定
Windows 10+ x86_64 MSVC 2019+ / MinGW ✅ 稳定
macOS 10.15+ x86_64 / arm64 AppleClang 12+ 🟡 Beta
Android aarch64 / x86_64 NDK Clang r25+ ✅ 稳定
QNX 7.x/8.x aarch64 / x86_64 QCC (QNX SDP) ✅ 稳定

📁 项目结构

vlink/
├── include/vlink/ 公共头文件(6 大通信原语 + 基础库 + 扩展 + 零拷贝)
├── src/ 核心库实现
├── modules/ 12 种传输后端实现
├── cli/ 9 个命令行工具
├── proxy/ vlink-proxy 可执行文件 + ProxyServer / ProxyAPI 库
├── viewer/ Qt 桌面可视化工具(默认 OFF,需 ENABLE_VIEWER=ON)
├── webviz/ vlink-foxglove / vlink-rerun 桥接可执行文件(默认 OFF)
├── c_api/ C API(供 Python / Rust 等 FFI 调用,仅数据面)
├── python_api/ nanobind Python 绑定(默认 OFF,需 ENABLE_PYTHON_API=ON)
├── examples/ 使用示例(默认 OFF,14 个分类)
├── test/ doctest 主测试套件(vlink-test)
├── doc/ 详细文档
├── tools/ 构建/打包/版本管理等辅助脚本
├── cmake/ CMake 工具链与 Find 模块
├── thirdparty/ 第三方依赖与补丁
├── packup/ 发布打包相关
├── CMakeLists.txt 顶层 CMake 入口
├── conanfile.py Conan recipe
└── Android.bp Android.bp(Soong 构建规则)

🤝 欢迎参与贡献

欢迎提交 Pull Request。提交前请通读 PR 规范


📜 许可证

[Apache License 2.0](LICENSE) — 可自由用于商业项目。

Copyright (C) 2026 Thun Lu. All rights reserved.

*作者:Thun Lu thun..nosp@m.lu@z.nosp@m.ohoma.nosp@m.il.c.nosp@m.n*