ミキサーリファレンス

スティックとジャイロから電線上のµsまで:選択可能な全ミキサーの完全な幾何 — 翼軸、ラダーブレンド、エレボン、トリム、クランプ。

このページは src/lib/Ornithopter/Ornithopter.cpp のミキサー層と OrnithopterConfig.h のプロファイルシステムを解説します。周辺アーキテクチャについては、まず アーキテクチャ記事 ;パルスタイミングとトリム範囲については サーボカーネル 記事を参照してください。

サーボ機能タグ

全ミキサーの全出力は ServoFunc タグでインデックスされた _f[] へ書き込まれる µs 値です。タグは輸送手段 — 信号が 何を意味するかを示し、どこに配線されるかは示しません:

タグ 名前 意味
0 SF_NONE 予約済み — 機能なし(先頭の PWM スロットは BOOT と I2C 用に空けてある)
1 / 2 SF_LEFT_WING / SF_RIGHT_WING 前方羽ばたき翼(波形カーネル)
3 SF_RUDDER 頭部/冠舵(波形)またはフィン舵(ギアボックス)— ヨー + ロール混合
4 SF_MOTOR ブラシレス ESC スロットル(ギアボックス・カーネルのみ)
5 / 6 SF_VTAIL_LEFT / SF_VTAIL_RIGHT V テール面、エレボン混合(ギアボックス・カーネル)
7 SF_ELEVATOR 従来型の独立エレベーター(ギアボックス・プロファイル 6/7)
8 / 9 SF_BACK_LEFT_WING / SF_BACK_RIGHT_WING 4 翼機の後翼ペア(前翼ペアの鏡像、独自トリム)

実行時プロファイルfuncMap を提供します:PWM 出力インデックス → ServoFunc を対応付ける配列です。最初の 3 スロット(PWM 1…3)は常に SF_NONE — BOOT ストラップと I2C バスに属するため — 実際のサーボ機能は PWM インデックス 3 から始まります(ファームウェアのコメントに明記:インデックス 3 = CH4、4 = CH5、5 = CH6)。

8つのミキサープロファイル

8 つのミキサープロファイルが存在します。プロファイル 0–2 は 波形カーネル(羽ばたき翼)、プロファイル 3–7 は ギアボックスカーネル(モーター + 尾翼)を駆動します:

# プロファイル カーネル サーボ funcMap (PWM 3 · 4 · 5)
0 SERVO_2WING 波形 2 左翼 · 右翼 · —
1 SERVO_2WING_1RUD 波形 3 左翼 · 右翼 · ラダー
2 SERVO_4WING 波形 4(後右は後左の鏡像を共有) 左翼 · 右翼 · 後左翼
3 GEARBOX_2VTAIL_1RUD ギアボックス 3 ラダー · V テール左 · V テール右
4 GEARBOX_1MOT_2VTAIL ギアボックス 3 モーター · V テール左 · V テール右
5 GEARBOX_1MOT_2VTAIL_1RUD ギアボックス 4(V テール右が左の鏡像を共有) ラダー · モーター · V テール左
6 GEARBOX_1ELE_1RUD ギアボックス 2 ラダー · エレベーター · —
7 GEARBOX_1MOT_1ELE_1RUD ギアボックス 3 ラダー · モーター · エレベーター

選択:ビルドフラグ MIXER_PROFILE(旧 ORNITHOPTER_GEARBOX=1 → プロファイル 5)、その後 WebUI で実行時に上書き可能(setOrnithopterProfile)。カーネル判定は単に activeProfile ≥ GEARBOX_2VTAIL_1RUD

翼軸ミキシング(波形カーネル)

全チャンネル値は正規化されてミキサーに入ります:_crsfToNorm が生の 172…1811 ウィンドウを −1…+1 へ線形写像します。操舵指令はその後、プロファイル別の効きスライダー(aileronScaleelevatorScale、0–100%)× ±60°(ORNI_STEER_MAX_DEG)でスケールされます。

鏡像幾何。 翼サーボは鏡像マウントのため、コモンモード項と差動項の意味が入れ替わります。コードはしたがってエルロン(ロール)を コモン として扱い — 両翼に加算されて差動の 物理的 たわみになり — エレベーター(ピッチ)をコード上 差動 として扱い、物理的コモンたわみになります。角度方程式は ORNI_NEUTRAL_ANGLE_DEG = 100° と、偏差項にのみ掛かる 2× 乗数で:

angleLeft  = NEUTRAL + (aileron + elevator + flapCentre − degL) · 2
angleRight = NEUTRAL + (aileron − elevator − flapCentre + degR) · 2

flapping:  degL/R = amplitudeL/R · shapedWave(rawPhase, ferocityL/R, …)
glide:     degL = degR = 0 → static glide offset takes over

degL/degR は左右翼の瞬間ストロークたわみで、それぞれ自身の振幅と猛度成形波の積です。エレベーター上げは ダウンストローク を、下げは アップストローク を強めます(非対称猛度)。ヨーは翼を 2 つの相補的な形で分割します:

角度は 0…180° にクランプされ、構成可能な包絡線 servoMinUs…servoMaxUs(既定 988…2012)でパルスへ変換されます:µs = min + 角度·(max−min)/180、さらに機能別トリム。グライド/フラップ中心オフセット(glideAngleDegflappingAngleDeg、±15°)は各分岐に静的項として入ります — したがってグライド中心とフラップ中心を飛行プロファイルごとに独立チューニングできます。

ラダーミキシング(両カーネル)

ラダーミキサーは 両カーネルで一字一句共有されます — 1 つの式、2 つの機体:

mix  = rudderNorm · rudderYawWeight  +  aileronNorm · rudderRollWeight
mix  = clamp(mix, −1 … +1)
µs   = 1500 + mix · 500            (rudder centre ± 500 µs)
       + gyroRudderCorrection       (Zephyrus, when enabled)
       + servoTrimUs[SF_RUDDER]

既定値:rudderYawWeight = 65%rudderRollWeight = 35%(WebUI で実行時調整、バックアップごとに保存)。ラダーのロール結合により、翼の重い翼竜がヨーストリングの曲芸なしに協調旋回を保てます。ヘッドラダーがロールで攻撃的すぎる場合はロール重みを下げてください。

ギアボックス尾翼・エレボンミキシング

ギアボックス・カーネルは毎ティック・ステートレスに動作します。その 3 つのサブミキサー:

VtailLeft  = 1500 + (aileron + elevator)·scale + rollPID + pitchPID + trimL
VtailRight = 1500 + (aileron − elevator)·scale − rollPID + pitchPID + trimR
scale = 500 µs;  both aileron/elevator sums clamped to −1…+1 first

ギアボックス・カーネルでは、Zephyrus が ロールとピッチの両方の PID 補正を尾翼サーボへ注入します(ロールは逆位相、ピッチはコモンモード)、各々 ±250 µs(ZEPHYR_GEARBOX_CLAMP_US)にハードクランプ。したがってジャイロのグリッチは尾翼サーボを揺らしても、決して停止させません。

ゼピュロス注入、トリム&フェイルセーフ

カーネルと軸に応じて 3 つの異なる注入点があります:

波形カーネル ギアボックス・カーネル
ラダー/ヨー 冠舵 µs に gyroRudderCorrection を加算 フィン舵 µs に gyroRudderCorrection を加算
ロール(エルロン) —(波形翼はロール PID を持たない) gyroAileronCorrection、V テールで逆位相、±250 µs にクランプ
ピッチ(エレベーター) —(Zephyrus レイヤーで波変調として注入) gyroElevatorCorrection、コモンモード、±250 µs にクランプ

トリムと制限。 各関数には符号付きのサーボ別トリム(servoTrimUs[tag]、既定 0、±300 µs)が最後に加算され、すべての値は _clampServo — すべてに優先する絶対 500…2500 µs の安全クランプ — を通ります。フェイルセーフやリンク断時、全関数は 1500 µs へ、ギアボックスモーターは最小値へ戻るため、機体は常に中立へ滑空します。

実践層の準備はできましたか? 波形チューニング チュートリアルはこれらの数値がスティック上でどう感じられるかを示し、 アーキテクチャ 記事は各ミキサーがパイプラインのどこにあるかを示します。