系列

基于匿名无人机组装历程(一)
基于匿名无人机组装历程(二)
基于匿名无人机组装历程(三)
基于匿名无人机组装历程(四)
基于匿名无人机组装历程(五)


目录

  • 系列
  • 前言
  • 一、安装5.36版本或以上keil
  • 二、代码烧录及运行
      • 1.将烧录器接到飞控的SWD接口上。
      • 2.在 Keil 中点击 编译 → 下载 到目标板
      • 3.打开遥控器实现User_Task.c文件中的一键起飞降落和起飞+悬停+前进+右移+降落例程
  • 三、树莓派安装
  • 总结


前言

距离上一次更新已经过去了两三个月,期末周叠加暑期各种事务,时间被压得很满。这次趁着空闲时间,直接将系列的(四)和(五)两篇内容一起准备好。
本篇(四)的主要内容有两个:

  1. 如何运行匿名官方的 Keil 工程代码 并成功烧录到飞控。
  2. 如何将 树莓派 安装到无人机平台上。

上一篇(三)中完成了无人机的基础组装和飞控连接,本篇算是向“程序控制”迈出的重要一步吧。


一、安装5.36版本或以上keil

  1. 下载安装匿名官网给的keil安装包(如果电脑上已经有低版本,可以直接覆盖安装。)
  2. 由于匿名官方提供的工程文件和烧录器驱动对 Keil 版本有要求,较低版本(江协教程中的 5.24),可能会遇到 DAP-Link 烧录器无法识别 的问题。
    在这里插入图片描述
    正确装好keil后便可以打开官方给的源码工程,点击魔术棒 打开Debug,在右边栏中选择CMSIS-DAP Debugger,点击settings,便可以看到下图所示,这就说明烧录器能够被识别到。如果依旧不能识别到的话可以去 J-Link官网 下载jlink驱动,将5.X版本到8.X版本都下载一遍,随后重启keil,便可以在debug中识别到烧录器了。

在这里插入图片描述

二、代码烧录及运行

1.将烧录器接到飞控的SWD接口上。

在这里插入图片描述

2.在 Keil 中点击 编译 → 下载 到目标板

>代码如下(示例):

3.打开遥控器实现User_Task.c文件中的一键起飞降落和起飞+悬停+前进+右移+降落例程

我先将User_Tack.c文件中的代码先粘上来
大概讲解一下这个文件的含义以及前置知识。在FS-I6X上一共有6个辅助通道,分别是SWA、SWB、SWC、SWD、VRA、VRB。在此之前我们已经设置了辅助通道5为SWC。

在这个代码中,需要用到的是[ch_6_aux2],即辅助通道六,又由于需要用到800、1500、2000三个段,所以我们需要选择一个三段式通道,所以只能选择VRA或者是VRB,在遥控器上设置通道六为VRA。

调节首先先将辅助通道5调至2000,让无人机进入程控模式,随后内八启动无人机。
调节VRA将旋钮调制1300-1700这个范围内使无人机飞至距地100cm高

( one_key_takeoff_f =OneKey_Takeoff(100); )

再将旋钮调制800-1200,使无人机降落

( one_key_land_f =OneKey_Land(); )

将旋钮调制1800-2200,无人机也会再一次进入程控模式,执行起飞+悬停+前进+右移+降落。
等10s

if(time_dly_cnt_ms<10000)
{
time_dly_cnt_ms+=20;//ms
}

前进1米

mission_step += Horizontal_Move(100,150,0);

右移1米

mission_step += Horizontal_Move(100,150,90);

#include "User_Task.h"
#include "Drv_RcIn.h"
#include "LX_FC_Fun.h"

void UserTask_OneKeyCmd(void)
{
    static u8 one_key_takeoff_f = 1, one_key_land_f = 1, one_key_mission_f = 0;
    static u8 mission_step;
    if (rc_in.no_signal == 0)
    {
        if (rc_in.rc_ch.st_data.ch_[ch_6_aux2] > 1300 && rc_in.rc_ch.st_data.ch_[ch_6_aux2] < 1700)
        {
            if (one_key_takeoff_f == 0)
            {
                one_key_takeoff_f =OneKey_Takeoff(100);
            }
        }
        else
        {
            one_key_takeoff_f = 0;
        }
        if (rc_in.rc_ch.st_data.ch_[ch_6_aux2] > 800 && rc_in.rc_ch.st_data.ch_[ch_6_aux2] < 1200)
        {
            if (one_key_land_f == 0)
            {
                one_key_land_f =OneKey_Land();
            }
        }
        else
        {
            one_key_land_f = 0;
        }
		if(rc_in.rc_ch.st_data.ch_[ch_6_aux2]>1700 && rc_in.rc_ch.st_data.ch_[ch_6_aux2]<2200)
		{
			if(one_key_mission_f ==0)
			{
				one_key_mission_f = 1;
				mission_step = 1;
			}
		}
		else
		{
			one_key_mission_f = 0;		
		}
		if(one_key_mission_f==1)
		{
			static u16 time_dly_cnt_ms;
			switch(mission_step)
			{
				case 0:
				{
					time_dly_cnt_ms = 0;
				}
				break;
				case 1:
				{
					mission_step += LX_Change_Mode(3);
				}
				break;
				case 2:
				{
					mission_step += FC_Unlock();
				}
				break;
				case 3:
				{

					if(time_dly_cnt_ms<2000)
					{
						time_dly_cnt_ms+=20;
					}
					else
					{
						time_dly_cnt_ms = 0;
						mission_step += 1;
					}
				}
				break;
				case 4:
				{
					mission_step += OneKey_Takeoff(100);
				}
				break;
				case 5:
				{
					if(time_dly_cnt_ms<10000)
					{
						time_dly_cnt_ms+=20;
					}
					else
					{
						time_dly_cnt_ms = 0;
						mission_step += 1;
					}					
				}
				break;
				case 6:
				{
					mission_step += Horizontal_Move(100,150,0);
				}
				break;	
				case 7:
				{
					if(time_dly_cnt_ms<10000)
					{
						time_dly_cnt_ms+=20;
					}
					else
					{
						time_dly_cnt_ms = 0;
						mission_step += 1;
					}	
				}
				break;
				case 8:
				{
					mission_step += Horizontal_Move(100,150,90);
				}
				break;
				case 9:
				{
					if(time_dly_cnt_ms<10000)
					{
						time_dly_cnt_ms+=20;
					}
					else
					{
						time_dly_cnt_ms = 0;
						mission_step += 1;
					}						
				}
				break;
				case 10:
				{
					OneKey_Land();					
				}
				break;				
				default:break;
			}
		}
		else
		{
			mission_step = 0;
		}
	}
}

三、树莓派安装

为了方便后续开发(如图传、ROS2 控制等),我在飞控平台上 3D 打印了一个额外平台用于安装树莓派和电源。
建模工具:SolidWorks(推荐 这个B站教程 入门)
安装效果:将树莓派、电源模块固定在打印平台上
后续优化:

  • 目前整体重量偏大
  • 下方空间利用率低
  • 外观不够规整
  • 计划重新设计结构并在分电板上加一个树莓派专用供电电路

在这里插入图片描述

总结

本篇完成了两件事:
成功运行并烧录匿名官方 Keil 工程代码,实现一键起飞、降落及完整程控任务。
在无人机平台上安装树莓派,为后续功能扩展做准备。
下一篇(五)将介绍如何在树莓派上配置环境、连接飞控以及初步实现无人机的远程控制与数据传输。


如有不足还请在评论区多多指教,如果有不懂的地方也可以评论区中提问,看到就会回复
ヾ(T(エ)Tヽ)

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐