Comments (45)
from hakoniwa-px4sim.
プラント側のU(s) にP制御の式をラプラス関数で代入
左辺に微分項、右辺を積分項にしてみる。
ここからZ(s)を求めるとこうなる。
なので、積分要素と2次の遅れ要素の直列接続とみなせる
変形すると、
ここで、
とおくと、こうなる。
from hakoniwa-px4sim.
この三次式まで、僕の結果と整合します。この後、逆ラプラス変換して時間領域の式が出せています。計算メモのページ。
from hakoniwa-px4sim.
ここからは、方針(オーバーシュートx%までとか、整定時間何秒にしたいとか、外乱に強くしたいとか)で決めていくのだと思う。
from hakoniwa-px4sim.
from hakoniwa-px4sim.
例の制御ドローンレース,でも,PD 制御までです.
例の講義の秀逸なところは,早く収束するように攻めると,外乱に弱くなる.Kp, Kd を決める目安としては,「位相余裕」と「ゲイン余裕」を見ている.
from hakoniwa-px4sim.
構成
PID制御側は、MATLAB/Simulinkでモデリング&コード生成しても良いし、手コーディングして良い。
機体の動きは、Unityでリアルで見れるようにする。
from hakoniwa-px4sim.
課題など
- PID制御プログラムをモジュールとして組み込めるプラットフォームの検討が必要
- PID制御プログラムは、箱庭とは別の環境でビルドできる必要がある
- なんなら、MATLABで作ってコード生成してもらったものを組み込めるようにしたい
- 制作した制御プログラムはPX4に組み込むこともできるようにしたい
- なんなら、それを実機でそのまま使えたら素敵だ。
from hakoniwa-px4sim.
PID制御プログラムのモジュール化方法について
- 案1. ダイナミックローディングできるようにする
- 案2. スタティックリンクする?
案1でしょ。
作戦
- 案1のビルド環境を別のリポジトリで管理する。
- ビルド環境は dockerか何かで簡便な方法を採用する
- MATLABも視野に入れる
from hakoniwa-px4sim.
詳細設計
from hakoniwa-px4sim.
実装ステップ
- drone と controllerを接続して実行できるようにする
- Unityと連携できるようにする
- ローダーを作る
-
新しいリポジトリ現行リポジトリでcontrollerを作成できるようにする
from hakoniwa-px4sim.
残作業
- コンフィグファイルの設定がないケースのエラーハンドリング
- ローダブルモジュールがない場合のエラーハンドリング
- PID制御課題のREADMEを作る
- PID制御プログラム実行方法のREADMEを作る
- MATLAB連携に向けた対応内容を検討する
- その他あれば
MATLAB連携に向けた検討はこちらに移管する。
from hakoniwa-px4sim.
最後の作業
この環境を利用して、現行の物理モデルのホバリングを理論的に検討したPID制御モデルでコントロールできるようにして、箱庭ラボのブログで紹介する。
- 平鍋さんの2次伝達関数の理解
- 伝達関数から理論的にPIDの値を求めるやり方がないか調べる
- プログラム実装して複数のパラメータで同時に検証してみる。
- サンプルプログラムを自動作成するツールを作る。
- 一般公開する
- 箱庭ラボのブログで紹介する
from hakoniwa-px4sim.
平鍋さんの2次伝達関数の理解
対象の**方程式:
ここで、目標値との誤差の方程式にすると以下となる。
これをラプラス変換するとこうなって、
伝達関数にするとこうなって、2次遅れの伝達関数で表現できない。
from hakoniwa-px4sim.
伝達関数から理論的にPIDの値を求めるやり方がないか調べる
これではないか?
https://tajimarobotics.com/pid-stability-pid-control/
from hakoniwa-px4sim.
なるほど。2次遅れの伝達関数にして、理論的な方向で攻めようかと思いましたが、難しそうですね。
from hakoniwa-px4sim.
from hakoniwa-px4sim.
なるほど!
from hakoniwa-px4sim.
やっと理解できました。P制御と繋げた微分方程式作って、2次の伝達関数にしているのか!
https://speakerdeck.com/hiranabe/math-physics-and-dynamics-of-drone-in-hakoniwa?slide=13
from hakoniwa-px4sim.
まずは、P制御をベースにして、考えていきます。
from hakoniwa-px4sim.
プラント側
対象の**方程式:
これをラプラス変換するとこうなる。
from hakoniwa-px4sim.
P制御側
これをラプラス変換すると、
from hakoniwa-px4sim.
P制御とプラントモデルを含めた伝達関数の解釈
1/s は単位ステップ関数
from hakoniwa-px4sim.
2次遅れ要素の特徴
$\omega_n^{2} = \frac{K_p}{m}$ $\zeta = \frac{d}{2\sqrt{mK_p}}$ -
$d$ は、定数(0より大きい値)
- 過制動(
$\zeta > 1$ ) - 臨界制動(
$\zeta = 1$ ) - 不足制動(
$0 < \zeta < 1$ ) -
持続振動(d=0のケースなので対象外とする。$\zeta = 0$ )
from hakoniwa-px4sim.
特徴とパラメータ候補
特徴 | 条件 | Kp値 |
---|---|---|
過制動 | TODO | |
臨界制動 | TODO | |
不足制動 | TODO |
うーん、ダメだ。
from hakoniwa-px4sim.
再考:P制御側
重力を定常的に与えないと、相当不安定になるのではないか。
z軸はNED座標系。Rは正の値で指定する。
これをラプラス変換すると、
うーん、
from hakoniwa-px4sim.
再考:プラント側のU(s) にP制御の式をラプラス関数で代入
左辺に微分項、右辺を積分項にしてみる。
ここからZ(s)を求めるとこうなる。
なので、積分要素と2次の遅れ要素の直列接続とみなせる
変形すると、
ここで、
とおくと、こうなる。
from hakoniwa-px4sim.
この3次式まで僕の手計算と整合しています。
この後逆ラプラスして時間領域で式をだして、グラフ書きました。
from hakoniwa-px4sim.
ありがとうございます!
ここから、
2次遅れ要素の特徴
$\omega_n^{2} = \frac{K_p}{m}$ $\zeta = \frac{d}{2\sqrt{mK_p}}$ -
$d$ は、定数(0より大きい値)
- 過制動(
$\zeta > 1$ ) - 臨界制動(
$\zeta = 1$ ) - 不足制動(
$0 < \zeta < 1$ ) -
持続振動(d=0のケースなので対象外とする。$\zeta = 0$ )
特徴 | 条件 | 備考 |
---|---|---|
過制動( |
現実的にありえない? | |
臨界制動( |
現実的にありえない? | |
不足制動( |
|
機体パラメータ値から求める。
d=
m=
from hakoniwa-px4sim.
試してみた(その1)
目標値は -10m
from hakoniwa-px4sim.
試してみた(その2)
目標値は -10m
from hakoniwa-px4sim.
試してみた(その3)
目標値は -10m
from hakoniwa-px4sim.
所感
-
$\zeta$ が0に近づくに連れて、持続振動になることが再現された。 -
$\zeta$ が1に近づくと、不足振動になり、振動数およびオーバーシュート量が減るが、収束時間は非常に長い。約3時間かかる。
ここでD制御が必要なのか?
from hakoniwa-px4sim.
PD 制御
z軸はNED座標系。Rは正の値で指定する。
Rは定数なので、こうなる。
これをラプラス変換すると、
from hakoniwa-px4sim.
プラント側のU(s) にPD制御の式をラプラス関数で代入
左辺に微分項、右辺を積分項にしてみる。
ここからZ(s)を求めるとこうなる。
なので、積分要素と2次の遅れ要素の直列接続とみなせる
変形すると、
ここで、
とおくと、こうなる。
from hakoniwa-px4sim.
PDパラメータ探索の方針
from hakoniwa-px4sim.
ζ=0.707 のPD制御結果(その1)
Kp = 0.25
Kd = 2.234730306
1秒くらいで目標値に収束しました!
収束した数値は10mになってますが、おそらくシミュレーション誤差と思われます。
from hakoniwa-px4sim.
ζ=0.707 のPD制御結果(その2)
Kp = 0.0000025
Kd = 0.00607
こちらはKpが小さいので収束に時間がかかっていますし、収束値は10mになっていません。
from hakoniwa-px4sim.
現在、10m でホバリングしていない事に注意。グラフのvalue は、R-g/wn^2 (→10)の値であり。P制御だけでは定常位置偏差 g/wn^2 がずっと出てしまう。→I制御が必要、という流れ。
コメントありがとうございます!
Kiのほうも同様に数式化できないかやってみます。
あと、オーバーシュート値とオーバーシュートに達する時間も解析的に求められると評価がしやすいですよね。
from hakoniwa-px4sim.
PID 制御
z軸はNED座標系。Rは正の値で指定する。
Rは定数なので、こうなる。
これをラプラス変換すると、
from hakoniwa-px4sim.
プラント側のU(s) にPID制御の式をラプラス関数で代入
左辺に
from hakoniwa-px4sim.
Kiが入ると、2次遅れにならないので、これまでの解き方では難しそう。
from hakoniwa-px4sim.
現時点の課題まとめと今後の方針
- PD制御の計算結果が怪しいかもしれない
- I制御を含めた解析は難しそう
I制御の解析は一旦ペンディングします。
PD制御の計算結果は再度レビューします。
その上で、PD制御のパラメータをいくつか決めて、I制御パラメータを微調整する探索をやって、Unityでビジュアライズするところをゴールにしようと思います。
from hakoniwa-px4sim.
森さんのやり方だと,一巡伝達関数でなく,閉ループのステップ応答を直接求めるようになっていて,制御の通常コースの,
- P(s) を与えて,C(S) を設計する課題.
2.そのために,「一巡伝達関数=C(s)P(s)」が分かると閉ループは「W=CP/(1+CP)」である. - W の条件(外乱につよい,すばやく収束する,などなど)がC(S)設計への要求となる.
- C(S)設計のために,「WでなくCPの特性を見て,要求を満たすCを設計」(CPのボード線図での位相余裕とゲイン余裕,ナイキスト線図上の,(-1,0)点と軌跡の関係)
という手順が使えなくて,教材としては制御の教科書にうまく乗らないのがちょっと残念に思いました.何かうまくできるといいのだけど.
from hakoniwa-px4sim.
説明ありがとございます!
まだまだ勉強不足なもので、フィードバック制御側の理解を進めたいと思います。
from hakoniwa-px4sim.
Related Issues (20)
- 機体パラメータのマルチインスタンス化 HOT 1
- ログファイルのマルチインスタンス化 HOT 2
- PX4受信スレッドのマルチインスタンス化 HOT 2
- PX4送信処理のマルチインスタンス化 HOT 1
- シミュレーションコントロール処理のマルチインスタンス化 HOT 2
- マルチインスタンスの全体統合 HOT 1
- MATLAB向けディレクトリの再整備
- # プラント側のU(s) にP制御の式をラプラス関数で代入 HOT 4
- Visual Studioでhakoniwa-px4simの箱庭側をビルドできるようにする HOT 4
- 外部から機体をコントロールできる制御機能を作る HOT 6
- PX4を使わずに、Pythonから機体を直接コントロールできるようにする HOT 12
- Next Release v2.1.0 Items
- PID制御お試し環境の一般公開
- 複数機体対応の一般公開
- センサモデル(ジャイロセンサ)お試し環境の一般公開
- Pythonでのドローン操作機能の一般公開
- ネイティブWindows対応の一般公開
- Mac向けドキュメントの細かい足りないところ HOT 3
- 現状のPython APIで駆動するフライト制御をもっとキビキビ動くようにしたい HOT 10
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from hakoniwa-px4sim.