Bu C99 Kütüphanesi Gerçekte Ne Yapar?
- • ESC 30x EMI Sıçraması Kırpma: Motor sürücülerinden IMU hattına binen yüksek voltajlı ark darbelerini 0 faz gecikmesiyle (
clip * tanhf(x/clip)) kırpar. - • Quadrature Harmonik Faz Kilidi (PLV): Motor devrine ($f_0$ ve $2f_0$) kilitlenerek pervane ucu kırılması veya rulman dağılmasını gürültü altında yakalar.
- • 4-Motor PWM Karşı-Faz Dengeleme: İtki kaybeden motoru (
M1..M4) tespit ettiği anda sağlam motorlara mikro-saniye (pwm_delta_us[4]) dengeleme ofseti üretir.
Mühendislik Sınırları (Ne Yapmaz?)
- • Görüntü İşleme Yapmaz: Kamera, video veya optik hedef takibi içermez; tamamen 1D IMU jiroskop (
gx, gy, gz) ve ESC RPM telemetrisi üzerinde çalışır. - • Tam Otopilot Değildir: GPS rota planlaması yapmaz; mevcut PX4, ArduPilot veya STM32 uçuş kontrolcünüzün 1000 Hz IMU okuma döngüsüne 3 satır kodla eklenen 564 baytlık alt-seviye denge refleksidir.
Canlı C99 Binary Giriş Parametreleri
Hızlı Test Senaryoları:
Motor Temel Frekansı (f0):82.0 Hz (2f0: 164 Hz)
Pervane Hasar / İtki Kaybı Oranı:%45
Hasarlı / Dengesiz Motor Seçimi:Motor #2
ESC Elektriksel Ark / EMI Darbesi:24.0 rad/s
Sensör Gürültü Standart Sapması:0.85 rad/s
Kendi IMU Logunu (.CSV) Test EtÖrnek CSV İndir ↗
MYCA Drone Reflex C99 Core
0x03 KRİTİK MOTOR #undefined İTKİ KAYBI & PWM DENGELEMEStatik Bellek (RAM)
564 Bayt
malloc = 0 (Sıfır Heap)
Örnek Başına Süre
...
Harmonik Faz Kilidi (PLV)
...
Kırpılan Ark: 0 darbe
IMU RMS Hata Düşüşü
...
rad/s (Ham vs MYCA)
1. IMU Gyro Roll Akışı (Ham Gürültülü/Ark Sıçramalı vs. MYCA C99 Çıkışı)
Ham Gyro (gx) MYCA Temiz Gyro
2. Quadrature Harmonik Faz Kilidi (PLV [0.00 - 1.00] • Eşik: 0.38)Rezonans Yok (Nominal)
3. Otonom Quad-X Motor PWM Dengeleme Çıktısı (
out.pwm_delta_us[4])Tespit Edilen Hasarlı Motor: Yok (Tüm Motorlar Sağlam)M1 (Ön-Sağ)
0 µs
Nominal (1500 µs)
M2 (Arka-Sol)
0 µs
Nominal (1500 µs)
M3 (Ön-Sol)
0 µs
Nominal (1500 µs)
M4 (Arka-Sağ)
0 µs
Nominal (1500 µs)
C99 Başlık Dosyası (myca_drone_reflex.h) & PX4 / ArduPilot 3-Satır Entegrasyon Kodu
// include/myca_drone_reflex.h
#ifndef MYCA_DRONE_REFLEX_H
#define MYCA_DRONE_REFLEX_H
#include <stdint.h>
#include <stdbool.h>
#define MYCA_DRONE_PLV_WINDOW 64
typedef enum {
MYCA_FLIGHT_NOMINAL = 0,
MYCA_FLIGHT_EMI_SPIKE_CLAMP = 1,
MYCA_FLIGHT_PROP_IMBALANCE = 2,
MYCA_FLIGHT_MOTOR_LOSS_CRIT = 3
} myca_flight_status_t;
typedef struct {
float f0_norm, f1_norm, alpha_leak, clip_limit, plv_threshold;
float I0, Q0, I1, Q1;
float plv_cos_buf[MYCA_DRONE_PLV_WINDOW];
float plv_sin_buf[MYCA_DRONE_PLV_WINDOW];
float plv_sum_cos, plv_sum_sin;
uint16_t plv_idx;
uint32_t sample_seq;
} MycaDroneState; /* Toplam: 564 Bayt Statik RAM (0 Malloc) */
typedef struct {
myca_flight_status_t status;
float clean_gyro_roll, clean_gyro_pitch, clean_gyro_yaw;
float plv_coherence, resonance_score;
uint8_t faulty_motor_id; /* 0 = Yok, 1..4 = Hasarlı Motor */
int16_t pwm_delta_us[4]; /* M1..M4 PWM Dengeleme (µs) */
bool emi_clamped;
} MycaDroneReflexOut;
void myca_drone_init(MycaDroneState *st, float sample_rate_hz, float motor_freq_hz);
void myca_drone_step(
MycaDroneState *st,
float gx_rad_s, float gy_rad_s, float gz_rad_s,
const uint16_t motor_rpm[4],
MycaDroneReflexOut *out
);
#endif// examples/px4_ardupilot_hook_demo.c
#include "myca_drone_reflex.h"
/* Statik BSS bellekte 564 Bayt (Heap / malloc kullanılmaz) */
static MycaDroneState g_myca_imu_state;
void px4_fast_imu_init(void) {
/* 1000 Hz IMU döngüsü, 82.0 Hz nominal motor temel frekansı */
myca_drone_init(&g_myca_imu_state, 1000.0f, 82.0f);
}
void px4_fast_imu_1khz_hook(float gx, float gy, float gz, const uint16_t esc_rpm[4]) {
MycaDroneReflexOut reflex;
myca_drone_step(&g_myca_imu_state, gx, gy, gz, esc_rpm, &reflex);
/* 1. ESC EMI darbelerinden arındırılmış temiz Gyro'yu EKF2 / PID'ye gönder */
ekf2_feed_clean_gyro(reflex.clean_gyro_roll, reflex.clean_gyro_pitch, reflex.clean_gyro_yaw);
/* 2. Pervane kırılması veya motor kaybı varsa PWM dengeleme ofsetini uygula */
if (reflex.status == MYCA_FLIGHT_MOTOR_LOSS_CRIT) {
for (int m = 0; m < 4; m++) {
pwm_motor_set_us(m, current_pwm_us[m] + reflex.pwm_delta_us[m]);
}
}
}