Skip to main content

FrameBuffer

Type Alias FrameBuffer 

Source
pub type FrameBuffer = SmallVec<[PiperFrame; 6]>;
Expand description

帧缓冲区类型

使用 SmallVec 在栈上预留 6 个位置,足以覆盖:

  • MIT 控制:6 帧(0x15A, 0x15B, 0x15C, 0x15D, 0x15E, 0x15F)- 高频控制协议
  • 位置控制:3 帧(0x155, 0x156, 0x157)
  • 末端位姿控制:3 帧(0x152, 0x153, 0x154)
  • 单个帧:1 帧(向后兼容)

为什么是 6?

  • MIT 控制是高频控制协议(通常 500Hz-1kHz),需要同时控制所有 6 个关节
  • 每个关节需要 1 帧(CAN ID: 0x15A + joint_index)
  • 总共需要 6 帧,必须一次性打包发送以避免覆盖问题
  • 使用栈缓冲区(6 帧)可以避免堆分配,确保实时性能

占用空间约:24 bytes * 6 + overhead ≈ 150 bytes,对于 Mutex 内容来说仍然轻量

性能要求PiperFrame 必须实现 Copy Trait,这样 SmallVec 在收集和迭代时 会编译为高效的内存拷贝指令(memcpy),避免调用 Clone::clone

确认PiperFrame 已实现 Copy Trait(见 src/can/mod.rs:35),满足性能要求。

Aliased Type§

pub struct FrameBuffer { /* private fields */ }