无名创新开源飞控的无线启动方法

本文探讨了原ADC安全绳控制方案的问题,并提出改进措施,包括引入无线启动技术、开发一键启动功能以及遵守比赛规则。通过修改串口通信和ADC控制程序,实现无人机的远程控制和安全操作,以适应比赛要求。

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

在最初的方案中,无名创新提供了一个使用ADC安全绳按键控制的无遥控器方案。然而,该方案存在一些问题。首先,安全绳与无人机始终连接在一起,这在飞行过程中存在很大的危险性。其次,在许多比赛中,使用这种方案是被禁止的。例如,在今年(2023)的电赛中,无人机必须要求使用一键启动功能。

为了改进现有方案,提供以下建议:

  1. 引入无线启动技术:考虑使用无线通信技术(如蓝牙或Wi-Fi)来实现无线启动功能。这样一来,无需通过安全绳与无人机连接,大大降低了飞行过程中的危险性。

  2. 开发一键启动功能:利用现有的传感器和控制器,设计并实现一键启动功能。该功能应简单易用,使飞行员能够轻松地启动无人机,提高其操作效率。

  3. 遵守比赛规则:确保所提出的改进方案符合比赛规则和要求。了解并遵守比赛组织者对无人机启动方式的要求,以确保您的方案在比赛中合规。

通过采取以上改进措施,以符合比赛规则。

可以尝试改变ADC安全绳控制的程序逻辑,通过获取串口信息来进行相应的处理。

无线通信及控制方案:

        1. 串口通信

        

在硬件资源驱动的Usart.c文件中进行如下更改:

  1. 将串口0用于前视摄像头,因此需要修改相应的代码。

  2. 在中断处理函数UART0_IRQHandler中,添加代码来处理接收到的数据。

  3. 创建一个名为car_data的数组来保存接收到的数据。

        具体代码如下:

uint8_t receivedData[8] = {0};
uint8_t byteCount = 0;   // 记录已接收字节数的计数器
uint8_t car_data[8];	 //  保存接收数据

void UART0_IRQHandler(void)//UART0中断函数
{	
  //获取中断标志 原始中断状态 不屏蔽中断标志		
  uint32_t flag = UARTIntStatus(UART0_BASE,1);
  //清除中断标志	
  UARTIntClear(UART0_BASE,flag);		
  //判断FIFO是否还有数据		
	while(UARTCharsAvail(UART0_BASE))        
	{
		uint8_t ch = UARTCharGet(UART0_BASE);
		receivedData[byteCount] = ch;  // 将接收的字符保存到数组中
		byteCount++;                   // 增加计数器

		// 如果我们已经接收了8个字节,执行所需的操作
		if(byteCount == 8)
		{
			//USART0_Send(receivedData, 8);
			if(receivedData[0] == 0xbb && receivedData[1] == 0x30)	//当数据满足小车要求
			{
				memcpy(car_data, receivedData, 8); // 使用memcpy来复制数组
				//USART0_Send(car_data, 8);
			}
			byteCount = 0;             // 重置计数器
			// 在这里添加处理接收到的8个字节的数据的代码
		}
	}		
  
}

通过以上修改,我们在接收到数据后将其保存在car_data数组中,并留出了处理接收数据的代码的空间。这样,您可以在其他程序中查看接收到的信息并进行相应的处理。实现基本的无线接收。

在Usart.c文件中提供了一个名为USART0_Send的发送函数,使用方法如下:

      1.通过调用USART0_Send函数发送一个8字节数组,示例代码如下:

USART0_Send(receivedData, 8);

      2.通过调用USART0_Send函数发送一个字符串,示例代码如下:

USART0_Send("你好\r\n", 8);

如果你在Usart.c中查找其他串口的发送函数,可以参考以下优化建议:

  • 首先,检查Usart.c文件中是否定义了其他串口的发送函数。

  • 如果找到了其他串口的发送函数,根据函数的命名规则和参数列表,调用相应的发送函数进行数据发送。

  • 如果没有找到其他串口的发送函数,可以自行编写一个发送函数来满足需求。你可以参考USART0_Send函数的实现方式,在Usart.c文件中添加新的发送函数,并根据需要修改函数名和参数列表。

        2. ADC安全绳控制程序更改

        在状态估计与基础飞行控制中ADC_Button.c文件中进行如下更改:

                1. 修改宏定义,使能ADC按键控制

#define  ADC_Button_Control_Enable  1//使能按键控制时设置为1,反之设置为0

                2. 在ADC_Button.h文件中通过使用extern关键字进行声明,表明car_data数组在其他

                    文件中已经定义和初始化。

extern uint8_t car_data[8];//接收数据数组

                3. 修改判断逻辑,根据接收数组的内容来更改Key_Value的值

               

                ADC最终是通过Key_Value的数值来判断ADC安全绳是否被按下(此处暂未考虑长按

                断按)

               使用我们即可通过在这段代码前通过对接收数组数字的判断,来更改Key_Valued值

	if(car_data[2] == 0x01)	Key_Value = 1;	//解锁
	if(car_data[2] == 0x02)	
	{
		Key_Value = 2;	//上锁
		
	}
	if(car_data[2] == 0x03)	
	{
		Key_Value = 3;	//开发模式
	}
	
	
	if(car_data[2] == 0x04)	
	{
		Key_Value = 4;	//降落
	}					
	
	if(car_data[2] == 0x05)	adc_ppm_update_flag = 0;    //释放遥控器权限
	
	if(car_data[2] == 0x00)	Key_Value = 0;

虽然上面更改确实可以实现解锁和SDK模式,但用于我们没考虑到长短按情况,我这里将对应长按短按情况,直接修改到数组中,也能实现急停。具体修改如下:

if(car_data[2] == 0x01)	Key_Value = 1;	//解锁
if(car_data[2] == 0x02)	
{
	Key_Value = 2;	//上锁
	
	
	//以下为该按键实现的任务
	adc_ppm_update_flag=0;//控制权限给释放给其它渠道获取的PPM:PPM接收机、地面站虚拟遥控器
						  //故按键启动后,此时短按下按键,遥控器控制权限瞬间会释放给接收机
												//遥控器接管后,可以手动控制飞机安全降落
	
	if(Controler_State==Unlock_Controler)//如果处于解锁状态
	{
		
		Bling_Set(&Light_3,5000,1000,0.5,0,GPIO_PORTF_BASE,GPIO_PIN_3,0);
	}	
	Controler_State=Lock_Controler;//直接上锁
	
}
if(car_data[2] == 0x03)	
{
	Key_Value = 3;	//开发模式
	ADC_Button3.press = LONG_PRESS;	//设置为长按
}


if(car_data[2] == 0x04)	
{
	Key_Value = 4;	//降落
	ADC_Button4.press = SHORT_PRESS;
}					
	
if(car_data[2] == 0x05)	adc_ppm_update_flag = 0;

if(car_data[2] == 0x00)	Key_Value = 0;
	
	

我们修改了判断逻辑,根据接收到的数组内容来更改Key_Value的值,并添加了相应的任务实现。

在此,我们就只需要通过串口发送相应数据,即可控制无人机一键启动 如:

发送不同dat[8]数组,以实现相应功能

uint_8 dat[8] = {0xbb, 0x30, 0x01, 0x00, 0x00, 0x00, 0x00,0x00};    //解锁
uint_8 dat[8] = {0xbb, 0x30, 0x02, 0x00, 0x00, 0x00, 0x00,0x00};    //上锁
uint_8 dat[8] = {0xbb, 0x30, 0x03, 0x00, 0x00, 0x00, 0x00,0x00};    //SDK开发者模式
uint_8 dat[8] = {0xbb, 0x30, 0x04, 0x00, 0x00, 0x00, 0x00,0x00};    //降落
uint_8 dat[8] = {0xbb, 0x30, 0x05, 0x00, 0x00, 0x00, 0x00,0x00};    //释放遥控器权限

开源飞控:支持气压计、超声波定高、户外GPS定点、定速巡航,部分视频链接如下: 无名飞控暴力测试 无名飞控江边定点(长时间) 无名飞控定高作死测试 无名飞控加速度计6面校准与融合简单讲解 无名飞控源码整体框架介绍初步 无名飞控解(上)锁与遥控器简单设置 无名科创自研飞控平台,经过武汉科技大学连续四届研究生师兄们参考国内外主流飞控(APM、Pixhawk、Autoquad、MWC、CC3D、无穷开、ANO、Light等)的算法与整体框架的进行深入学习基础上,经过软、硬件的精心设计,继承与发展,目前飞控整体功能相对完善,主要功能有:姿态自稳、超声波、气压计定高,户外GPS定点,GPS模式下定速巡航等功能,涵盖飞控学习主要核心算法: 1、四旋翼的传感器滤波(针对传感器不同使用情况:姿态解算、惯导、控制、传感器矫正等)分别采用窗口滑动滤波、不同截止频率的巴特沃斯数字低通滤波器);2、姿态解算(互补滤波、梯度下降法等);3、惯性导航(经典回路反馈法即APM三阶段互补滤波,单观测器的卡尔曼滤波,双观测量的卡尔曼滤波,观测传感器延时修正处理等); 4、控制算法(经典PID控制、前馈控制、自抗扰控制ADRC)等。 无名科创团队的发展: 多旋翼飞行器飞行控制系统(简称飞控)是我们团队历届主研项目,团队13年即开始第一代飞控的研究,从最开始的小四轴,到后来的多旋翼飞控,经历N个版本改进,经历无数次断桨、射桨、炸机,一步一步完善与改进,整合除了目前我们这款对外开源飞控。团队历来贡献者均就职于无人机公司做算法相关工作。目前我们的飞控更加完善,更加稳定,更加适合学习,主要核心代码自写率达到百分之90以上,代码基本上是逐行注释,整个飞控框架清晰明了,模块化封装规范,方便大家学习与二次开发。由于作者目前仍然在校,主研项目仍为飞控,个人时间比较多,可和大家一同交流学习。我们的服务宗旨是:打造国内功能最多、性能最好、成本最低、可玩性最强的开源飞控学习平台。帮助大家以最小的代价、最大的获得感、最快的速度学习飞控相关算法,顺利完成进阶逆袭!!! 团队主要成员CSDN开源技术博客汇总 ,充分展现我们开源共享、共同进步的创客精神,不废话了,直接上图: 部分技术博客截图: 无名科创开源飞控:独家首创10轴IMU组合:MPU6050(加速度计、陀螺仪)+IST8310(DJI同款磁力计)+SPL06-001(歌尔高精度气压计、媲美MS5611),MCU:STM32F103RCT6,这是一款强大的飞控,主频72Mhz,flash 256K,板载10 Axis传感器,3轴陀螺,3轴加速度,3轴磁罗盘,高精度气压计。适合新手学习无刷飞控,更适合玩家做多种拓展和二次开发,飞控预留多个串口,可外接各种附加设备,已实现超声波定高、气压计定高、GPS定点等功能,代码完全开源无名科创开源飞控学习平台: 1、飞控板与IMU分离式设计 2、采用3D打印的IMU气压防护罩 3、软件调试支持主流IAR、Keil两款编译器 4、支持多家上位机与地面站,方便调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0X78

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值