竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)

news2024/11/25 19:11:16

竞赛无人机搭积木式编程(三)---用户自定义航点自动飞行功能(全局定位,指哪打哪)

无名小哥 2023年6月10日

用户通过对前面两讲中全国大学生电子设计竞赛真题植保无人机(2021)、送货无人机(2022)完整方案的学习。细心一点的客户可以发现:在激光雷达SLAM/T265双目相机提供全局定位数据的情况下,无人机的自主飞行部分的程序设计,基本都是通过飞控代码二次开发模式中已有的飞行控制API函数,即自动飞行支持函数和导航控制函数实现。

同时需要结合底部/前向的机器视觉传感器以及激光雷达传感器对目标特征进行视觉/距离定位。比如送货无人机赛题中,达到目标航点上方后,通过视觉实现无人机的精准目标定位。通过视觉实现无人机位置的二次对准,其实就是用到的前些年赛题中的追踪移动色块的功能;

另外在植保无人机发挥部分要求中,需要识别到塔杆和条形码信息。通过激光雷达传感器识别道塔杆的水平位置、相对无人机机头方向的角度,对无人机偏航方向和机头与杆之间的距离进行控制,进而实现机头对准塔杆并调整与杆之间的间距并通过视觉识别特征这一复合的运动,这里用的就是基础飞行控制函数中的偏航控制API和速度控制API函数予以实现。

为了方便萌新用户针对具体竞赛内容实现快速的二次开发,我们新增加了用户自定义航点飞行功能,用户可以不需要自己编程去改飞控代码,就可以实现航点参数的录入,无人机能按照用户录入的航点动作进行自主飞行。这里需要注意的是默认提供的自定义航点自动飞行函数中飞行动作只是对航点的依次遍历,尚不涉及中间动作,比如需要结合视觉/激光雷达进行视觉定位、距离定位。

用户自定义航点自动飞行功能提供的是一个精简化的自主飞行框架,用户可以快速实现飞行动作的修改和编排。针对某一比赛任务设计中航点飞行任务部分用户可以无需重复设计,直接参考本框架就可以轻松实现多航点目标自动飞行任务,留足更多的时间去着手机器视觉部分和更为精细化的任务设计。另外电赛国赛测评中要求参赛者去现场编程,快速实现某一飞行动作要求变得不再有任何压力。

12_用户通过ADC按键录入自定义航点飞行功能——支持现场设置坐标参数(全局定位,指哪打哪)

演示视频:https://www.bilibili.com/video/BV1wP411z7jo/

1 五向按键的检测设计与航点参数调节界面设计

根据用户需要现场高效率的录入航点参数的这一具体要求,我们将上一版本ADC安全绳按键进行了升级,在保留原有解锁、开发、上锁、降落四个独立按键的功能的同时,新增加了一路独立的五向按键采集ADC通道,一个IO口实现了5个方向按键的检测,并可配备有短按、长按、持续按、多次点动触发等,进一步丰富了按键键值。五向按键配合扩展版上OLED显示屏可方便实现多个参数的修改与保存。

1.1ADC按键检测原理

ADC按键的检测原理为每个按键串入不同的电阻值,按键按下后偏置电压经过电阻分压作用后,由单片机的ADC端口采集,飞控程序可以通过采集到的ADC值在某个区间范围来判断是哪个按键按下,并对按下的持续时间、次数灯进行逻辑处理,实现按键事件的响应。这部分原理以往教程有详细的讲解和分析,不属于本文重点,这里不再展开,用户可以参照以下链接自行学习。

电赛飞行器安全绳+无遥控器按键控制方案 https://www.bilibili.com/read/cv11399668

电赛禁止“无线通讯及遥控”解决方案 https://www.bilibili.com/read/cv7897817

电赛神器ADC安全绳按键无遥控器控制方案https://www.bilibili.com/video/BV1Gq4y1E7XM

1.2 航点参数界面设计

OLED显示屏参数显示分为8行,第1行显示内容为页面和页码提示,第2行至第8行数据为1-7个航点的ENU(等效东北天)方向的坐标信息,其中EN方向的输入参数表示相对初始基准点的位置增/减量。它是一个相对位置坐标参数,并非实际无人机内部实时位置,二者在水平位置上相差一个初始基准点的坐标(base_position.x,base_position.y)。U方向输入的是绝对坐标信息,即无人机离地面的高度值。

五向按键的中的上下按键短按可以实现某一参数的选中,*提示光标会移动到待调整参数的前面。

五向按键的中的左右按键短按/长按可以实现某一参数的选中的自加、自减,其中短按是自加/减1,长按是自加/减50。

五向按键里面的中按键长按可以实现当前页面所有参数写入到EEPROM实现掉电存储。

2 航点自动飞行功能软件实现

用户录入的航点参数存储在飞控EEPROM内,飞控每次上电时会从EEPROM中读取航点参数并保存在param_value参数数组内,第一个航点的参数存储在该变量的第51维开始的三个变量内,航点生成函数的作用是判断param_value数组航点字节段区间的数据是否全为0,来判断航点数据是否有效。当前能录入的最大航点数量为28个,针对不同的赛题任务,客户可以自己灵活调整。

2.1第一阶段——自动起飞到航巡高度方法uint8_t Auto_Takeoff(float target)

函数输入参数target为目标高度,自动起飞任务分为两个线程,第一步为记录当前3维位置信息,作为导航初始原点位置。并且通过导航控制函数设置期望目标高度位置。第二步为实时检测高度偏差值,连续2S满足位置偏差在10cm以内后,函数返回值置1后,自动起飞到目标高度任务完成,用法参照Developer_Mode.c开发者模式中case 18用法,自主起飞任务完成后会进入case 19执行航点自动飞行功能。

2.2第二阶段——自定义航点飞行Navigation_User_Setpoint(void)

第一步将高度期望设置成第一作业高度150cm,水平位置期望为初始起飞时候的水平位置,在起飞点上方悬停时间设置为1S,悬停时间可以根据实际需要调整。

起飞点上方悬停1S后,会根据按键录入航点数据进行判断,如果航点数据有效则将此航点设置成目标航点,并且线程计数器flight_subtask_cnt[n]会赋值为2,随后进入航点任务执行线程。

在线程2中执行航点飞行任务,并实时判断无人机的三维位置偏差,连续N次满足偏差小于某一阈值时,可以认为当前航点已抵达,继续刷新下一航点信息。当所有航点遍历完毕后,跳到第3 线程中,结束整个航点遍历过程。

最后执行线程3中的原地下降任务,无人机降落到地面后会触发地面检测条件无人机会自动上锁,结束整个飞行过程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647531.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新人如何学习性能测试?一文5个步骤带你入门性能测试!

写在前面:测试岗位细化后分为很多,功能测试、性能测试、自动化测试、测试开发,这些都叫测试。性能测试在所有测试分工中,地位和薪资都比较高,可见下方图片: 中级第3条,高级第1条,都是…

深度学习入门——感知机

1 感知机是什么 感知机接收多个输入信号,输出一个信号。这里所说的“信号”可以想象成电流或河流那样具备“流动性”的东西。像电流流过导线,向前方输送电子一样,感知机的信号也会形成流,向前方输送信息。但是,和实际…

Java集合-Collection Map

文章目录 概念IterableCollection接口List接口ArrayListVectorLinkedListArrayList 和 LinkedList 比较 SetHashSet LinkedHashSetMapHashMap 概念 1.集合主要是两组:单列集合(Collection) , 双列集合(Map) 2.Collection 接口有两个重要的子接口 List ,Set . 他们的实现子类都…

SWIG介绍和使用

官网:https://www.swig.org/ github:https://github.com/swig SWIG 是一种软件开发工具,可将用 C 和 C 编写的程序与各种高级编程语言连接起来。 SWIG 与不同类型的目标语言一起使用,包括常见的脚本语言,如 Javascri…

redis集群-Redis(六)

上篇文章介绍了哨兵架构以及集群搭建。 哨兵架构&redisCluster-Redis(五)https://blog.csdn.net/ke1ying/article/details/131178880 redisCluster 接着上篇文章继续讲解,前面一个linux服务器已经有了8001和8004节点,现在继…

八大典型的黑盒测试方法已来袭,快快接住!

前言 有了软件缺陷的暴露,我们就需要通过各种软件测试的方法来查找出软件的漏洞,编写出测试用例,及时修改bug。 在下面的这篇文章中,我们将谈论八大典型的黑盒测试方法,一起来学习⑧💡 一、等价类划分法…

【Python实战】Python采集王者皮肤图片

前言 我们上一篇介绍了,如何采集王者最低战力,本文就来给大家介绍如何采集王者皮肤,买不起皮肤,当个桌面壁纸挺好的。下面,我和大家介绍如何获取数据。 环境使用 python 3.9pycharm 模块使用 requests 模块介绍 re…

c++返回值使用引用的注意事项

c返回值使用引用的注意事项 问题原因返回函数的引用形参另外一个问题解决方法 问题 引用变量b接受到的值为无意义的数字。 原因 int& b returnYingyong();相当于: int i2 3; int& b i2; 销毁 i2;将局部变量作为返回值,导致引用b数据无意义…

【LInux】进程间通信(共享内存)

文章目录 system V共享内存shmget(创建共享内存)ftok(key)ipcs指令shmctl(销毁共享内存)shmat代码 共享内存 system V共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间&am…

新能源突围,需要发力被忽视的中端品牌战场

作者 |张祥威 编辑 |德新 今年2月,受特斯拉等竞品降价影响,深蓝SL03销量下滑至4000台。深蓝的市场部上报长安中国,十天后开始降价,3月SL03销量重回正轨。 在巨头和新势力之间灵活腾挪,深蓝向外界展示了爆款制造的素质…

网络安全知识点梳理(期末不挂科)

网络安全复习知识点太多梳理不清晰?👏🏻👏🏻👏🏻 本文一篇帮你梳理清晰,内容覆盖整个大学网络安全知识点👌🏻 干货满满不看后悔👍&#x1f44…

leetcode 309.最佳买卖股票时机含冷冻期

题目描述 给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票): 卖出股票后,你无法在第二天买入…

基于深度学习的高精度足球检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度足球检测识别系统可用于日常生活中或野外来检测与定位足球目标,利用深度学习算法可实现图片、视频、摄像头等方式的足球目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

【Java基础学习打卡09】JRE与JDK

目录 引言一、JRE二、JDK三、JDK、JRE和JVM关系总结 引言 本文将介绍JRE、JDK是什么,以及JDK、JRE和JVM关系三者之间的关系。 一、JRE JRE全称为Java Runtime Environment,是Java应用程序的运行时环境。JRE包括Java虚拟机(JVM)、…

【数据结构】二叉树经典题目

1. 二叉树创建字符串 相信大部分人看了题目描述之后,都会和我一样一脸的懵逼。直到我看到了一个描述才恍然大悟 分为3种情况: 左右都为空 --省略右为空,左不为空 – 省略左为空,右不为空–不省略 这里复习一下二叉树的前序遍历…

Linux基本指令(四)

文章目录 一、新建(adduser)与删除(userdel)普通用户二、date指令三、find指令四、grep指令 一、新建(adduser)与删除(userdel)普通用户 前面我Linux登录时都是以root的身份登录的,从现在开始以普同用户登录,那么普通用户哪里来,是由root用户…

泰坦陨落2找不到msvcr120.dll的解决方法

msvcr120.dll是的动态链接库文件之一。它在Windows操作系统中发挥着重要的作用,它提供了应用程序所需的各种功能和方法。 该文件返回编译后的代码所需的支持库。msvcr120.dll包含用于C / C编译器生成的应用程序所需的重要功能,包括数学函数,…

第六节 容器(列表)

文章目录 列表掌握知识点1.1 概述1.1.1 语法格式 1.2 列表的循环遍历1.2.1 for 循环遍历列表1.2.2 while 循环遍历列表 1.3 列表的常见操作1.3.1 列表增加元素1.3.2 列表删除元素1.3.3 列表查询元素 1.4 列表的排序1.5 列表的嵌套1.6 练习 随机分班1.7 练习 判断字符结尾1.8 扩…

华为OD机试真题 JavaScript 实现【最长子字符串的长度】【2022Q4 100分】,附详细解题思路

一、题目描述 给你一个字符串s,字符串s首尾相连组成一个环形,请你在环形中找出‘o’字符出现了偶数次最长子字符串的长度。 二、输入描述 输入一串小写字母组成的字符串。 三、输出描述 输出一个整数。 四、解题思路 题目要求在给定的环形字符串中…

HTML中嵌入JavaScript代码的三种方式

第一种方式: <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>HTML中嵌入JavaScript的第一种方式</title> </head> <body> <!-- 1.要实现的功能…