pub fn run_controller<C>(
piper: Piper<Active<MitMode>>,
controller: C,
config: LoopConfig,
) -> Result<(), RobotError>Expand description
运行控制循环
这是一个阻塞函数,会持续运行控制循环直到:
- 发生错误
- 达到
max_iterations(如果设置) - 用户中断(Ctrl+C)
§参数
piper:Piper<Active<MitMode>>实例(Type State 安全保证)controller: 控制器(实现Controllertrait)config: 循环配置
§返回
Ok(()): 正常结束(达到 max_iterations)Err(RobotError): 发生错误
§时间处理
- 计算实际 dt
- 如果 dt > max_dt,调用
controller.on_time_jump(real_dt),然后钳位 dt - 使用钳位后的 dt 调用
controller.tick()
§示例
ⓘ
use piper_client::control::{run_controller, LoopConfig};
let config = LoopConfig {
frequency_hz: 200.0, // 200Hz 高频控制
dt_clamp_multiplier: 1.5,
max_iterations: Some(2000), // 运行 10 秒后停止
};
run_controller(piper, controller, config)?;