控制火箭垂直上升,鸭翼火箭飞控设计理念与制作
就是氧化铁喽2023/10/24喷气推进 IP:河北

啊,各位大佬好,作为科创新人,第一次发帖,请多多指教

做了一个火箭飞控,还有些问题详细教程及源码,我会在下个帖子公布。我见气压开伞及姿态开伞,我看很多大佬都公布过了,迟迟由于飞控这块儿没动静,所以我发一个帖。

众所周知飞控是,有控火箭的心脏,火箭飞的飞不直,就得靠飞控。

所需准备的零件

nano开发板一块

若干杜邦线

Mpu6050姿态传感器

四个舵机

这里最好建议还要准备一块洞洞板,方便连接,要不然把三根线剪掉,然后重新再接上,太难受了,后续还不好改动。

整个飞控代码其实就是个屎山代码(由于作者不是太会,只能凑合着用了,大佬们还得多多指教一下)

根本没有什么算法,这里就是运用了一下卡尔曼滤波。大家说一下代码的概述

代码是由ardino也就是c加加程序所组成

就是检测到当x轴大于多少度时,让舵机向哪个方向转,当检测到倾角大于80度时开伞。

下面是详细部分啊

屎山代码的大概讲解

在setup函数中,首先通过XXXXXXXXXgin(115200)初始化串口通信,并尝试初始化MPU6050传感器。如果初始化失败,则会在串口输出"无法读取MPU6050"并进入死循环。同时,还设置了开伞引脚为输出模式。

接下来,通过XXXXXXtAccelerometerRange和XXXXXXtGyroRange函数,将加速度计的量程设置为+-8G,将陀螺仪的量程设置为+-500度/秒。然后,通过XXXXXXtFilterBandwidth函数将滤波器带宽设置为21Hz(卡尔曼滤波)。

在延迟300毫秒之后,通过XXXXXXXXXtach(7)等语句将舵机连接到对应的引脚,并将舵机的初始角度设置为0。

在loop函数中,首先通过XXXXXXtEvent函数获取新的传感器事件,包括加速度和角速度。然后,通过XXXXceleration.x、XXXXceleration.y和XXXXceleration.z获取加速度计的x、y和z方向的值。

接下来,通过一系列的if语句判断MPU6050的倾斜方向。例如,当x的值在0到10之间,且y的值在-4到4之间时,表示向上倾斜。此时,通过map函数将x的值从0到10映射到舵机的角度范围90到180,并将对应的角度值写入servo1。同时,将x的值从0到10映射到舵机的角度范围90到0,并将对应的角度值写入servo2。

类似地,根据x和y的值判断向下倾斜、向右倾斜和向左倾斜的情况,并分别控制对应的舵机(鸭翼)角度。

最后,根据x和y的值判断是否需要输出高电平(开伞)。当x和y的值在-8到8之间时,LED灯会保持关闭状态,如果大于的话则开伞;



我附上一段儿源代码,由于细节优化的还不是太好,还有一些问题,由于惯性大的话会漂移,我就简单的附上一些滤波的内容。

if (!mpu.begin()) {
    Serial.println("检出mpu6050");
    while (1) {
      delay(10);
    }
 
      pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW);
  }
  Serial.println("未检出mpu6050");
 
  // 将加速度计范围设置为 +-8G
  mpu.setAccelerometerRange(MPU6050_RANGE_8_G);
 
  // 将陀螺仪范围设置为 +- 500 度/秒
  mpu.setGyroRange(MPU6050_RANGE_500_DEG);
 
  // 将滤波器带宽设置为 21 Hz
  mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
 
  delay(100);
  servo1.attach(7);
  servo2.attach(6); 
  servo3.attach(5); 
  servo4.attach(4); 
 
  servo1.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
}
 
void loop() {
  //使用读数获取新的传感器事件
  sensors_event_t a, g, temp;
  mpu.getEvent(&a, &g, &temp);
 
//acceleration就是加速度的意思,
  x = a.acceleration.x;
  y = a.acceleration.y;
  z = a.acceleration.z;

是不是写的非常的屎。

由于自己画的板还有些问题,呃,给大家附一张图


mmexport1698126051863.jpg

由一个mini接口还有type c组成,主要是怕type c用不了,所以画了个mini接口,但经过后续验证发现type c能使用,而且工作非常稳定

然后再附一个飞控的工作视频



mmexport1698140560589.mp4 点击下载

这里用的黑曜石舵机,Mg90,非常的垃圾,延迟还是比较大的(主要是没钱买更好的)…………

飞控的大概基本工作原理就说到这里,第一次发帖,大家多多指教一下




来自:航空航天 / 喷气推进动手实践:实验报导
10
1
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
就是氧化铁喽 作者
1年1个月前 IP:河北
926568
引用smith发表于3楼的内容
又一个造飞控的, 感觉AVR单片机的算力 + I2C接口的MPU6050 , 对于F450这种缓慢的...

如果用stm32呢,我看网上有些人用这东西做穿越机飞控,换上传输速率较高的姿态传感器应该也行吧



引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
就是氧化铁喽作者
11个月8天前 IP:河北
927760
引用白沫0001发表于2楼的内容
其实做鸭翼火箭是可以弄加上PID控制的,如果用简单的map映射可能会导致比例错误,建议加上微分形成P...


感谢指导!!目前正在去做,算法什么的还在学习

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
就是氧化铁喽
进士 机友
文章
8
回复
48
学术分
0
2023/06/25注册,8时4分前活动

无限进步!→北域喷气推进←

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:河北
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}