Comments (33)
微分方程式を除いて,線形に回転数とThrustをリンクさせるモデルです.
thrust_dynamics.hpp の body_thrust と body_torque の呼び出しをそれぞれ,body_thrust_linear, body_torque_linear に変更してください.また,Kr, Tr はそのまま,A,B の値を回転数分の1(1/8000) くらいにして呼び出してください.新しくパラメータを A2, B2 とかコンフィグ追加がいいと思います.
パラメータ名も変更してコミットしました.
from hakoniwa-px4sim.
ありがとう。こちらはKr は利用前提で作りました。(ロータの微分方程式は変えていない)。パラメータとして必要です。
from hakoniwa-px4sim.
8000分の1の話は、2乗を1乗-linearにしたのでだいたい、標準回転数分くらいズレるだろう、の予想の数値です。
from hakoniwa-px4sim.
rotor_omega_acceleration
は、そのまま利用できることをやっと理解できました。
の指数関数部分をテーラー展開して1次微分の項だけ取れば、こちらの数式と一致するということですね。
from hakoniwa-px4sim.
from hakoniwa-px4sim.
A2 の求め方
理想状態で、ホバリングするT_0:
dot_w = -T/m + g = 0
→
T_0=g*m
ホバリングするlinearのTは、
T_0=4 * A2 * w_0
なので、A2は、
A2 = T_0 / (4 * w_0)
→
A2 = g*m / (4 * w_0)
となる。
g=9.81, m=0.1kg, w_0=4000rpmとした場合、
A2=0.0000613125
from hakoniwa-px4sim.
これ,PID でうまく行っているので,プラント側はクローズでどうでしょう?
from hakoniwa-px4sim.
linear用のパラメータ仕様を検討しました。
rotor
パラメータ | 利用有無 | linearの設定値 | 備考 |
---|---|---|---|
Tr | O | 0.1 | そのまま利用 |
Kr | O | 8000 | そのまま利用 |
rpmMax | x | - | 利用しない(あっても無視する) |
vendor_name | O | linear | 新規追加、"nonlinear" or "linear" |
thruster
パラメータ | 利用有無 | linearの設定値 | 備考 |
---|---|---|---|
rotorPositions | O | 現行通り | そのまま利用 |
HoveringRpm | x | - | 利用しない(あっても無視する) |
parameterB | x | - | 利用しない(あっても無視する) |
parameterJr | x | - | 利用しない(あっても無視する) |
parameterB_linear | O | 1/8000 | 新規追加 |
parameterA_linear | O | 1? | 新規追加 |
vendor_name | O | linear | 新規追加、"nonlinear" or "linear" |
from hakoniwa-px4sim.
ありがとう。こちらはKr は利用前提で作りました。(ロータの微分方程式は変えていない)。パラメータとして必要です。
了解です!修正しました。
from hakoniwa-px4sim.
8000分の1の話は、2乗を1乗-linearにしたのでだいたい、標準回転数分くらいズレるだろう、の予想の数値です。
了解です。設定値も追加しました。
from hakoniwa-px4sim.
コンフィグ
"droneDynamics": {
"physicsEquation": "BodyFrame",
"collision_detection": false,
"airFrictionCoefficient": 0.0001,
"inertia": [ 0.0000625, 0.00003125, 0.00009375 ],
"mass_kg": 0.1,
"body_size": [ 0.1, 0.1, 0.01 ],
"position_meter": [ 0, 0, 0 ],
"angle_degree": [ 0, 0, 0 ]
},
"rotor": {
"Tr": 0.1,
"Kr": 6000,
"rpmMax": 8000
},
"thruster": {
"vendor": "linear",
"rotorPositions": [
{"position": [ 0.05, 0.05, 0 ], "rotationDirection": 1.0 },
{"position": [ -0.05, -0.05, 0 ], "rotationDirection": 1.0 },
{"position": [ 0.05, -0.05, 0 ], "rotationDirection": -1.0 },
{"position": [ -0.05, 0.05, 0 ], "rotationDirection": -1.0 }
],
"parameterA_linear": 0.0000613125,
"parameterB_linear": 0.000001666666667
},
from hakoniwa-px4sim.
調整結果
B2ですが、1/Kr だと、機体の振動が激しく、途中で変な動きになりました。
なので、0.01/Krにしたところ、安定して移動することを確認しました。
B2は、小さい方が安定することがわかってきましたので、どのあたりが良さげなパラメータになりそうな調査してみます。
from hakoniwa-px4sim.
from hakoniwa-px4sim.
では、このパラメータセットを試してみます。
Kr=8000
B2=1/8000
from hakoniwa-px4sim.
あ,ごめんなさい,前動いていた parameterB * (1/8000) => parameterB_linear の意味です.
from hakoniwa-px4sim.
あ,ごめんなさい,前動いていた parameterB * (1/8000) => parameterB_linear の意味です.
はい、それで実施してみました。が、、姿勢角の値が発散しちゃいましたね。。
(Rx, Ry, Rz) = (inf,nan,inf)
from hakoniwa-px4sim.
Kr = 前動いていた Kr の値で.
from hakoniwa-px4sim.
Kr = 前動いていた Kr の値で.
ということは、
Kr=6000
parameterB_linear=1/8000
ですかね?
from hakoniwa-px4sim.
30.0e-10,
from hakoniwa-px4sim.
30.0e-10 x 8000 の値を使ってみます。
from hakoniwa-px4sim.
パラメータ設定の目安
前回安定していたパラメータセット:#117 (comment)
B=3.00E-10
- Kr: 8000(固定)
- Aは固定(rpm4000でホバリング)
- Tr: 00.5-0.15 (2-20倍あればOK)
- B_linearは、前回の値の8000倍くらい: 2.40E-06
上記で、以下のパラメータセットだとシミュレーション動きました。
Kr=8000
Tr=0.05
A2=0.0000613125
B2=2.40E-06
from hakoniwa-px4sim.
ベースパラメータ
{
"simulation": {
"lockstep": true,
"timeStep": 0.003,
"logOutputDirectory": "./",
"logOutput": {
"sensors": {
"acc": true,
"gyro": true,
"mag": true,
"baro": true,
"gps": true
},
"mavlink": {
"hil_sensor": true,
"hil_gps": true,
"hil_actuator_controls": true
}
},
"mavlink_tx_period_msec": {
"hil_sensor": 3,
"hil_gps": 3
},
"location": {
"latitude": 47.641468,
"longitude": -122.140165,
"altitude": 121.321,
"magneticField": {
"intensity_nT": 53045.1,
"declination_deg": 15.306,
"inclination_deg": 68.984
}
}
},
"components": {
"droneDynamics": {
"physicsEquation": "BodyFrame",
"collision_detection": false,
"airFrictionCoefficient": 0.0001,
"inertia": [ 0.0000625, 0.00003125, 0.00009375 ],
"mass_kg": 0.1,
"body_size": [ 0.1, 0.1, 0.01 ],
"position_meter": [ 0, 0, 0 ],
"angle_degree": [ 0, 0, 0 ]
},
"rotor": {
"Tr": 0.05,
"Kr": 8000,
"rpmMax": 8000
},
"thruster": {
"vendor": "linear",
"rotorPositions": [
{"position": [ 0.05, 0.05, 0 ], "rotationDirection": 1.0 },
{"position": [ -0.05, -0.05, 0 ], "rotationDirection": 1.0 },
{"position": [ 0.05, -0.05, 0 ], "rotationDirection": -1.0 },
{"position": [ -0.05, 0.05, 0 ], "rotationDirection": -1.0 }
],
"parameterA_linear": 0.0000613125,
"parameterB_linear": 2.40E-06
},
"sensors": {
"acc": {
"sampleCount": 1,
"noise": 0.03
},
"gyro": {
"sampleCount": 1,
"noise": 0.01
},
"mag": {
"sampleCount": 1,
"noise": 0.03
},
"baro": {
"sampleCount": 1,
"noise": 0.01
},
"gps": {
"sampleCount": 1,
"noise": 0
}
}
}
}
from hakoniwa-px4sim.
パラメータ探索範囲
Tr = 0.05 0.07 0.1 0.12 0.15
B_linear: 0.01E-06 0.1E-06 1.0E-06 2.0E-06 2.4E-06
from hakoniwa-px4sim.
探索結果
from hakoniwa-px4sim.
一番良い結果
Tr=0.12
B2=2.0e-06
元々、B2=2.4e-06 だったので、良い線いっているのでは?
と思ったけど、振動するケースだった。
from hakoniwa-px4sim.
2番目に良い結果
Tr=0.05
B2=2.0e-06
from hakoniwa-px4sim.
所感
linearにしても、全体的に高得点は出なかった。
あと、コントローラで操作してみたが、目的の方向への移動に対して、横揺れが大きく、操作しづらい感があった。
これは nonlinearでも同様にあった。
もう少しキビキビ動くパラメータを見つけたい。
ひとまず、以下あたりをさらに探索してみる。
Tr: 0.08 0.09 0.11
B2: 1.1 1.2 1.3 1.4 1.5
from hakoniwa-px4sim.
今日は手を出せないですが、気になるなら、そちらで例のロータの一次微分式、exp バージョンに変えて、感触試してみてみてもいいよ。
あと、並進のdrag ですが、vでなくてv^2 を使ってるモデルをネットで発見しました。でもこれも良くなる確信がぜんぜんないや。
姿勢角度の積算に、勘違いがあったので、これ直したらもしかしたら、うまく行くかも。
from hakoniwa-px4sim.
今日は手を出せないですが、気になるなら、そちらで例のロータの一次微分式、exp バージョンに変えて、感触試してみてみてもいいよ。
了解です。考えてみます。
あと、並進のdrag ですが、vでなくてv^2 を使ってるモデルをネットで発見しました。でもこれも良くなる確信がぜんぜんないや。 姿勢角度の積算に、勘違いがあったので、これ直したらもしかしたら、うまく行くかも。
これは、期待大ですね。
from hakoniwa-px4sim.
最新の探索結果。新しい良い結果はありませんでしたね。
from hakoniwa-px4sim.
ちょっと手詰まり感ありますが、いくつか試してみます。
- 機能追加:jmavsim実装のローター機能を作って差し替えできるようにする
- 機能改善:A2のパラメータはHoveringRpmで決まるので、A2のパラメータは削除して自動計算する
from hakoniwa-px4sim.
jmavsimの修正しました。試してみましたが、みた感じ、同じ動きに見えましたが、念の為パラメータ探索を昨日と同じ範囲でやってみます。
from hakoniwa-px4sim.
いいと思います!
from hakoniwa-px4sim.
Related Issues (20)
- Python APIでカメラ撮影すると復帰しないみたい。。 HOT 8
- v2.5.0リリース作業
- 3DLiDARの可変超配列対応
- Windows向けUnityアプリの公開
- Mac向けUnityアプリの公開
- リリースノート作成
- プラント物理モデルを、制御のために線形化して行列で表現してみたい。 HOT 12
- drone_physics の仕様バグ HOT 1
- 空気摩擦係数の3次元対応 HOT 5
- Resoniteと連携可能にする
- 地面の上でドローンが物理的に停止できるようにできないか HOT 5
- 東尋坊でドローン飛ばす時は高速で飛ばしたい。 HOT 14
- 東尋坊の外観調整 HOT 7
- 東尋坊でドローン移動させた時の違和感 HOT 2
- PX4連携しようとすると、Unityがエラーログを大量に出力する
- PX4のUbuntu向けドキュメント改修対応
- hakoniwaのUbuntu向けドキュメント改修対応
- [観光ドローン] VR対応
- v2.5.0のhakoniwa-px4-win.zipのパッケージミスがあった HOT 1
- Windows向けのPX4のIPアドレスが変更されている
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.