Skip to main content

run_controller

Function run_controller 

Source
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: 控制器(实现 Controller trait)
  • 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)?;