还好没飞
啊,各位大佬好,作为科创新人,第一次发帖,请多多指教
做了一个火箭飞控,还有些问题详细教程及源码,我会在下个帖子公布。我见气压开伞及姿态开伞,我看很多大佬都公布过了,迟迟由于飞控这块儿没动静,所以我发一个帖。
众所周知飞控是,有控火箭的心脏,火箭飞的飞不直,就得靠飞控。
所需准备的零件
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;
是不是写的非常的屎。
由于自己画的板还有些问题,呃,给大家附一张图
由一个mini接口还有type c组成,主要是怕type c用不了,所以画了个mini接口,但经过后续验证发现type c能使用,而且工作非常稳定
然后再附一个飞控的工作视频
mmexport1698140560589.mp4 点击下载
这里用的黑曜石舵机,Mg90,非常的垃圾,延迟还是比较大的(主要是没钱买更好的)…………
飞控的大概基本工作原理就说到这里,第一次发帖,大家多多指教一下
其实做鸭翼火箭是可以弄加上PID控制的,
如果用简单的map映射可能会导致比例错误,建议加上微分形成PD控制,也足以稳定姿态
又一个造飞控的, 感觉AVR单片机的算力 + I2C接口的MPU6050 , 对于F450这种缓慢的无人机都已经比较吃力了, 稍微快一点穿越机也至少用了F3这种。而火箭这种速度比飞得最快的穿越机还快
现阶段各种商品穿越机飞控算力也足够了, 如果要实用化的话, 不如直接用F7之类的飞控硬件, 传感器齐全,接口丰富, 参考BF的代码,重写飞控代码, 把重心投入到软件的开发上来
又一个造飞控的, 感觉AVR单片机的算力 + I2C接口的MPU6050 , 对于F450这种缓慢的...
如果用stm32呢,我看网上有些人用这东西做穿越机飞控,换上传输速率较高的姿态传感器应该也行吧
如果用stm32呢,我看网上有些人用这东西做穿越机飞控,换上传输速率较高的姿态传感器应该也行吧
F3飞控就是STM32F303, F4飞控是STM32F405, F7是STM32F745, 陀螺仪建议选用SPI接口的, MPU
6500, BMI270这些, 另外为了测高度, 气压也是需要带的, GPS用UART连接,遥测数传也是用串口
楼主大概什么时候开源呢,想拿来参考一下
还有楼主做的这个适配的火箭直径多少
200字以内,仅用于支线交流,主线讨论请采用回复功能。