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

在最初的方案中,无名创新提供了一个使用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};    //释放遥控器权限

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

0X78

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

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

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

打赏作者

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

抵扣说明:

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

余额充值