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§
- Gripper
State - 夹爪状态
- Motion
Snapshot - 运动快照(逻辑原子性)
- Observer
- 状态观察器(只读接口,View 模式)