RMVL  2.5.0-dev
Robotic Manipulation and Vision Library
载入中...
搜索中...
未找到

【控制律组件】单环离散比例-积分-微分控制器 更多...

#include <rmvl/lpss/ctl/pid.hpp>

类 rm::lpss::ctl::PID 继承关系图:
rm::lpss::ctl::PID 的协作图:

Public 成员函数

void reset () noexcept override
 重置状态
ControlStatus do_compute (const std::vector< double > &desired, const std::vector< double > &fb, int32_t period, std::vector< double > &command) noexcept override
 执行一次控制计算
Public 成员函数 继承自 rm::lpss::ctl::ControlLawBase
ControlStatus compute (const msg::JointState &desired, const msg::JointState &fb, int32_t period, msg::JointState &command) noexcept
 执行一次控制计算

静态 Public 成员函数

static ControlLawBase::ptr create (const std::vector< double > &kp, const std::vector< double > &ki, const std::vector< double > &kd, InSampleMapping imapping=basic_pos_imapping, OutSampleMapping omapping=basic_pos_omapping) noexcept
 创建单环离散 PID 控制器实例

额外继承的成员函数

Public 类型 继承自 rm::lpss::ctl::ControlLawBase
using ptr = std::unique_ptr<ControlLawBase>

详细描述

【控制律组件】单环离散比例-积分-微分控制器

对于连续系统中,PID 的传递函数表示为

\[G(s)=K_p+\frac{K_i}s+K_ds\tag1\]

将上式与零阶保持器 ZOH 进行串联,可以得到在离散系统中的脉冲传递函数:

\[\begin{aligned}G(z)&=\mathcal{Z}\left\{\frac{1-e^{sT}}s\left(K_p+\frac{K_i}s+K_ds\right)\right\}\\&=K_p+\frac{K_iTz^{-1}}{1-z^{-1}}+K_d \left(1-z^{-1}\right)\end{aligned}\tag2\]

转换为差分方程的形式为

\[u[k]-u[k-1]=(K_p+K_d)x[k]+(K_iT-K_p-2K_d)x[k-1]+K_dx[k-2]\tag3\]

其中, \(u[k]\) 是控制输出, \(x[k]\) 是系统的误差输入, \(T\) 是采样周期。PID 控制器的设计参数为比例增益 \(K_p\)、积分增益 \(K_i\) 和微分增益 \(K_d\),通过调整它们可以实现对系统动态性能的优化。

注解
若要实现多环控制(如外环位置、内环速度),请自行继承 ControlLawBase 并组合多个 PID 实例

成员函数说明

◆ create()

ControlLawBase::ptr rm::lpss::ctl::PID::create ( const std::vector< double > & kp,
const std::vector< double > & ki,
const std::vector< double > & kd,
InSampleMapping imapping = basic_pos_imapping,
OutSampleMapping omapping = basic_pos_omapping )
inlinestaticnoexcept

创建单环离散 PID 控制器实例

参数
[in]kp比例增益
[in]ki积分增益
[in]kd微分增益
[in]imapping输入采样映射
[in]omapping输出采样映射
返回
PID 控制器独占指针
函数调用图:

◆ do_compute()

ControlStatus rm::lpss::ctl::PID::do_compute ( const std::vector< double > & desired,
const std::vector< double > & fb,
int32_t period,
std::vector< double > & command )
overridevirtualnoexcept

执行一次控制计算

参数
[in]desired当前时刻期望状态向量
[in]fb当前反馈状态向量
[in]period控制周期(毫秒)
[out]command控制命令输出向量
返回
控制计算状态

实现了 rm::lpss::ctl::ControlLawBase.

函数调用图:

◆ reset()

void rm::lpss::ctl::PID::reset ( )
overridevirtualnoexcept

重置状态

实现了 rm::lpss::ctl::ControlLawBase.