ADRC--笔记

//理解ADRC关键点
1)利用跟踪微分器获取输入信号的跟踪信号以及其微分信号或者安排过渡过程;
利用非线性反馈律以提升闭环系统的动态特性;
扩张状态观测器(ESO)用于估计系统的总和扰动并进行前馈补偿;
2)
跟踪微分器利用最优控制综合函数来跟踪输入,然后再对这个跟踪信号求取微分来获得输
入信号的近似微分,故而能够在获取较强的噪声抑制能力与较小的相位滞后的同时获得较高品

质的微分信号;


3)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ADRC(Active Disturbance Rejection Control)算法是一种新型的控制算法,它可以有效地抑制系统的干扰和误差,提高系统的控制精度和鲁棒性。下面是ADRC算法的C语言实现代码: ```c #include <stdio.h> #include <stdlib.h> #include <math.h> /* 定义ADRC算法结构体 */ typedef struct { double h; // 预估器带宽参数 double beta; // 预估器比例增益参数 double gamma; // 预估器微分增益参数 double r; // 观测器带宽参数 double delta; // 观测器比例增益参数 double a1; // 观测器一阶惯性环节参数 double a2; // 观测器二阶惯性环节参数 double x1; // 观测器一阶状态变量 double x2; // 观测器二阶状态变量 double b0; // 控制器比例增益参数 double b1; // 控制器微分增益参数 double u; // 控制器输出 double e; // 控制器误差 double ed; // 控制器误差微分 double y; // 控制器反馈量 } adrc_t; /* 初始化ADRC算法结构体 */ void adrc_init(adrc_t *adrc, double h, double beta, double gamma, double r, double delta, double a1, double a2, double b0, double b1) { adrc->h = h; adrc->beta = beta; adrc->gamma = gamma; adrc->r = r; adrc->delta = delta; adrc->a1 = a1; adrc->a2 = a2; adrc->x1 = 0; adrc->x2 = 0; adrc->b0 = b0; adrc->b1 = b1; adrc->u = 0; adrc->e = 0; adrc->ed = 0; adrc->y = 0; } /* ADRC算法控制函数 */ double adrc_control(adrc_t *adrc, double input, double feedback) { double vd, d, v1, v2, v3; /* 计算预估器输出 */ vd = adrc->beta * adrc->e - adrc->gamma * adrc->x2; /* 更新预估器状态 */ v1 = adrc->x2 + adrc->h * (-adrc->r * adrc->x2 + adrc->r * (input - vd)); v2 = adrc->x1 + adrc->h * adrc->x2; adrc->x1 = v1; adrc->x2 = v2; /* 计算观测器输出 */ d = adrc->delta * adrc->e - adrc->a1 * adrc->x1 - adrc->a2 * adrc->x2; /* 计算控制器输出 */ adrc->ed = feedback - adrc->y; adrc->e = d; v3 = adrc->b0 * adrc->e + adrc->b1 * adrc->ed; adrc->u = v3; /* 更新控制器状态 */ adrc->y = adrc->y + adrc->h * adrc->u; return adrc->u; } int main() { adrc_t adrc; double input, feedback, output; int i; /* 初始化ADRC算法结构体 */ adrc_init(&adrc, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 1, 0.1); /* 模拟ADRC控制器 */ for (i = 0; i < 1000; i++) { input = sin(i * 0.01); feedback = output; output = adrc_control(&adrc, input, feedback); printf("%lf\n", output); } return 0; } ``` 在上面的代码中,我们首先定义了一个ADRC算法结构体,包含了ADRC算法中的各个参数和状态变量。然后,我们定义了初始化ADRC算法结构体的函数adrc_init()和控制函数adrc_control()。最后,在main()函数中,我们使用了adrc_control()函数模拟了ADRC控制器的控制过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值