2023 年电子设计大赛无人机题

2023 年电子设计大赛无人机题

最终效果

硬件介绍

前置知识

通信协议说明

实现方法

问题

1 最终效果

使用 UWB + 光流基础部分全部完成,发挥部分发现火源后未能进入下一步动作。

2 硬件介绍

2.1 飞控

飞控使用匿名的凌霄飞控,凌霄飞控是半开源飞控,里面有两部分分别为凌霄 IMU 和单片机。IMU 闭源使用各种飞控算法对 IMU 传感器数据进行融合,用户可通过对单片机编程通过 API 向 IMU 发送指令,模拟遥控器对飞机控制。

2.2 UWB

使用 NoopLoop 的 LTP-S 的基站和 LTP-SS 的标签。参考用户手册即可对其开发。

2.3 机架

F450,使用匿名上位机可以针对飞机飞行情况,调整单参数。

3 前置知识

3.1 C/C++ 编程

可以自己在网上找相关课程学习

3.2 单片机基础

可以学习 STM 32 单片机,懂得串口、时钟、中断等基础知识即可。

3.3 PID 算法

推荐教程:视频教程

4 通信协议说明

本代码中飞控与外设通信使用相同的协议。

帧头功能码数据长度数据校验和附加校验和
0xbbID 号lengthdatasumadd_sum
ID号
树莓派0x01
小车数传0x02
OpenMV0x03
OpenMV命令编号
开始识别0x02
开警示灯0x03
舵机旋转0x04
关闭识别0x05

5 实现方法

基本上是两个任务,一个是在 user_task.c 文件里,一个是在 ano_lx.c 文件里的定时器中断里每秒发送坐标。

5.1 用户任务状态机

|-> 辅助通道 3 拨到 2000 且 openmv 任务开始 且 openmv 任务未结束 且 openmv 识别到火源。进入靠近火源任务。
|
|-> openmv 任务未开始 且 openmv 没识别到火源。进入正常巡航任务。
|
|-> openmv 识别到火源 且 openmv 任务未结束。进入悬停,计算识别时间200ms防止误识别。
|
|-> openmv 任务开始 且 openmv 未识别到火源。进入悬停,计算未识别时间,超过 2s 自动退出 openmv 任务。

5.2 室内无人机角度获取靠IMU输出欧拉角(需要把罗盘融合参数调为0)

6 问题

6.1 逻辑感觉没问题,但识别到后一直悬停,不结束。

6.2 t265 替换光流速度速度方向没问题(需要做坐标系变换),但转过角度后无法定点。

7 仓库地址

仓库地址(项目已不再维护)

### 凌霄飞控 GPIO 的使用方法及配置 凌霄飞控是一款基于开源硬件设计的飞行控制器,其核心功能之一是对无人机或其他设备进行精确控制。GPIO(General Purpose Input/Output)作为通用输入输出接口,在嵌入式开发中具有重要作用,可以用于传感器读取、信号传输以及外设控制等功能。 以下是关于凌霄飞控 GPIO 配置和使用的详细介绍: #### 1. GPIO 基础概念 GPIO 是一种可编程的数字接口,能够被设置为输入模式或输出模式。通过软件定义,它可以实现多种用途,例如触发中断、驱动 LED 或者与其他外部设备通信。对于凌霄飞控而言,GPIO 接口通常由底层固件管理,并可以通过特定命令或者脚本进行访问[^2]。 #### 2. 查看可用的 GPIO 引脚 在使用前,需确认哪些引脚支持 GPIO 功能并获取它们的具体编号。这一步可通过查阅官方文档完成,也可以运行以下命令来查看当前系统的 GPIO 状态: ```bash gpio readall ``` 上述命令会显示所有 GPIO 引脚的状态及其对应的物理位置[^3]。 #### 3. 设置 GPIO 方向 (Input/Output) 要操作某个具体的 GPIO 引脚,首先需要指定它的方向——即它是用来接收数据还是发送数据。此过程涉及两个主要文件路径 `/sys/class/gpio/export` 和 `/sys/class/gpio/unexport` 来启用或禁用选定的引脚号 `N`: - **导出目标引脚**: ```bash echo N > /sys/class/gpio/export ``` - **设定为输入或输出**: 输入模式: ```bash echo in > /sys/class/gpio/gpioN/direction ``` 输出模式: ```bash echo out > /sys/class/gpio/gpioN/direction ``` 以上步骤完成后即可对该引脚执行进一步的操作[^4]。 #### 4. 控制 GPIO 数据 一旦设置了正确的方向之后就可以开始实际的数据交互了。如果之前已经把某根针脚配置成了输出,则可以直接改变它上面电压高低电平;如果是当作输入则可以从那里读回实时状态值。 - 写入高/低电平时: ```bash echo 1 > /sys/class/gpio/gpioN/value # 设定 HIGH Level echo 0 > /sys/class/gpio/gpioN/value # 设定 LOW Level ``` - 获取当前电平: ```bash cat /sys/class/gpio/gpioN/value # 返回 '0' 表示 LOW, '1' 表示 HIGH ``` 这些基本指令允许开发者轻松地测试他们的电路板上的任何逻辑开关行为或是简单LED闪烁效果演示程序等等[^5]。 #### 5. 编程实例 - Python 脚本控制 GPIO 除了直接利用 shell 命令之外还可以借助高级语言如Python来进行更复杂的自动化任务处理。下面给出一段简单的例子展示如何开启关闭一个连接到第7号管脚(Pin7)的小灯泡。 ```python import RPi.GPIO as GPIO from time import sleep pin_number = 7 # 定义所要用到的实际Pin Number GPIO.setmode(GPIO.BOARD) # 使用BOARD编号方式 GPIO.setup(pin_number, GPIO.OUT) try: while True: print("Turning ON the Light...") GPIO.output(pin_number, GPIO.HIGH) # Turn On The Bulb sleep(1) # Wait For One Second print("Turning OFF the Light...") GPIO.output(pin_number, GPIO.LOW) # Turn Off The Bulb Again. sleep(1) # Another Delay Of A Single Sec. except KeyboardInterrupt: # If Ctrl+C is pressed... pass # Do Nothing Special Here finally: # Clean Up Resources Before Exit GPIO.cleanup() # Reset All Pins Back To Default State. ``` 该段代码片段展示了怎样周期性的点亮熄灭一个关联至第七个接头处发二极体(LED),并且当按下键盘组合键Ctrl-C终止进程的时候还会自动清理释放掉占用资源确保下次重新启动不会遇到冲突情况发生[^6]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值