forked from wustflywithdream/ADRC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathADRC.h
86 lines (75 loc) · 3.54 KB
/
ADRC.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#ifndef _ADRC_H_
#define _ADRC_H_
/*----------------------------------------------------------------------------------------------------------------------/
* 本程序只供购买者学习使用,版权著作权属于无名科创团队,
* 无名科创团队将飞控程序源码提供给购买者,
* 购买者要为无名科创团队提供保护,
* 未经作者许可,不得将源代码提供给他人
* 不得将源代码放到网上供他人免费下载,
* 更不能以此销售牟利,如发现上述行为,
* 无名科创团队将诉之以法律解决!!!
-----------------------------------------------------------------------------------------------------------------------/
* 生命不息、奋斗不止;前人栽树,后人乘凉!!!
* 开源不易,且学且珍惜,祝早日逆袭、进阶成功!!!
-----------------------------------------------------------------------------------------------------------------------/
* 无名科创开源飞控 V1.1 武汉科技大学 By.YuYi
* CSDN博客: http://blog.csdn.net/u011992534
* 优酷ID:NamelessCotrun无名小哥
* 无名科创开源飞控QQ群:540707961
* https://shop348646912.taobao.com/?spm=2013.1.1000126.2.5ce78a88ht1sO2
* 百度贴吧:无名科创开源飞控
* 修改日期:2017/10/30
* 版本:V1.1
* 版权所有,盗版必究。
* Copyright(C) 武汉科技大学无名科创团队 2017-2019
* All rights reserved
----------------------------------------------------------------------------------------------------------------------*/
typedef struct
{
/*****安排过度过程*******/
float x1;//跟踪微分期状态量
float x2;//跟踪微分期状态量微分项
float r;//时间尺度
float h;//ADRC系统积分时间
uint16 N0;//跟踪微分器解决速度超调h0=N*h
float h0;
float fh;//最速微分加速度跟踪量
/*****扩张状态观测器*******/
/******已系统输出y和输入u来跟踪估计系统状态和扰动*****/
float z1;
float z2;
float z3;//根据控制对象输入与输出,提取的扰动信息
float e;//系统状态误差
float y;//系统输出量
float fe;
float fe1;
float beta_01;
float beta_02;
float beta_03;
float b;
/**********系统状态误差反馈率*********/
float e0;//状态误差积分项
float e1;//状态偏差
float e2;//状态量微分项
float u0;//非线性组合系统输出
float u;//带扰动补偿后的输出
float b0;//扰动补偿
/*********第一种组合形式*********/
float beta_0;//线性
float beta_1;//非线性组合参数
float beta_2;//u0=beta_1*e1+beta_2*e2+(beta_0*e0);
/*********第二种组合形式*********/
float alpha1;//u0=beta_1*fal(e1,alpha1,zeta)+beta_2*fal(e2,alpha2,zeta)
float alpha2;//0<alpha1<1<alpha2
float zeta;//线性段的区间长度
/*********第三种组合形式*********/
float h1;//u0=-fhan(e1,e2,r,h1);
uint16 N1;//跟踪微分器解决速度超调h0=N*h
/*********第四种组合形式*********/
float c;//u0=-fhan(e1,c*e2*e2,r,h1);
}Fhan_Data;
void ADRC_Init(Fhan_Data *fhan_Input1,Fhan_Data *fhan_Input2);
void Fhan_ADRC(Fhan_Data *fhan_Input,float expect_ADRC);
void ADRC_Control(Fhan_Data *fhan_Input,float expect_ADRC,float feedback);
extern Fhan_Data ADRC_Pitch_Controller,ADRC_Roll_Controller;
#endif