unitree_sdk2_rs 0.1.1

Unitree SDK2 的 Rust 封装:msg 驱动的 DDS 类型生成 + CDR 序列化 + 订阅/发布/RPC
docs.rs failed to build unitree_sdk2_rs-0.1.1
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: unitree_sdk2_rs-0.1.4

unitree_sdk2_rs

Unitree SDK2 的 Rust 封装。

  • msg 驱动:从 msgs/*.msg 自动生成 Rust 类型(CDR 布局与 C++ 一致)
  • CDR 序列化:用 cdr crate,与 Cyclone DDS 逐字节兼容
  • 订阅/发布subscribe::<T>(topic) / Publisher::<T> 泛型 API
  • RPCrpc::RpcClient / rpc::RpcServer

依赖的 SDK

构建时获取 unitree_sdk2 C++ SDK(仓库自带预编译二进制 lib/<arch>/libunitree_sdk2.a不做 cmake 编译)。来源由环境变量控制:

# ① 直接用本地已有 SDK(不 clone、不编译)
export UNITREE_SDK2_PATH=/path/to/unitree_sdk2

# ② 从 git 仓库克隆(浅克隆到 UNITREE_SDK2_DIR,默认 tmp_sdk2)
export UNITREE_SDK2_URL=https://git.unitree.com/unitree/rd/base-environment/unitree_sdk2.git

# ③ 什么都不设 → 默认 GitHub(https://github.com/unitreerobotics/unitree_sdk2.git)+ tmp_sdk2(有就用、没有就 clone)

优先级:UNITREE_SDK2_PATH > UNITREE_SDK2_URL > 默认 GitHub。

clone 目录统一在 OUT_DIR:URL 模式(含默认 GitHub)的落地目录是 OUT_DIR/tmp_sdk2 (构建临时目录,源目录零写入),正常构建与 cargo publish verify 行为一致。 注意 OUT_DIR 带构建指纹,build.rs 改动或切换 profile/triple 会重新 clone。 发布时推荐 UNITREE_SDK2_PATH=/path/to/unitree_sdk2 cargo publish 指向本地 SDK, 避免 verify 依赖网络 clone。

快速开始

use unitree_sdk2_rs::{init_dds, subscribe, Publisher};
use unitree_sdk2_rs::unitree_hg::msg::dds_::BmsState;

init_dds(0, "eth0", "");
let (_sub, rx) = subscribe::<BmsState>("rt/lf/bmsstate");

结构

unitree_sdk2_rs/
  src/
    lib.rs            # 库入口:subscribe / Publisher / init_dds / RPC
    rpc.rs            # RpcClient / RpcServer
    gen/              # build.rs 从 msg 生成(gen_types / gen_ffi / gen_topics)
  cpp/
    dds_bridge.{h,cpp}  # Subscriber/Publisher 模板 + CDR 序列化
    rpc_bridge.{h,cpp}  # RPC 桥
  msgs/               # msg 源文件(unitree_hg/unitree_go/unitree_api)
  build.rs            # msg→Rust/C++ 代码生成 + SDK 获取 + cxx 编译