VLink



English | 中文 · 官方网站 · 文档
VLink 是面向自动驾驶与具身智能的高性能通信中间件,定位为 ROS 2 的全场景替代方案。它以一套类型安全的统一 API 覆盖进程内、共享内存、车载以太网与跨机网络的全部通信需求;通信后端由 URL 选择,切换时按目标后端调整 URL 及必要参数,而通信原语和主要业务逻辑保持不变。
当前源码支持 10 种传输后端、15 种序列化格式、3 种通信模型与 6 个核心原语,并提供安全加密、录制回放、服务发现、10 个 CLI 工具及 Foxglove / Rerun 可视化桥接。

🧩 核心抽象:URL 即通信契约
VLink 的全部设计围绕一个中心抽象:一次通信由“通信模型 + URL + 核心方法”三要素确定,URL 的 scheme 选择后端,完整 URL 同时承载该后端的地址与参数。
<scheme>://<topic_name>[?参数]
scheme 决定后端。地址模型兼容的 topic 后端通常只需更换 scheme,通信原语和业务处理逻辑不变;SOME/IP、MQTT、FDBUS 等专用后端还须提供其合法地址和查询参数:
vlink::Publisher<Imu> pub("intra://sensor/imu"); // 进程内
vlink::Publisher<Imu> pub("shm://sensor/imu"); // 同机共享内存(支持 loan)
vlink::Publisher<Imu> pub("dds://sensor/imu"); // 跨机网络
由此得到三项工程收益:业务逻辑与传输实现解耦;用 intra:// 即可在单进程内完成端到端测试;部署拓扑由配置而非源码决定。
📡 通信模型
VLink 提供三种通信模型,对应六个核心原语,按通信语义选择,与后端无关。

事件 Event —— 发布 / 订阅
vlink::Publisher<Imu> publisher("dds://sensor/imu");
publisher.publish(msg);
vlink::Subscriber<Imu> subscriber("dds://sensor/imu");
subscriber.listen([](const Imu& msg) { process(msg); });
方法 Method —— 请求 / 响应
vlink::Server<Req, Resp> server("dds://calc/add");
server.listen([](const Req& req, Resp& resp) { resp.set_sum(req.left() + req.right()); });
vlink::Client<Req, Resp> client("dds://calc/add");
if (auto resp = client.invoke(req, std::chrono::seconds(3))) { use(*resp); }
字段 Field —— 状态同步
vlink::Setter<Status> setter("shm://vehicle/status");
setter.set(status);
vlink::Getter<Status> getter("shm://vehicle/status");
getter.listen([](const Status& s) { use(s); });
| 模型 |
语义 |
原语 |
典型场景 |
| 事件 Event |
发布/订阅 |
Publisher<T> / Subscriber<T> |
传感器数据、感知结果广播 |
| 方法 Method |
请求/响应 |
Client<Req,Resp> / Server<Req,Resp> |
地图查询、参数读写、服务调用 |
| 字段 Field |
状态同步 |
Setter<T> / Getter<T> |
车辆状态、配置参数、标定值 |
🚌 传输后端
| 前缀 |
底层 |
通信范围 |
零拷贝 |
状态 |
intra:// |
内置队列 |
进程内 |
条件支持(共享指针直达路径) |
稳定 |
shm:// |
Iceoryx |
同机跨进程 |
条件支持(transport loan) |
稳定 |
dds:// |
Fast-DDS |
跨机网络 |
否 |
稳定 |
ddsc:// |
CycloneDDS |
跨机网络 |
否 |
稳定 |
shm2:// |
Iceoryx2 |
同机跨进程 |
是 |
Beta |
ddsr:// |
RTI Connext |
跨机网络 |
否 |
Beta |
zenoh:// |
Zenoh |
跨机 / 云边 |
条件 |
Beta |
someip:// |
vsomeip |
车载以太网 |
否 |
Beta |
mqtt:// |
Paho MQTT |
云端 |
否 |
Beta |
fdbus:// |
FDBus |
同机 |
否 |
Beta |
URL 语法、查询参数与各后端要点见 传输后端与 URL。
🚀 快速开始

推荐使用 VKit 构建。VKit 将多仓库源码拉取、跨平台工具链分发、分层组件编排与打包整合为统一流水线,在 Linux / QNX / Android / macOS / Windows 上以相同命令完成构建,且仅依赖 Bash 与 CMake。
git clone https://github.com/thun-res/vkit.git && cd vkit
make import_full # 拉取 middleware 源码:vmsgs 与 vlink
make # 编译、部署并生成 runtime 包
亦可在已有 CMake 工程中单独集成 VLink:
find_package(vlink REQUIRED COMPONENTS shm dds)
target_link_libraries(my_app PRIVATE vlink::vlink vlink::shm vlink::dds)
完整构建、交叉编译与集成方式见 构建与集成。
🧰 工程生态
VLink 由三个协同的仓库构成:
📚 文档
📄 VLink 技术白皮书 —— 行业背景、技术论证、横向对比与性能分析的完整学术论述。
以下为面向使用的学习路径(16 篇),建议顺序阅读。
入门
核心
传输与能力
工具与运维
集成与参考
📊 项目报告
VLink 在每次版本发布时自动运行基准测试与覆盖率统计,并发布完整报告。
💻 平台支持
| 平台 |
架构 |
编译器 |
状态 |
| Linux |
x86_64 / aarch64 |
GCC 9+ / Clang 10+ |
稳定 |
| QNX 7.x / 8.x |
aarch64 / x86_64 |
QCC(QNX SDP) |
稳定 |
| Android |
aarch64 / x86_64 |
NDK Clang r25+ |
稳定 |
| Windows 10+ |
x86_64 |
MSVC 2019+ / MinGW |
稳定 |
| macOS 10.15+ |
x86_64 / arm64 |
AppleClang 12+ |
Beta |
📁 项目结构
vlink/
├── include/vlink/ 公共头文件(6 原语 + 基础库 + 扩展 + 零拷贝)
├── src/ 核心库实现
├── modules/ 10 种传输后端实现
├── cli/ 10 个命令行工具
├── proxy/ ProxyServer / ProxyAPI
├── viewer/ Qt 桌面可视化工具
├── webviz/ Foxglove / Rerun 桥接
├── languages/ 多语言绑定
│ ├── c_api/ C API(供 Python / Rust 等 FFI 调用)
│ └── python_api/ nanobind Python 绑定
├── examples/ 使用示例(14 个分类,29 个工程)
├── test/ 测试套件
├── doc/ 文档
└── CMakeLists.txt 顶层 CMake 入口
🤝 贡献
VLink 由 Thun Lu 维护,欢迎 PR、issue 与文档改进。提交前请阅读 贡献规范。
📜 许可证
Apache License 2.0 —— 可自由用于商业项目。
Copyright © 2026 Thun Lu. All rights reserved.
评论