代码解读五 文件名“Ano_LocCtrl.c”

2023-05-16

关于这个位置速度环我还不是很理解,因为单凭这一个文件确实看不出来什么东西,这并不像角度环和角速度环一样有丰富的理论支撑,至少我现在还没看到,可能是我水平不够额,但这并不妨碍我们继续往前走,试着往下看吧,万一有收获呢?

  1. 首先进入 文件名‘’Ano_Scheduler.c”中的这个函数,如下
static void Loop_100Hz(void)	//10ms执行一次
{
			test_rT[0]= GetSysTime_us ();
//				
	/*遥控器数据处理*/
	RC_duty_task(10);
	
	/*飞行模式设置任务*/
	Flight_Mode_Set(10);
	
	/*获取姿态角(ROLL PITCH YAW)*/
	calculate_RPY();
	
	/*姿态角度环控制*/
	Att_2level_Ctrl(10e-3f,CH_N);
	
	/*位置速度环控制(暂无)*/
	Loc_1level_Ctrl(10,CH_N);
	
	/*高度数据融合任务*/
	WCZ_Fus_Task(10);
	
	/*高度速度环控制*/
	Alt_1level_Ctrl(10e-3f);
	
	/*高度环控制*/
	Alt_2level_Ctrl(10e-3f);
		
	/*光流数据解析*/
	AnoOF_DataAnl_Task(10);
	
	/*灯光控制*/	
	LED_Task(10);
//		
			test_rT[1]= GetSysTime_us ();
			test_rT[2] = (u32)(test_rT[1] - test_rT[0]) ;	
				
}

很明显可以看到暂无这两个字,但是从我分析源代码的过程中却感觉到这个位置速度环和光流且和高度环也有关系,有什么关系?接着往下看

  1. 贴出 文件名“Ano_LocCtrl.c” 的源代码,已经加了一些注释,也不知道对不对,凑合着看吧
#include "Ano_LocCtrl.h"		//位置控制,一直看成逻辑控制 =_=
#include "Ano_Imu.h"
#include "Ano_FlightCtrl.h"
#include "Ano_OF.h"
#include "Ano_Parameter.h"



//这个位置速度环是干嘛的?看起来和光流有关?
//位置控制和高度控制好像联系很紧密?


//位置速度环控制参数
_PID_arg_st loc_arg_1[2] ; 

//位置速度环控制数据
_PID_val_st loc_val_1[2] ; 



//为什么偏偏这个需要修正?

//位置速度环修正控制参数
_PID_arg_st loc_arg_1_fix[2] ; 

//位置速度环修正控制数据
_PID_val_st loc_val_1_fix[2] ; 




/*位置速度环PID参数初始化*/
void Loc_1level_PID_Init()
{
	loc_arg_1[X].kp = Ano_Parame.set.pid_loc_1level[KP];//0.22f  ;
	loc_arg_1[X].ki = 0.0f  ;
	loc_arg_1[X].kd_ex = 0.00f ;
	loc_arg_1[X].kd_fb = Ano_Parame.set.pid_loc_1level[KD];
	loc_arg_1[X].k_ff = 0.02f;
	
	loc_arg_1[Y] = loc_arg_1[X];
//fix	
	loc_arg_1_fix[X].kp = 0.0f  ;
	loc_arg_1_fix[X].ki = Ano_Parame.set.pid_loc_1level[KI] ;
	loc_arg_1_fix[X].kd_ex = 0.00f;
	loc_arg_1_fix[X].kd_fb = 0.00f;
	loc_arg_1_fix[X].k_ff = 0.0f;
	
	loc_arg_1_fix[Y] = loc_arg_1_fix[X];
}




//这两个结构体很重要,一方面为下面PID函数提供期望值和反馈值
//另一方面和高度环有明显关系,因为其期望值和反馈值都应用于高度环串级PID中
//具体在高度环文件中介绍
_loc_ctrl_st loc_ctrl_1;
_loc_ctrl_st loc_ctrl_2;

static float fb_speed_fix[2];




//下面所有仅用到了loc_ctrl_1而没用到loc_ctrl_2,至于为什么,本人并不清楚
//但是,这两个结构体都应用到了高度环中,而且请注意PID中前馈也不再是0了
/*位置速度环*/
void Loc_1level_Ctrl(u16 dT_ms,s16 *CH_N)
{
	//如果打开光流
	if(switchs.of_flow_on)
	{
		//把光流的东西都拿了过来
		loc_ctrl_1.exp[X] = fs.speed_set_h[X];	//X = 0 / Y = 1
		loc_ctrl_1.exp[Y] = fs.speed_set_h[Y];

		loc_ctrl_1.fb[X] = OF_DX2;
		loc_ctrl_1.fb[Y] = OF_DY2;
		
		fb_speed_fix[0] = OF_DX2FIX;
		fb_speed_fix[1] = OF_DY2FIX;
		
		for(u8 i =0;i<2;i++)
		{
			
			//主PID 
			//输入参数两个结构体倒很常规,和以往一样,但是期望和反馈却调用的是光流中的值
			//匿名光流确实是有点特殊,但是由于本人并不了解光流所以就不深究了,有兴趣的研究下吧
			//如上 X = 0 / Y = 1 正好分别对应这个循环中的i值,但是为什么是两个PID?
			PID_calculate( 					dT_ms*1e-3f,            	//周期(单位:秒)
										loc_ctrl_1.exp[i] ,				//前馈值
										loc_ctrl_1.exp[i] ,				//期望值(设定值)
										loc_ctrl_1.fb[i] ,				//反馈值()
										&loc_arg_1[i], 					//PID参数结构体
										&loc_val_1[i],					//PID数据结构体
										50,								//积分误差限幅
										10 *flag.taking_off				//integration limit,积分限幅
										 )	;	
			
			//修正PID
			//=_= 如上,为什么要修正?且为什么偏偏这个需要修正?
			PID_calculate(					 dT_ms*1e-3f,            	//周期(单位:秒)
										loc_ctrl_1.exp[i] ,				//前馈值
										loc_ctrl_1.exp[i] ,				//期望值(设定值)
										fb_speed_fix[i] ,				//反馈值()
										&loc_arg_1_fix[i], 				//PID参数结构体
										&loc_val_1_fix[i],				//PID数据结构体
										50,								//积分误差限幅
										10 *flag.taking_off				//integration limit,积分限幅
										 )	;	
										 
			//得到最终输出
			//位置控制输出 = 位置值的输出+ 位置修正值的输出
			loc_ctrl_1.out[i] = loc_val_1[i].out + loc_val_1_fix[i].out;		
		}		


	}
	else
	{
		//如果没打开光流就算了
		loc_ctrl_1.out[X] = (float)MAX_ANGLE/MAX_SPEED *fs.speed_set_h[X] ;
		loc_ctrl_1.out[Y] = (float)MAX_ANGLE/MAX_SPEED *fs.speed_set_h[Y] ;
	}
}




这个文件很短,可能确实如开头说的,没有用上,而且我也没理解这个位置速度环应用在哪里?因为那个角度环和角速度环用于三个遥控器通道的PID控制,高度环和高度速度环应用于油门通道的PID控制,如果这个位置速度环应用于比较复杂的控制中的话,我觉得可以放一放,先实现基本功能,以后有空的话可以来研究下,或者是可以从高度环中找到答案呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码解读五 文件名“Ano_LocCtrl.c” 的相关文章

  • RL论文数据图绘制

    rl plotter 强化学习论文里的训练曲线是用什么画的 xff1f 如何计算相关变量
  • 强化学习之美

    强化学习作为一门灵感来源于心理学中的行为主义理论的学科 xff0c 其内容涉及概率论 统计学 逼近论 凸分析 计算复杂性理论 运筹学等多学科知识 xff0c 难度之大 xff0c 门槛之高 xff0c 导致其发展速度特别缓慢 随着近年来以
  • 直线型一阶倒立摆2---建模

    三 直线型一阶倒立摆模型建立 一级倒立摆系统是一个不稳定的系统 xff0c 需要对其进行机理建模 在研究过程中 xff0c 应忽略空气摩擦 等 xff0c 而后可将倒立摆系统进行抽象化 xff0c 认为其由小车和匀质刚性杆两部分组成并对这两
  • 可用性和可靠性的区别

    首先 xff0c 这两个属性都是质量 xff08 可维护性 xff09 的一部分 按照书上的定义 xff0c 可靠性 xff08 reliability xff09 xff1a 在规格时间间隔内和规定条件下 xff0c 系统或部件执行所要求
  • 直线型一阶倒立摆3---控制器设计

    四 控制器设计 如前文所述 xff0c 倒立摆状态空间方程表明系统能够被控制 被观测 倒立摆或者其它受控系统达到受控稳定状态 xff0c 其实质上是指系统的各状态量收敛至一目标稳定值 对于状态空间描述而言 xff0c 系统矩阵A的特征值为负
  • Centos7 关闭防火墙

    Centos7 关闭防火墙 CentOS 7 0默认使用的是firewall作为防火墙 xff0c 使用iptables必须重新设置一下 1 直接关闭防火墙 systemctl stop firewalld service 停止firewa
  • 485无线通信/数传模块_zigbee模块_RS485转ZigBee_顺舟智能

    一 概述 顺舟智能 SZ02系列 ZigBee无线串口通信设备 xff08 485无线通信 数传设备 xff09 xff0c 采用了加强型的ZigBee无线技术 xff0c 集成了符合 ZIGBEE协议的射频收发器和微处理器 xff0c 符
  • 华清远见嵌入式学院学员实践项目案例介绍一

    基于GPRS的远程安防监控系统 1 项目背景 随着现代电力电子技术和微电子技术的迅猛发展 xff0c 自动化 xff0c 智能化程度的不断的提高 xff0c 家居安防技术正在不断发展 传统的家居安防系统已经越来越不能满足现代人的需求 消费者
  • Ubuntu 20.04.05安装ceres-1.14.0

    1 安装Ceres1 14 0 链接 Ubuntu20 04安装Ceres1 14 0 3 cmake编译ceres遇到的问题 xff08 1 xff09 TBB 问题描述 xff1a Did not find Intel TBB libr
  • ubuntu18.04 安装编译ceres-solver-1.14.0 编译错误

    在Ubuntu18 04 安装Ceres solver 1 14 0 xff0c make时出现了98 Built target bundle adjuster xff0c ecipe for target examples CMakeFi
  • ls-remote -h -t git://github.com/adobe-webplatform/eve.git

    npm WARN deprecated bfj node4 64 5 3 1 Switch to the bfj package for fixes and new features npm WARN deprecated nomnom 6

随机推荐

  • 数据可视化图表插件调研:Echarts、Highcharts、G2、D3

    目前常用于前端网页数据可视化实现的图表插件主要有四款 xff1a Echarts Highcharts G2 D3 xff0c 开发一些产品工具的时候可能会集成这些开源的可视化插件 xff08 这里Highcharts不开源 xff09 1
  • 31岁转行的我

    2011年从一所普通二本师范大学毕业后先后从事了两年的教育工作 xff0c 但都没有挣到钱 xff0c 12年从深圳回到西安 xff0c 参加了几次公务员和事业单位的招考 xff0c 几次因0 1分的微小差距与国家饭碗擦肩而过 后来决定不再
  • git submodule 如何同步更新

    摘要 xff1a git submodule 更新之后 xff0c 如果在父仓库里直接调用 git submodule update init recursive 会发现 子模块的代码不会更新 初学者会很迷惑 xff0c 怎么能把子模块更新
  • egret 入门 初试

    整理的文章 白鹭引擎入门 趁着今天周六 xff0c 把苹果放下一边先 今天早上一醒来就装上了js编辑神器Webstorm xff0c 最近也开始关注了一些移动方面的 js 前端框架 如 谷歌的Angularjs 和 fackbook 的Re
  • Ubuntu 18之vnc连接不上问题(已解决)

    在配置vnc时所以的准备动作已经准备好了 xff0c 该配的文件也配好了 xff0c 但就是一直连接不上 在主机端报time out的错误 xff0c 后来查百度得知vncserver xff1a 1对应5901端口 xff0c 2就是59
  • Matlab R2019a Win64位 迅雷下载链接

    鉴于百度云和PanDownload各种限速 xff0c 所以我特意寻了迅雷磁力链接供大家下载 实在是因为百度云下载只有50 k s xff0c 而迅雷下载5 m s啊 Matlab R2019a Win64位 链接内容包括Matlab和Ca
  • 力扣K神图解算法数据结构解析08

    力扣K神图解算法数据结构点这里 八 位运算 剑指15 xff0c 二进制中1的个数 class Solution public int hammingWeight uint32 t n int cnt 61 0 for int i 61 0
  • 吴军老师《给中学生/大学生的书单》----Yohao整理

    2018 7 27记录 span class hljs code 给中学生的书单 span 一 文学类 18本 span class hljs code 1 金庸和琼瑶各一本 长篇的比短篇的好 span span class hljs co
  • 北航2系921 2021考研历年真题及参考答案(2020-2004)

    需要自取 百度网盘 提取码 xff1a iwbg 关于2020北航921试题 相信大家都听说了 xff0c 2020年的921试题整体难度较2019年小 2019考完后 xff0c 群里面怨声载道 xff0c 信号10年没考电路题了怎么就今
  • 姿态解算

    姿态解算全过程 关于这方面 xff0c 姿态计算的理解大致需要经过以下几个步骤 1 秦永元的 惯性导航 xff0c 不但十分基础而且写的也十分好 xff0c 适合入门 但是并不是所有章节都是需要看的 xff0c 其中1 2节 9 2节和9
  • 匿名飞控代码解读汇总

    由于本人临近毕业 xff0c 所做的毕设是有关无人机方面的 xff0c 所使用的也是匿名的飞控 lt 资料包 20171217 gt xff0c 所以首先需要读懂匿名代码然后才能增加自己的功能 xff0c 临近毕业还有两个月左右 xff0c
  • 融合磁力计的Mahony互补滤波算法

    https blog csdn net qq 21842557 article details 50993809 上面博客有关于磁力计的详细解释 xff0c 不过由于本人资质愚钝 xff0c 至今还不是完全理解 不过思想大致和加速度计差不多
  • 代码解读一 文件名“ANO_Imu.c”

    我把这个文件的所有代码贴上来了 xff0c 供大家参考 xff0c 由于本人水平有限 xff0c 且匿名代码注释比较少 xff0c 所以很多也不是很懂 xff0c 实在是一些莫名的定义太多了 xff0c 什么w x y z h之类的 xff
  • 每周学一点 egret(2): EgretConversion 工具转换ts

    今晚无聊试了一下wing的格式化和这个转换工具 开始的时候我尝试手写翻译 xff0c 发现这一款转换也比较简单 所以尝试做了一下转换 对于如果文件名是中文 要小心一点 总是出现怪怪的 转换后 xff0c 没有直接跳转到对于的目录去 如果加上
  • 代码解读二 文件名“Ano_Math.c”

    这里面都是一些关于数学函数的骚操作 xff0c 既然不使用math h xff0c 那么至少说明这里面的数学函数调用不应比math h里面的函数慢 下面贴出代码 xff0c 简要做了个注释 xff0c 看看就行 至于怎么做的 xff0c 有
  • 关于单级PID及串级PID

    简单记录下我在学习PID过程中遇到的困难及解决方法 xff0c 希望能对大家有所帮助 1 首先 xff0c 关于PID这块理论知识必须非常清楚 xff0c 能够自行推导公式 xff0c 包括位置式PID公式和增量式PID公式 2 实现位置式
  • 代码解读三 文件名“Ano_Pid.c”

    关于PID这部分匿名代码里面有很多 xff0c 此文件是最基础的即单级PID的实现 xff0c 后面的关于速度和角速度环的串级PID及高度和高度速度环的串级PID都是以此为基础的 xff0c 所以此文件内容务必搞懂 C COPYRIGHT
  • 代码解读四 文件名“Ano_AttCtrl.c”

    这部分是关于匿名串级PID的 xff0c 我觉得有需要的同学可以直接移植 xff0c 不需要自己写了 xff0c 确实有点麻烦 xff0c 基本上代码里面都注释的很清楚了 xff0c 且由于本人水平有限 xff0c 所以也不是都很懂 xff
  • 代码解读六 文件名“Ano_AltCtrl.c”

    写了一大堆 xff0c 也不知道对不对 xff0c 贴上来让大家看看 include 34 Ano AltCtrl h 34 高度控制 include 34 Ano Imu h 34 include 34 Drv icm20602 h 34
  • 代码解读五 文件名“Ano_LocCtrl.c”

    关于这个位置速度环我还不是很理解 xff0c 因为单凭这一个文件确实看不出来什么东西 xff0c 这并不像角度环和角速度环一样有丰富的理论支撑 xff0c 至少我现在还没看到 xff0c 可能是我水平不够额 xff0c 但这并不妨碍我们继续