ChatGPT带我做四轴飞行器和自平衡小车

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照ChatGPT的说法,这款主板的的主控MCU、无线通信、电源管理、外设接口可以共用,需要差异化的有电机驱动、传感器的选择、控制算法和软件、电源供电。ChatGPT说的共用部分没啥争议,有差异化的地方需要细想下:电机驱动显然应该不同,比如四轴飞行器使用空心杯电机,那么它的电机驱动电路只用通过PWM控制空心杯电机的转速即可,平衡车电机就不一样,除了要控制转速,还要能控制正反转方向,还要能测量电机转速实现速度闭环控制;那么传感器的选择呢,四轴飞行器最少要用六轴传感器才行,它要用到三轴陀螺仪和三轴加速度计才能将当前姿态计算出来,平衡车则会少两个轴,因为它左右两个轮子固定了,不能左右倾斜,相当于四轴飞行器的横滚角固定不用测量,所以传感器可以就选用一款六轴传感器,平衡车不用其中两个轴就行了;控制算法和控制逻辑显然也会有差异,毕竟飞控系统和自平衡控制系统的控制原理不一样,用到的姿态检测数据也不一样,电机也不一样;电源供电不一样主要是因为四轴飞行器和平衡车的电机的功率不一样,额定电压也不一样。看来ChatGPT虽然只说大方向,但大方向细想后也没啥不对,接下来按照这个大方向设计顶层原理图图纸如下图所示,差异化的电机驱动部分通过两组GPIO来控制,具体差异在电机驱动模块原理图中设计;传感器直接选择六轴传感器,平衡车不用这么多数据在软件上过滤,硬件上不体现差异;供电由3.7V锂电池输入,通过电源电路分出3.3V和6V两路电源,3.3V给所有芯片供电,6V给平衡车电机供电,四轴飞行器的电机直接由3.7V锂电池供电。
在这里插入图片描述
控制算法与软件上的差异怎么做呢?问问ChatGPT
在这里插入图片描述

// 飞行器控制参数结构体
typedef struct {float roll_gain;float pitch_gain;float yaw_gain;float throttle_gain;
} FlightControllerParams;// 平衡车控制参数结构体
typedef struct {float balance_gain;float steering_gain;
} BalancingControllerParams;// 获取飞行器传感器数据
FlightSensorData getFlightSensorData();// 获取平衡车传感器数据
BalancingSensorData getBalancingSensorData();// 发送飞行器控制信号
void sendFlightControlSignal(FlightControlOutput control_output);// 发送平衡车控制信号
void sendBalancingControlSignal(BalancingControlOutput control_output);// 飞行器控制函数
FlightControlOutput flightControl(FlightSensorData sensor_data, FlightControllerParams params);// 平衡车控制函数
BalancingControlOutput balancingControl(BalancingSensorData sensor_data, BalancingControllerParams params);// 主函数
int main() {// 初始化飞行器控制参数FlightControllerParams flight_controller_params = {.roll_gain = 0.5,.pitch_gain = 0.5,.yaw_gain = 0.5,.throttle_gain = 0.5};// 初始化平衡车控制参数BalancingControllerParams balancing_controller_params = {.balance_gain = 0.5,.steering_gain = 0.5};// 主循环while (1) {// 获取飞行器传感器数据FlightSensorData flight_sensor_data = getFlightSensorData();// 获取平衡车传感器数据BalancingSensorData balancing_sensor_data = getBalancingSensorData();// 飞行器控制FlightControlOutput flight_control_output = flightControl(flight_sensor_data, flight_controller_params);// 平衡车控制BalancingControlOutput balancing_control_output = balancingControl(balancing_sensor_data, balancing_controller_params);// 发送飞行器控制信号sendFlightControlSignal(flight_control_output);// 发送平衡车控制信号sendBalancingControlSignal(balancing_control_output);}return 0;
}

在这里插入图片描述

ChatGPT给出了一个软件设计框架,主循环中就干了三件事:1、获取姿态数据,飞行器获取飞行器的,平衡车获取平衡车的;2、运行控制算法,得到控制信号,这个可以理解为根据当前飞行器姿态计算出一个飞行器电机的控制量,根据当前平衡车姿态计算出一个平衡车电机的控制量;3、将飞行器控制量给飞行器电机驱动电路来调节飞行器电机转速,将平衡车控制量给平衡车电机驱动电路来调节平衡车电机转速和方向。大方向好像没错,这里最复杂的应该是第2点的控制算法应该具体怎么做,再问问ChatGPT:
在这里插入图片描述

// 飞行器控制函数
FlightControlOutput flightControl(FlightSensorData sensor_data, FlightControllerParams params) {// 获取飞行器姿态信息float roll = sensor_data.roll;float pitch = sensor_data.pitch;float yaw = sensor_data.yaw;float throttle = sensor_data.throttle;// 计算飞行器控制输出float roll_output = roll * params.roll_gain;float pitch_output = pitch * params.pitch_gain;float yaw_output = yaw * params.yaw_gain;float throttle_output = throttle * params.throttle_gain;// 返回飞行器控制输出FlightControlOutput control_output = {.roll = roll_output,.pitch = pitch_output,.yaw = yaw_output,.throttle = throttle_output};return control_output;
}// 平衡车控制函数
BalancingControlOutput balancingControl(BalancingSensorData sensor_data, BalancingControllerParams params) {// 获取平衡车姿态信息float balance = sensor_data.balance;float steering = sensor_data.steering;// 计算平衡车控制输出float balance_output = balance * params.balance_gain;float steering_output = steering * params.steering_gain;// 返回平衡车控制输出BalancingControlOutput control_output = {.balance = balance_output,.steering = steering_output};return control_output;
}

在这里插入图片描述
这段伪代码大致描述了如何将传感器数据转换为控制量,貌似就是乘了一个参数,参考意义不大。
根据ChatGPT提供的一些大方向,最终设计出的主板实物如下图所示:
在这里插入图片描述
这款主板已经能完美驾驭四轴飞行器和两轮自平衡小车,目前已在淘宝上线,在淘宝搜索"FlyBalance飞行器平衡车兼容驱动"或者直接点这里跳转,感兴趣的朋友可以移步那里获取更多信息。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关系型数据库中如何进行事务管理

关系型数据库中如何进行事务管理 在关系型数据库中,事务管理是一项非常重要的功能。它允许数据库管理员在一个或多个数据库操作中实现原子性、一致性、隔离性和持久性(ACID)。 事务是一组数据库操作,它们必须全部执行或全部回滚…

验收户外LED显示屏有哪些标准

验收户外LED显示屏时,可以根据以下标准进行评估: 亮度和对比度:户外LED显示屏需要具有足够的亮度,以应对日间和强烈阳光的照射。检查显示屏在各种光照条件下的亮度表现,并确保对比度良好,以保证画面清晰可见…

数据结构--哈夫曼树

数据结构–哈夫曼树 带权路径长度 结点的 权 \color{red}权 权:有某种现实含义的数值(如:表示结点的重要性等) 结点的带权路径长度 \color{red}结点的带权路径长度 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积 树的…

作为一个程序员一定要掌握的算法之遗传算法

目录 一、引言 1.1 目的 1.2 意义 二、遗传算法介绍 2.1 遗传算法的基本思想 2.2 遗传算法与其他算法的主要区别 2.3 基于Java的遗传算法设计思想 三、遗传算法的具体实现 3.1 系统功能模块图和说明 3.2 代码和说明 3.2.1 初始化 3.2.2 选择运算 3.2.3 交叉运算 3…

【车载Android】多用户(一) - Linux用户与Android多用户

现如今手机这样的移动设备已经是人手一台了,但是汽车依然是以家庭为单位使用,不同的家庭成员对于汽车的使用存在着差异,比如空间、功能、影音风格等。因此,“智能汽车”需要具备千人千面的特性,能够适应不同的用户和场…

Linux系统编程(信号处理机制)

文章目录 前言一、中断,异常,信号的区别二、信号在Linux中的标识三、信号处理相关函数四、代码实验总结 前言 本篇文章我们来讲解信号的处理机制,信号处理在Linux操作系统中必不可少,这一点值得大家注意,信号又会与中…

mfc120u.dll丢失修复,mfc120u.dll缺失的解决方法

MFC120u.dll缺失的原因 当系统中缺少或损坏了MFC120u.dll文件时,就会出现"MFC120u.dll缺失"的错误提示。造成MFC120u.dll缺失的原因可能有以下几种情况: 1.文件删除或损坏:MFC120u.dll文件可能因为误删除、病毒感染、硬盘故障等原…

信创电子档案管理单机版系统之档案利用的功能介绍

专久智能信创电子档案管理单机版系统的档案利用,包括对电子档案的网上利用和对档案实体的借阅两种方式,用户对档案的利用都是通过 WEB 方式的档案网站实现的。 用户可以根据系统赋予的权限对电子档案目录进行检索查询,找到所需的档案目录&…

Hadoop单机部署和测试

Hadoop单机部署和测试 一.单机部署1.安装 JDK2.安装 HADOOP3.测试 一.单机部署 系统版本:cat /etc/anolis-release1.安装 JDK #!/bin/bashTOP_PATH$(pwd) JAVA_PATH/usr/local/java FILEls $TOP_PATH/ | grep jdk | grep .tar.gz | grep -v grep ## 清空历史版本 …

Git撤销已合并提交的多种姿势

#Git撤销已合并提交的多种姿势 在Git中,合并分支是一个常见的操作,但有时候可能会意外地将错误的提交合并到了主分支。这时候需要撤销已合并的提交并恢复到正确的状态。本文将介绍的是如何在Git中撤销已合并的提交,无论这个提交记录是最新的还…

2023-7-7-第十三式模板方法模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

python爬虫哪个库用的最多

目录 常用的python爬虫库有哪些 1. Requests: 2. BeautifulSoup: 3. Scrapy: 4. Selenium: 5. Scrapy-Redis: 哪个爬虫库用的最多 Scrapy示例代码 总结 常用的python爬虫库有哪些 Python拥有许多常用的爬虫库…