2021-03-07毕设开始实验日志Ano_FlightCtrl

博主深入学习匿名飞控板Ano_FlightCtrl,解析PID参数与控制任务,遇到flag结构难题。重点介绍了姿态处理、一键起飞与降落函数。掌握飞控硬件调试,计划加速程序理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匿名飞控程序1

一、学习Ano_FlightCtrl

3月7日今天买了飞控板,匿名科创的拓空者,程序很复杂,标志位和参数巨多。

卖家也没有完整的一系列的学习步骤,只能慢慢自己摸索。

程序方面前面有main函数和scheduler函数比较直观 ,没什么可说的,工程里总共就那么多函数我看到哪个学哪个吧。

Ano_FlightCtrl我先从这个函数开始,看到不会的函数就找过去,对全局的程序有个印象之后再看别的函数就能串联起来。

void All_PID_Init(void)//姿态高度位置pid初始化

这没什么可说的
2.

/*控制参数改变任务*/
void ctrl_parameter_change_task()
{

	
	if(0)
	{
		Set_Att_2level_Ki(0);
		
	}
	else
	{
		if(flag.auto_take_off_land ==AUTO_TAKE_OFF)
		{

			Set_Att_1level_Ki(2);
		}
		else
		{

			Set_Att_1level_Ki(1);
		}
		
		Set_Att_2level_Ki(1);
	}
}

Set_Att_2level_Ki(0);
关于flag的结构体我在文件里搜索没找到不知道为什么,之后用vscode查找也没找到,然后keil 的go to define 又不能用了, 搞了一会 ,今天就到这吧。

3.8这个函数我看了好久一路找到关于角速度pid调参的函数,Set_Att_1level_Ki(1);(暂存)---------------这个函数是设定角速度pid的参数,具体有什么用还得以后看懂pid函数的时候才能解读。

void Set_Att_1level_Ki(u8 mode)
{
	if(mode == 0)
	{
		arg_1[ROL].ki = arg_1[PIT].ki = 0;
	}
	else if(mode == 1)
	{
		arg_1[ROL].ki = Ano_Parame.set.pid_att_1level[ROL][KI];
		arg_1[PIT].ki = Ano_Parame.set.pid_att_1level[PIT][KI];
	}
	else 
	{
		arg_1[ROL].ki = arg_1[PIT].ki = CTRL_1_KI_START;
	}
}

之后一键翻滚程序没有写好,不能用。
之后是一键起飞

/*一键起飞任务(主要功能为延迟)*/
void one_key_take_off_task(u16 dt_ms)  
后面终于看明白这个函数重开始到使用,这个函数只是触发的标志位,
真正是在Ano_AltCtrl文件里的Auto_Take_Off_Land_Task实现的,
在这里设置了最大起飞速度,设置起飞速度范围,之后将速度送到高度环的一个函数里,
实现了一键起飞,写的真复杂。
{
	if(one_key_taof_start != 0)
	{
		one_key_taof_start += dt_ms;
		if(one_key_taof_start > 1400 && flag.motor_preparation == 1)
		    当延时超过1.4秒和电机准备标志位都为是的时候
		{
			one_key_taof_start = 0;  标志位清零
				if(flag.auto_take_off_land == AUTO_TAKE_OFF_NULL)
				{
					flag.auto_take_off_land = AUTO_TAKE_OFF;
					//解锁、起飞
					flag.taking_off = 1;(?暂存)----------
				}
		}
	}
}
void one_key_take_off()
{
	if(flag.unlock_en)
	{	
		one_key_taof_start = 1;
		flag.fly_ready = 1;
	}
}
/*一键降落*/
void one_key_land()
{
	flag.auto_take_off_land = AUTO_LAND;//AUTO_LAND=3
}

这两个函数说是被上面函数调用了 可是我并没有找到 很奇怪。

/*降落检测*/

static s16 ld_delay_cnt ;
void land_discriminat(s16 dT_ms)

这个函数不重要 。

3.9匿名飞控板到了,我看了一下最新的程序和之前的没差多少,我看了飞控手册,了解了怎么安装飞控和上位机的使用,对飞控和遥控器有一点初步的了解。

目前来说如果我安装好飞控应该能实现定高稳定飞行,还差编写程序一键起飞和飞行任务,其实买拓空者不适合做电赛写自动飞行,这个适合学习姿态算法的实现,比赛更适合的是领航者 。

这个也能用但是不能快速二次开发,以后在说把这个作为第二方案4月15日之前还没做出来实际我就换方案。

目前飞控已经到手了还差电机、电调、接收机、遥控器、等

组装无人机的话目前还缺电调,之前有的电调型号不匹配又买的新的明天到,之前用的接收机是pwm模式接了很多线,匿名飞控接收机只留三根线,我查了查是SBUS或PPM模式,我原来的电调是能够使用的我只需要变一下模式就行。

接收机切换模式只需长按三秒,红灯快闪,之后一秒钟按两下就可以切换到ppm或sbus模式 。

一。关于接收机和飞控连接 的原理介绍和使用
二 同上
三 遥控器和接收机对频

电机的话用之前老的新西达的电机就行 ,1400kv,
听别人说这个牌子一般,我就懒得换了,建议别人买其他的牌子。那么过两天电调到了,无人机硬件方面应该也差不多完成了,基本的起飞是可以的,之后需要光流定高,之后需要摄像头巡线。然后完成任务。

3.11学习了姿态处理,具体公式和代码之后整理出来。

3.12写了文献综述和开题报告,校准电调和接收机,出了些问题,没有成功,切换了个模式,按之前的方法不能用 ,目前不知道怎么和遥控器对频,问题不大。明天应该能解决。

3.13问题解决了,新的电调不给接收机供电,接了5v,按步骤校准了,安装好应该能正常飞行,具体程序还没完全了解,所以不能写自动飞行的程序,不过这个月应该就用光流了,进度还行,程序进度有点慢。

3.14在这里插入图片描述
这个是在别的文章里看到的,自己看不懂。

void Swtich_State_Task(u8 dT_ms) 
 这个写光流模块使用限制:光流质量大于50,或者在飞行之前,认为光流可用
 光流高度600cm内有效
 光流:需要高度、光的质量达到要求、
   并且飞机处于LOC_HOLD模式,光流开关才会打开。
还有激光模块 uwb  openmv 开启标志位  不太重要,内容就不填了。
void Flight_Mode_Set(u8 dT_ms)
{
	Speed_Mode_Switch();
	if(speed_mode_old != flag.speed_mode) //状态改变
	{
		speed_mode_old = flag.speed_mode;
		//xy_speed_pid_init(flag.speed_mode);////////////
	}
///////////////////////////////////////////////////////
	if(CH_N[AUX1]<-300)  CH_N[AUX1]2这个是可以更改模式的 
	{
		flag.flight_mode = ATT_STAB;  好像是自稳的标志位
	}
	else if(CH_N[AUX1]<200)
	{
		flag.flight_mode = LOC_HOLD;//使program_ctrl.state_ok这个为1 目前还没看懂 
	}
	else
	{
		flag.flight_mode = RETURN_HOME;  返航 需要gps 暂时不用考虑
	}
	if(flight_mode_old != flag.flight_mode) //摇杆对应模式状态改变
	{
		flight_mode_old = flag.flight_mode;
		flag.rc_loss_back_home = 0;
	}
	//
	if(rc_in.no_signal==0)//flag.rc_loss ==0)//接收机有信号
	{
		//CH_N[]+1500为上位机显示通道值
		if(CH_N[AUX2]<-300)     第五通道   遥控器的值具体的我还没看        <1200    
		{
			flag.flight_mode2 = 0;    联系到openmv 后续可以更改到自己写的程序
		}
		else if(CH_N[AUX2]<200)//1200-1700
		{
			flag.flight_mode2 = 1;
		}
		else//>=1700
		{
			flag.flight_mode2 = 2;
		}
	}
	else
	{
		flag.flight_mode2 = 0;
	}	
}

至此,一个星期过完了。
任务完成:
把Ano_FlightCtrl看完了,
标志位也熟悉了一些,
姿态解算也学习了但是还没理解透不过应该不难。
飞控和电调买到了,电调和接收机调试好了。
下个阶段任务:学习程序进度要加快,姿态解算过程熟练。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值