unitree_sdk2_rs 0.1.4

Unitree SDK2 的 Rust 封装:msg 驱动的 DDS 类型生成 + CDR 序列化 + 订阅/发布/RPC
Documentation
# 快速开始(订阅 / 发布)

`init_dds` 初始化 DDS(domain 域、网卡接口、cyclonedds 配置文件路径,空串 = 默认配置),之后即可订阅/发布话题。

## 订阅

```rust,no_run
use unitree_sdk2_rs::{init_dds, subscribe};
use unitree_sdk2_rs::unitree_hg::msg::dds_::BmsState;

fn main() {
    init_dds(0, "eth0", "");

    // 订阅话题,返回 (Subscriber, watch::Receiver<Option<T>>)
    let (_sub, rx) = subscribe::<BmsState>("rt/lf/bmsstate");

    // 读取最新一帧(CDR bytes → BmsState)
    if let Some(state) = rx.borrow().as_ref() {
        println!("SOC={}% 电压={}mV", state.soc, state.bmsvoltage[0]);
    }
}
```

## 发布

```rust,no_run
use unitree_sdk2_rs::{init_dds, Publisher};
use unitree_sdk2_rs::unitree_hg::msg::dds_::BmsState;

fn main() {
    init_dds(0, "eth0", "");

    let pub_ = Publisher::<BmsState>::new("rt/lf/bmsstate").expect("创建 Publisher 失败");
    let bms = BmsState {
        version_high: 1, version_low: 0, r#fn: 0,
        cell_vol: [4000; 40],
        bmsvoltage: [42000, 0, 0],
        current: -2500, soc: 85, soh: 100,
        temperature: [32; 12],
        cycle: 1, manufacturer_date: 0,
        bmsstate: [0; 5], reserve: [0; 3],
    };
    pub_.publish(&bms);
}
```

> 订阅回调在 C++ 侧触发,反序列化后通过 `tokio::sync::watch` 广播;用 `rx.borrow()` 读取最新值。

## 话题

话题名(如 `rt/lf/bmsstate`)与各类型消息格式见 unitree_sdk2 官方文档。