vlink-monitor
基于终端的交互式实时监控面板,持续显示频率、速率、丢包率、时延;选中 URL 后按 Enter,会直接切入对应消息解析界面,网页示例按 monitor -loc 的真实交互节奏模拟。
面向 自动驾驶 与 具身智能 的量产级 C++ 通信中间件。一套极简 API 贯通 12 种传输后端 —— 业务代码零改动,开发者只需专注业务逻辑。
面向自动驾驶与具身智能的 C++17 通信中间件。编译期模板派发、全栈工具链、跨平台可移植 —— 支撑从开发、调试到量产的完整实时系统底座。
Viewer · Player · Analyzer 桌面 GUI · CLI 九件套 · Foxglove / Rerun Web 桥 · Bag 录制回放 —— 开发、调试、回归一站式。
浅拷贝 · 栈内存优先 · 无锁队列 · 分支预测优化 —— 编译期模板派发,零虚函数开销;intra:// 亚微秒,shm:// Iceoryx 10 μs 级零拷贝。
Protobuf / FlatBuffers / CDR / POD / 自定义 —— 编译期根据类型签名自动选择,不用手写编解码。
一份源码,同时跑在 Linux · macOS · Windows · QNX · Android 上,x86_64 与 ARM64 双架构交叉编译开箱即用。
URL 前缀即传输后端选择 —— 同一份业务代码,只改 URL 前缀就换后端。
#include 到 publish() 一共不超过 5 行,新人 10 分钟就能跑通一条 Pub/Sub 链路。※ intra / CDR 不支持消息级加密 · someip / qnx 有平台约束 · 详见 开发者文档
几行代码完成端到端 Pub / Sub。
构造 Protobuf 消息后通过 pub.publish() 送入 dds://sensor/imu。业务代码只关心数据本身,传输层由 URL 决定。
注册 sub.listen(...) 回调即可;订阅者跑在独立工作线程上,主线程无须轮询。
同时启动 publisher 与 subscriber,DDS 发现后即开始互通。以下为真实日志的实时滚动回放。
Event / Method / Field —— 三种模式覆盖 99% 的通信需求,API 形状完全对齐。
多对多异步分发。传感器数据、状态广播、日志流的首选。
// Publisher vlink::Publisher<Imu> pub("dds://sensor/imu"); pub.publish(imu); // Subscriber vlink::Subscriber<Imu> sub("dds://sensor/imu"); sub.listen([](const Imu& m){ ... });→
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);→
最新值同步。晚加入的 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);→
完整工具链覆盖 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 会直接切入对应解析界面。
基于终端的交互式实时监控面板,持续显示频率、速率、丢包率、时延;选中 URL 后按 Enter,会直接切入对应消息解析界面,网页示例按 monitor -loc 的真实交互节奏模拟。
通过 DiscoveryViewer 扫描当前网络中的活跃 VLink 进程与 URL,按进程展开 Publisher、Subscriber、Server、Client、Setter、Getter,适合快速确认节点是否上线、URL 是否一致。
覆盖 IP、组播地址、磁盘空间、CPU、内存以及关联进程运行状态;网页仅演示源码中的 diag 与 env 两个子命令,保持一条命令一轮输出。
网页仅演示 info、record、play、clone 四个子命令;示例严格保留必填 path 约束,其中 clone 使用 source_path 与 target_path。
桌面 GUI + Web 浏览器 —— 从本地调试到远程观测,全栈打通。
VLink 的 base 库不仅服务于通信节点 —— 日志、事件循环、定时器、线程池、任务图、对象池、字节缓冲、插件加载 …… 这些组件可单独引入,作为任何 C++ 实时工程的底座。
流式 / 格式化 / printf 风格 / RAII 四种调用,后端可插件化切换 spdlog · quill · DLT · native 等实现。
单线程事件循环:FIFO / 优先级两种派发策略,挂载 Timer 与回调,天然串行化、无需显式锁。
多线程事件循环:多个 worker 共享同一任务队列,保留 post_task / exec_task 接口,从单线程无缝升级到并发。
单次 / 周期定时器,独立线程或挂入 MessageLoop 都可以;与 DeadlineTimer 搭配可做超时控制。
哈希时间轮:O(1) 插入 / 删除,适合成千上万并发超时(会话管理、心跳、连接池保活)。
高精度秒表:可选 wall clock / CPU-active 时钟源,给 profiling 与任务延迟统计使用。
工作线程池 + 任务队列:支持任务优先级与批量提交,给通用异步工作使用。
DAG 任务图:precede / succeed 声明依赖,支持条件分支、环检测、DOT 导出。
RAII 任务调度包装:支持 delay_ms / priority / 启动超时 / 执行超时,并用 on_then / on_else / on_catch 流式链接结果回调。
通信消息统一载体:固定 128 B 对象 + 96 B 栈内小缓冲优化,四种所有权语义,内置 LZAV 压缩与 PMR 池化分配。
多生产者 / 多消费者无锁队列:intra:// 传输与 MessageLoop 任务派发的底层数据结构。
运行时多态插件 —— 抽象 C++ 接口由共享库实现,dlopen / LoadLibrary 加载时做 ABI 与主/次版本校验。
线程安全对象池:预分配 + 自由列表 + 可配置 reset 策略;RAII 自动归还,消除热路径分配抖动。
采样式 CPU 分析器:周期采 backtrace,定位热点函数,与 CpuProfilerGuard 配合可做局部开启 / 关闭。
跨平台进程管理 + 信号处理 + 优雅退出钩子,供 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 件套开箱即用。
独立 ProxyServer 守护进程 + ProxyAPI 客户端,Controller / Listener 双角色,跨网段观测流量、注入数据、重放回放。
dlopen / LoadLibrary 动态加载,模板化 Plugin::load<T>() 实现运行时多态,major.minor 版本强校验,默认搜索路径自动发现;12 种内置传输本身就是插件。
从自动驾驶和机器人中的相机 / 点云大带宽链路,到局域网分布式通信、车载以太网集成,以及跨网段监控与 Web 可视化,VLink 都通过统一节点 API 配合不同 URL 后端完成部署切换。
VLink 并非 ROS2 的"又一个节点库"。它是面向量产车与商用机器人的 完整实时系统开发平台 —— 从通信到可视化、从录制到加密、从 CLI 到 Web,一次到位。
NodeOptions::use_intra_process_comms(true) 且消息 POD 化intra:// 无锁队列 亚微秒级;shm:// 基于 Iceoryx 的 10 μs 级 零拷贝;浅拷贝 · 栈内存优先分配 · 无锁队列 · 分支预测友好,编译期模板派发,无虚函数开销※ 对比基于 ROS2 Humble LTS 与 VLink 当前主线的公开文档与源码;部分 ROS2 特性可通过社区包补齐,此处只对比默认开箱体验。
ROS2 的 RMW 层默认由 Fast-DDS / CycloneDDS / Connext 几家海外组织主导,替换路径有限。VLink 框架层 Apache 2.0 开源,传输后端按 URL 解耦 —— 可自由切换 CycloneDDS · QNX IPC · 国产 TravoDDS 等可信栈,便于满足 信创与合规 要求。
Apache 2.0 开源 · 与开发者一起,让自动驾驶与具身智能的通信栈更轻、更快、更现代。
提 bug、求新特性、问问题 —— 最快的响应通道
thun-res/vlink/issues →商业合作 · 定制开发 · 深度支持
thun.lu@zohomail.cn →887246136
vlink
打开手机 QQ → 添加群 → 按群号搜索 → 输入验证口令即可加入。