Open tmori opened 8 months ago
takeoff指示から、1秒程度で目標の高さでホバリングしているので、ここは問題ない。
着地は、10秒くらいかかっている。若干遅い。 ただ、水平移動に比べたら、そんなに気にならないので、一旦、放置する。
$$ \begin{array}{llll} \dot{u_e} = &-\frac{T}{m}(\cos{\phi}\sin{\theta}\cos{\psi} + \sin{\psi}\sin{\phi}) & &- \frac{d}{m}u_e \ \dot{v_e} = &-\frac{T}{m}(\cos{\phi}\sin{\theta}\sin{\phi} - \sin{\phi}\cos{\psi}) & &-\frac{d}{m}v_e \ \dot{w_e} = &-\frac{T}{m}(\sin{\phi}\cos{\theta}) &+g &-\frac{d}{m}w_e \end{array} $$
ひとまず、前進の水平移動のみを想定したいので、 $\dot{u_e}$ のみに着目。 $\phi$ = 0°、 $\theta$ = $\omega t$ ° 、 $\psi$ = 0° とおく。
代入して、速度を位置の表現にすると:
$\ddot{x} = -\frac{u(t)}{m}\sin{\omega t} - \frac{d}{m}\dot{x}$
ラプラス変換しやすいようにすると:
$\ddot{x} = -\frac{u(t)}{m} \sin{\omega t} u_s(t) - \frac{d}{m}\dot{x}$
$s^{2}X(s) = -\frac{U(s)}{m} \frac{\omega}{s^{2}+\omega^{2}} - \frac{d}{m}sX(s)$
$U(s)$ は、推力だけど、現状、垂直方向のPID制御でしかコントロールできてない。 水平移動時にも推力をコントロールできるようにしなければならないのではないか。
ここに、すごいいい記事みつけました。PX4の位置制御の方法です。 https://qiita.com/daisuke-iwakura/items/a9257b3f0f75659c3d09
今の森さん側の作りを変えずに、ざっくり要点を言うと、
入力のインタフェースをラジコンにする方法もあり。
アーキテクチャ:
作業タスク出し:
この辺りのクラス設計を見直したい。
※上記で Kr は省く(Ω->D計算の時に後で割る)。
(9/5/2024 平鍋修正)
[Ω^2] = A^-1 M^-1 U
から、Ωi^2 を求める。
Ωi^2の結果からΩiを求める。±√となるが、PWM値は0-1なので、プラスのみ使用する。
ここで、Ωi = Kr Di なので、
Di = Ωi/Kr とする
上記方針だと、Ωi^2 < 0 なる解が出ることがある(逆回転トラストを発生させて、急激に回転させようとする)。そこで、線形化した解を用いて、ホバー時回転数の -50% を下限とするなどをトライ。
[Ωi0 ΔΩi] = (1/2) A^-1 M^-1 ΔU
から、ΔΩi を求める。
Ωi = Kr Di の近似(一時遅れなしに直でステップ応答する近似)を使い、Di = Ωi/Kr とする
3段階に分けて実装する。
Mixerはまだ未完成ではありますが、今後はこちらで管理します。
https://github.com/toppers/hakoniwa-px4sim/issues/178#issuecomment-2073704541
PWMの計算方法
Ω = A^-1 M^-1 U から、Ωi^2 を求める。 Ωi^2の結果からΩiを求める。±√となるが、PWM値は0-1なので、プラスのみ使用する。
ここで、Ωi = Kr Di なので、
Di = Ωi/Kr
となる
上記は、ラプラス変換での式、Di(s) = (Ktr/(1+s Tr)) * Ωi (式2.48)なので、線形化が必要。 再考中。
課題
水平移動が極めて遅い。目的地に到着するのに100秒程度かかってしまう。少なくとも10倍程度にしたい。
目指したいこと
水平移動時のプラントモデルの伝達関数をある程度同定した形で、過渡特性のパラメータをベースにして、理論的にパラメータを求めたい。
参考情報