ミキサーリファレンス
スティックとジャイロから電線上のµ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 へ線形写像します。操舵指令はその後、プロファイル別の効きスライダー(aileronScale、elevatorScale、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 つの相補的な形で分割します:
- 猛度差動(
rudderFerocityRange):左は+猛度、右は−猛度— 両翼は異なるドウェルをとるが 共有反転位相(limiarShared)を保つため、旋回は純粋なロールトルクとなり、決して非同期になりません。 - 振幅差動(
rudderAmplitudeDifferential):左振幅 ×(1+Δ)、右 ×(1−Δ)— スロットル設定ストロークを中心とする対称発散。
角度は 0…180° にクランプされ、構成可能な包絡線 servoMinUs…servoMaxUs(既定 988…2012)でパルスへ変換されます:µs = min + 角度·(max−min)/180、さらに機能別トリム。グライド/フラップ中心オフセット(glideAngleDeg、flappingAngleDeg、±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 つのサブミキサー:
- モーター —
SF_MOTOR:アーム時、スロットル 0…1 が 1000…2000 µs へマップ;ディスアームまたはリンク断時は最小値に強制(モーター停止)。 - ラダー — 上記セクションと同一の式。
- 尾翼 — 2 ファミリー。古典的プロファイル(6/7)は独立エレベーターを駆動:
µs = 1500 + elevatorNorm·500 + pitchPID + trim。V テールプロファイル(3/4/5)は両チャンネルを 2 つの尾翼サーボへエレボン混合:
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 へ、ギアボックスモーターは最小値へ戻るため、機体は常に中立へ滑空します。
実践層の準備はできましたか? 波形チューニング チュートリアルはこれらの数値がスティック上でどう感じられるかを示し、 アーキテクチャ 記事は各ミキサーがパイプラインのどこにあるかを示します。