|
GKD.RoboCtrl
|
一阶斜坡控制器 (Ramp) 更多...
一阶斜坡控制器 (Ramp)
ramp 控制器用于限制输出变化速率,使系统输出以设定的最大速度逐步逼近目标输入。 该控制器常用于以下场景:
控制逻辑:
\[ \Delta y = \text{sign}(x_{\text{target}} - y_{\text{out}}) \times \min(|x_{\text{target}} - y_{\text{out}}|, a_{\max} \cdot \Delta t) \]
其中:
| T | 数值类型(例如 float 或 double) |
std::chrono::steady_clock 计时,不受系统时间调整影响。 #include <ramp.hpp>
类 | |
| struct | params_type |
| 参数结构体 更多... | |
Public 类型 | |
| using | input_type = T |
| 输入类型:目标值 | |
| using | state_type = T |
| 状态类型:当前输出值 | |
Public 成员函数 | |
| ramp (const params_type ¶ms) | |
| 构造函数 | |
| void | update (T target) noexcept |
| 更新输出值 | |
| void | set_acc (T new_acc) noexcept |
| 修改最大变化速率 | |
| void | reset () noexcept |
| 清零输出值 | |
| void | reset (T value) noexcept |
| 设置输出初值 | |
| state_type | state () const noexcept |
| 获取当前输出状态 | |
| using roboctrl::utils::ramp< T >::input_type = T |
| using roboctrl::utils::ramp< T >::state_type = T |
|
inlineexplicit |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
|
inlinenoexcept |
更新输出值
计算当前到目标值的差,并根据时间差 \(\Delta t\) 和最大速率限制 \(a_{\max}\), 按照下式调整输出:
\[ y_{\text{out}}(t + \Delta t) = y_{\text{out}}(t) + \text{sign}(x_{\text{target}} - y_{\text{out}}(t)) \times \min(|x_{\text{target}} - y_{\text{out}}(t)|, a_{\max} \cdot \Delta t) \]
| [in] | target | 输入目标值 |
< 两次更新间隔时间(秒)