C++17 · 高性能 · 轻量级 · 易上手 · 自主可控

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

面向 自动驾驶具身智能 的量产级 C++ 通信中间件。一套极简 API 贯通 12 种传输后端 —— 业务代码零改动,开发者只需专注业务逻辑。

12 传输后端
14 序列化格式
6 节点类型
9 CLI 工具
5 支持平台
多平台支持
Linux macOS Windows QNX Android x86_64 · ARM64
VLink core radiates to 12 transports including intra, shm, dds, zenoh, someip, qnx
VLink 是什么

量产级实时通信 而生

面向自动驾驶与具身智能的 C++17 通信中间件。编译期模板派发、全栈工具链、跨平台可移植 —— 支撑从开发、调试到量产的完整实时系统底座。

全栈工具链

Viewer · Player · Analyzer 桌面 GUI · CLI 九件套 · Foxglove / Rerun Web 桥 · Bag 录制回放 —— 开发、调试、回归一站式。

ROS2: rqt + 外装 bridgeVLink: 原生集成

量产级性能

浅拷贝 · 栈内存优先 · 无锁队列 · 分支预测优化 —— 编译期模板派发,零虚函数开销;intra:// 亚微秒,shm:// Iceoryx 10 μs 级零拷贝。

DDS 跨进程 ms 级μs 级零拷贝

序列化自动推导

Protobuf / FlatBuffers / CDR / POD / 自定义 —— 编译期根据类型签名自动选择,不用手写编解码。

Msg/IDL/CDR 分裂14 种统一

多平台支持

一份源码,同时跑在 Linux · macOS · Windows · QNX · Android 上,x86_64 与 ARM64 双架构交叉编译开箱即用。

锁死单一生态桌面 · 车规 · 移动 全覆盖
0
传输后端
0
序列化格式
0
CLI 工具
0
GUI / Web 可视化
统一 API

一套 API · 12 种传输 · 零心智负担

URL 前缀即传输后端选择 —— 同一份业务代码,只改 URL 前缀就换后端。

传输后端

12 种传输后端 · 一行 URL 切换

Stable
intra
进程内消息队列
同进程模块间通信,无序列化、无内核调用
Zero-CopyNo-Deps
Stable
shm
Iceoryx RouDi
同机跨进程零拷贝,相机点云首选
Zero-CopyReal-Time
Stable
dds
eProsima Fast-DDS
跨机器主力 RTPS 实现,QoS 完整
QoSDiscovery
Stable
ddsc
Eclipse CycloneDDS
开源 DDS,ROS2 同生态
QoSROS2
Beta
shm2
Iceoryx2
下一代共享内存,无需 RouDi 守护
Zero-CopyDaemon-less
Beta
ddsr
RTI Connext DDS
商用 DDS,RTI 生态与认证场景
Commercial
Beta
ddst
TravoDDS · 国产
国产 DDS 实现 · 车联网与云边场景
国产WAN
Beta
zenoh
Eclipse Zenoh
云-边-端统一数据,pub/sub + query
Cloud-Edge
Beta
someip
SOME/IP · vsomeip
AUTOSAR 车载以太网标准
AUTOSARV2X
Beta
fdbus
FDBus
Android/Linux 轻量级 D-Bus 替代
IPC
Beta
qnx
QNX Neutrino IPC
QNX 原生实时原语,功能安全
ASILRTOS
Beta
mqtt
MQTT
物联网 · 带宽受限
IoTPub/Sub

intra / CDR 不支持消息级加密 · someip / qnx 有平台约束 · 详见 开发者文档

快速上手

示例代码

几行代码完成端到端 Pub / Sub。

C++ Publisher

发布者 · 每 500 ms 发一条 IMU

构造 Protobuf 消息后通过 pub.publish() 送入 dds://sensor/imu。业务代码只关心数据本身,传输层由 URL 决定。

publisher.cc
C++ Subscriber

订阅者 · 回调里直接拿到消息

注册 sub.listen(...) 回调即可;订阅者跑在独立工作线程上,主线程无须轮询。

subscriber.cc
实时运行

实时运行日志 · 发布即接收

同时启动 publishersubscriber,DDS 发现后即开始互通。以下为真实日志的实时滚动回放。

$ ./publisher & ./subscriber — live run
三种模型

三种通信模型 · 一致的心智模型

Event / Method / Field —— 三种模式覆盖 99% 的通信需求,API 形状完全对齐。

Event · Pub/Sub

事件模型

多对多异步分发。传感器数据、状态广播、日志流的首选。

// Publisher
vlink::Publisher<Imu> pub("dds://sensor/imu");
pub.publish(imu);

// Subscriber
vlink::Subscriber<Imu> sub("dds://sensor/imu");
sub.listen([](const Imu& m){ ... });
Method · Client/Server

方法模型

N:1 请求/响应。同步 / optional / 异步回调 / future 四种调用模式。

// Server
vlink::Server<Req, Resp> srv("dds://math/add");
srv.listen([](const Req& q, Resp& r){
  r.set_sum(q.left() + q.right());
});

// Client
vlink::Client<Req, Resp> cli("dds://math/add");

// sync by-ref
Resp r;
cli.invoke(req, r, 1s);

// sync optional
auto maybe = cli.invoke(req, 1s);

// async callback
cli.invoke(req, [](const Resp& r){ ... });

// future
auto f = cli.async_invoke(req);
Field · Setter/Getter

字段模型

最新值同步。晚加入的 Getter 自动补发当前值,适合配置与状态。

// Setter
vlink::Setter<Gear> setter("shm://vehicle/gear");
setter.set({1, true});

// Getter — late joiner gets latest
vlink::Getter<Gear> getter("shm://vehicle/gear");
auto g = getter.get();

// Callback on every set()
getter.listen([](const Gear& v){ on_gear(v); });

// Only fire on value change
getter.set_change_reporting(true);
命令行工具

多个 CLI 工具窗口

完整工具链覆盖 info、list、monitor、eproto、efbs、dump、check、bag、bench;以下窗口按 cli/*.cc 的真实接口排布,重点平铺 monitor、list、check、bag,便于同时对照实时观测、拓扑发现、环境诊断与录制回放。

完整 CLI 工具体系包含 vlink-info、vlink-list、vlink-monitor、vlink-eproto、vlink-efbs、vlink-dump、vlink-check、vlink-bag、vlink-bench;当前网页重点演示 vlink-monitor -loc、vlink-list、vlink-check diag / env,以及 vlink-bag info / record / play / clone。monitor 在 TUI 内按 Enter 会直接切入对应解析界面。

vlink-info vlink-list vlink-monitor vlink-eproto vlink-efbs vlink-dump vlink-check vlink-bag vlink-bench
实时 TUI

vlink-monitor

基于终端的交互式实时监控面板,持续显示频率、速率、丢包率、时延;选中 URL 后按 Enter,会直接切入对应消息解析界面,网页示例按 monitor -loc 的真实交互节奏模拟。

vlink-monitor · 实时 TUI 监控
source: cli/monitor/monitor.cc
拓扑发现

vlink-list

通过 DiscoveryViewer 扫描当前网络中的活跃 VLink 进程与 URL,按进程展开 Publisher、Subscriber、Server、Client、Setter、Getter,适合快速确认节点是否上线、URL 是否一致。

vlink-list · 节点与话题发现
source: cli/list/list.cc
环境诊断

vlink-check

覆盖 IP、组播地址、磁盘空间、CPU、内存以及关联进程运行状态;网页仅演示源码中的 diag 与 env 两个子命令,保持一条命令一轮输出。

vlink-check · 环境诊断
source: cli/check/check.cc
录制 / 回放

vlink-bag

网页仅演示 info、record、play、clone 四个子命令;示例严格保留必填 path 约束,其中 clone 使用 source_path 与 target_path。

vlink-bag · 录制与回放工作流
source: cli/bag/bag.cc
可视化

可视化四件套

桌面 GUI + Web 浏览器 —— 从本地调试到远程观测,全栈打通。

Desktop · Qt6 + OpenSceneGraph

vlink-viewer

Qt6 桌面端的 VLink 实时监控与可视化工作台。

  • URL 话题树并列显示 Freq / Rate / Loss / Latency 四列实时指标
  • TrafficWidget 波形叠加进程级 QoS 与通信拓扑图
  • Protobuf / FlatBuffers 消息递归展开到字段级,.proto 目录热加载
  • OSG 3D 点云叠加车体模型,相机多路并排,JPEG / H.264 / H.265 / NV12 软硬解
  • 脱离中间件也能打开 .vdb / .vdbx SQLite 库离线浏览
vlink-viewer UI: topic tree, traffic charts, proto viewer
Web Bridge · Foxglove / Rerun

vlink-webviz

常驻 C++ 桥接进程,把 VLink 数据送进 Foxglove Studio 与 Rerun Viewer。

  • vlink-foxglove:WebSocket :8765,遵循 Foxglove WS 协议 v1
  • vlink-rerun:gRPC :9876,支持 spawn / connect / serve / save 四种运行模式
  • 13 组 vlink_msgs 自动映射(GPS / IMU / LaserScan / RawImage / Obstacle …)
  • 反向通道:clientPublish 发消息、Service CallParameters 读写全部打通
  • 内置 ExprTk 做字段重映射与单位换算,支持话题白 / 黑名单过滤
vlink-webviz bridging to Foxglove studio in browser
Replay · .vdb / .vcap

vlink-player

Bag 帧级回放窗口,也能把录像反向放回 VLink 网络。

  • .vdb / .vdbx(SQLite + LZAV)与 .vcap / .vcapx(MCAP + Zstd,Foxglove 兼容)双后端
  • 倍速 0 ~ ∞×,单步、循环、拖动 seek,URL 白名单 + UrlRemap 重映射
  • Proxy 模式拉起 vlink-proxy,把 bag 当成 live 源注入整张 VLink 网络
  • IPC 通道把当前时间戳推给 Analyzer,波形游标与回放同步
  • Bag 完整性检查、索引重建、修复一键完成
vlink-player floating window with progress bar
Time-Series · ExprTk

vlink-analyzer

QCustomPlot 波形分析工作台,ExprTk 表达式引擎驱动。

  • 三种分析模式:发布频率、字段数值、用户自定义表达式
  • ExprTk 引擎:四则、三角、sqrt / log / exp / abs + 用户变量代入
  • 7 种线型 + 9 种数字格式(Auto / Float 2,4,6,8 / Scientific 2,4,6,8)
  • 双模式:离线 bag 批跑,或与 Player 通过 IPC 同步时间游标
  • 动态 Protobuf 解析、JSON 预设切换、Progress 可中断、PNG 一键导出
vlink-analyzer time-series curves and config panel
基础库

基础设施 · 可独立使用的一整套组件

VLink 的 base 库不仅服务于通信节点 —— 日志、事件循环、定时器、线程池、任务图、对象池、字节缓冲、插件加载 …… 这些组件可单独引入,作为任何 C++ 实时工程的底座。

Logger

流式 / 格式化 / printf 风格 / RAII 四种调用,后端可插件化切换 spdlog · quill · DLT · native 等实现。

MessageLoop

单线程事件循环:FIFO / 优先级两种派发策略,挂载 Timer 与回调,天然串行化、无需显式锁。

MultiLoop

多线程事件循环:多个 worker 共享同一任务队列,保留 post_task / exec_task 接口,从单线程无缝升级到并发。

Timer

单次 / 周期定时器,独立线程或挂入 MessageLoop 都可以;与 DeadlineTimer 搭配可做超时控制。

WheelTimer

哈希时间轮:O(1) 插入 / 删除,适合成千上万并发超时(会话管理、心跳、连接池保活)。

ElapsedTimer

高精度秒表:可选 wall clock / CPU-active 时钟源,给 profiling 与任务延迟统计使用。

ThreadPool

工作线程池 + 任务队列:支持任务优先级与批量提交,给通用异步工作使用。

GraphTask

DAG 任务图:precede / succeed 声明依赖,支持条件分支、环检测、DOT 导出。

Schedule

RAII 任务调度包装:支持 delay_ms / priority / 启动超时 / 执行超时,并用 on_then / on_else / on_catch 流式链接结果回调。

Bytes

通信消息统一载体:固定 128 B 对象 + 96 B 栈内小缓冲优化,四种所有权语义,内置 LZAV 压缩与 PMR 池化分配。

MpmcQueue

多生产者 / 多消费者无锁队列:intra:// 传输与 MessageLoop 任务派发的底层数据结构。

Plugin

运行时多态插件 —— 抽象 C++ 接口由共享库实现,dlopen / LoadLibrary 加载时做 ABI 与主/次版本校验。

ObjectPool

线程安全对象池:预分配 + 自由列表 + 可配置 reset 策略;RAII 自动归还,消除热路径分配抖动。

CpuProfiler

采样式 CPU 分析器:周期采 backtrace,定位热点函数,与 CpuProfilerGuard 配合可做局部开启 / 关闭。

Process

跨平台进程管理 + 信号处理 + 优雅退出钩子,供 CLI 工具与守护进程使用。

完整实时开发平台

不仅是中间件 · 完整的实时开发平台

通信核心 · 可视化 · 录制回放 · CLI · Proxy 监控 · 插件系统 —— 从调试到量产的一整条工具链都在源码树内。

通信核心

Event / Method / Field 三模型 + 12 种传输矩阵 + 14 种序列化。

可视化套件

Viewer 桌面 GUI · Player 回放 · Analyzer 波形 · Foxglove / Rerun Web 桥。

录制回放

.vdb / .vdbx (SQLite + LZAV) 与 .vcap / .vcapx (MCAP + Zstd, Foxglove 兼容),按时间 / 大小分片。

安全加密

消息级 AES-128-CBC,SecurityPublisher<T> 一行启用,支持自定义回调。

命令行工具

monitor · bag · list · check · info · dump · eproto · efbs · bench —— 9 件套开箱即用。

Proxy 监控层

独立 ProxyServer 守护进程 + ProxyAPI 客户端,Controller / Listener 双角色,跨网段观测流量、注入数据、重放回放。

插件系统

dlopen / LoadLibrary 动态加载,模板化 Plugin::load<T>() 实现运行时多态,major.minor 版本强校验,默认搜索路径自动发现;12 种内置传输本身就是插件。

应用场景

四类典型使用场景 · 同一套 API 贯通

从自动驾驶和机器人中的相机 / 点云大带宽链路,到局域网分布式通信、车载以太网集成,以及跨网段监控与 Web 可视化,VLink 都通过统一节点 API 配合不同 URL 后端完成部署切换。

自动驾驶

多传感器感知链路

文档将自动驾驶列为核心目标场景之一。对图像与点云这类同机大消息,推荐 shm:// 做零拷贝;需要跨机器分发时可切到 dds:// / ddsc://,业务代码保持不变。

Autonomous driving multi-sensor data pipelines
机器人 / 具身

控制与感知混合链路

机器人与具身系统通常同时包含低时延控制链路和大带宽感知链路。控制环可优先使用 intra://,相机帧与点云等同机跨进程数据则使用 shm://,统一 API 下可组合部署。

Robotics control and perception data flows
车载集成

车载以太网与 AUTOSAR 兼容

文档明确给出 someip:// 作为面向车载以太网与 AUTOSAR 场景的 Beta 后端,并提供 someip_flat 示例。开发阶段可先用 dds:// / intra:// 联调,再按 URL 切换到目标部署形态。

Automotive Ethernet and SOME/IP integration
跨网段 / Web

远程监控与云边接入

对于跨网段、跨 VLAN 或需要浏览器可视化的场景,文档提供了两条路径:zenoh:// 面向跨 NAT / 云边协同,Proxy / WebViz 则用于远程监控、数据转发,以及接入 Foxglove Studio / Rerun Viewer。

Cross-network monitoring and Web visualization
VLink vs ROS2

替代 ROS2 · 更轻、更快、更现代

VLink 并非 ROS2 的"又一个节点库"。它是面向量产车与商用机器人的 完整实时系统开发平台 —— 从通信到可视化、从录制到加密、从 CLI 到 Web,一次到位。

能力维度
ROS2
API 心智
Node · Executor · Context · CallbackGroup 多层栈,小样例也要几十行 boilerplate
代码体量
主仓 + 生态包累计数百万行代码,依赖链庞杂,裁剪 / 移植成本高
多语言支持
rclcpp / rclpy 为官方主线;rclnodejs / rcljava 等语言客户端由社区维护,版本滞后
架构与扩展
rclcpp + rmw 分层,但扩展依赖 pluginlib 与 ament 包管理
性能
DDS 跨进程延迟随 RMW / QoS 波动;进程内零拷贝需 NodeOptions::use_intra_process_comms(true) 且消息 POD 化
传输与零拷贝
默认 DDS 生态 (Fast-DDS · Cyclone · Connext);rmw_zenoh 等为实验性;LoanedMessage 零拷贝仅部分 RMW + POD 消息
序列化
rosidl (ROS Msg IDL) 为主;Type Adaptation 允许回调用 Eigen 等自定义类型
调试与观测
rqt · rosbag2 · Foxglove Bridge / Rerun 为独立社区包
安全加密
SROS2 / DDS Security — 证书体系较重
构建与工程
colcon + ament + rosdep + DDS vendor 包;工具链与 Python 深度绑定
跨平台
Linux / Windows 官方主线支持;macOS 仅社区维护;QNX / Android 需社区适配

※ 对比基于 ROS2 Humble LTS 与 VLink 当前主线的公开文档与源码;部分 ROS2 特性可通过社区包补齐,此处只对比默认开箱体验。

供应链与合规

ROS2 的 RMW 层默认由 Fast-DDS / CycloneDDS / Connext 几家海外组织主导,替换路径有限。VLink 框架层 Apache 2.0 开源,传输后端按 URL 解耦 —— 可自由切换 CycloneDDS · QNX IPC · 国产 TravoDDS 等可信栈,便于满足 信创与合规 要求。

社区

加入我们

Apache 2.0 开源 · 与开发者一起,让自动驾驶与具身智能的通信栈更轻、更快、更现代。