Skip to main content

Module observer

Module observer 

Source
Expand description

Observer - 状态观察器(View 模式)

直接持有 driver::Piper 引用,零拷贝、零延迟地读取底层状态。 不再使用缓存层,避免数据延迟和锁竞争。

§设计目标

  • 零延迟: 直接从 driver::Piper 读取,无缓存层
  • 零拷贝: 使用 ArcSwap 的 wait-free 读取
  • 类型安全: 返回强类型单位(Rad, RadPerSecond, NewtonMeter)
  • 逻辑一致性: 提供 snapshot() 方法保证时间一致性

§使用示例

// 读取关节位置
let positions = observer.joint_positions();
println!("J1 position: {}", positions[Joint::J1].to_deg());

// 使用 snapshot 获取时间一致的数据(推荐用于控制算法)
let snapshot = observer.snapshot();
println!("Position: {:?}, Velocity: {:?}", snapshot.position, snapshot.velocity);

// 克隆 Observer 用于另一个线程
let observer2 = observer.clone();
std::thread::spawn(move || {
    loop {
        let snapshot = observer2.snapshot();
        // ... 监控状态 ...
    }
});

Structs§

GripperState
夹爪状态
MotionSnapshot
运动快照(逻辑原子性)
Observer
状态观察器(只读接口,View 模式)