Open tmori opened 11 months ago
これは赤がスコアが高いんですね? 高いの評価基準はなんでしょう?どっかに記述ありますか?
これは赤がスコアが高いんですね? 高いの評価基準はなんでしょう?どっかに記述ありますか?
赤が高いスコアですね。
評価基準はこちらです。
https://github.com/toppers/hakoniwa-px4sim/tree/main/px4/auto-test#test-result-evaluator
詳細はリンクされているプログラムを見ていただく必要あります。。
割と安定しているように見えるパラーメタセット
ベースパラメータからの変更点:
比較対象コンフィグは以下。
1st リリースで見えた以下の現象が発生する操作を実行する
「真後ろに飛行指示を出すと、機体が不安定になる」
オペレーション内容
下から上へ移動する際に方向がおかしくなり、元の場所にもどるまでぐるぐる移動していた。
ベースコンフィグと同じオペレーションを実行したところ、 下から上への移動は改善したように見える。
ただし、まだ不安定感はぬぐえない。
差分:
% diff old_drone_config.json new_drone_config.json
39c39
< "inertia": [ 0.01, 0.01, 0.02 ],
---
> "inertia": [ 0.02, 0.02, 0.04 ],
45c45
< "Tr": 0.1,
---
> "Tr": 0.05,
57,58c57,58
< "parameterB": 5.0e-09,
< "parameterJr": 1.0e-08
---
> "parameterB": 60.0e-09,
> "parameterJr": 5.0e-08
62,63c62,63
< "sampleCount": 5,
< "noise": 0.05
---
> "sampleCount": 1,
> "noise": 0.03
71c71
< "noise": 0.05
---
> "noise": 0.03
空気摩擦の件は前の最大速度と関連していて、速度が上がってしまう、もしくは急に速度が上がってしまう、というのが不安定さを生むような。うーん。
の2つが可能性なんやけど、、、2が、物理特性として単体テストできるといいのだけど、例えば、
mass 1kg を力1Nであげてるんだから、速度10m/s 以上には1秒では加速できないよ!
みたいな、drone_dynamics class レベルでの物理と意味的テスト。うーん、正解ラベル作るの難しい。
対象パラメータ範囲をもう少し広げてみたほうが良いかもしれない。
現状、目的地に到着してふらついてないかどうかだけど、もう少し観点を追加したい。
3 があることによって、寄り道してない感を出したい。
パラメータ数が多いので、全探索は難しそう。 遺伝的アルゴリズムか何かを使って評価してみたい。
テスト実行中に、PX4実行プロセスを停止できない現象があったので、自動ツールの終了処理の見直しが必要。
移動距離のスコアを出してみた
目標地点で安定しているかどうかのスコア
パラメータ探索は人間の直感でやった方が良いかもと思って、
移動の軌跡も無駄がない。
ただ、Unityで見ていると、結構期待が高周波で振動しているので、もうちょっと良いところがないか探すことにしました。
パラメータセット:
{
"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",
"airFrictionCoefficient": 0.1,
"inertia": [ 0.002, 0.002, 0.004 ],
"mass_kg": 0.3,
"position_meter": [ 0, 0, 0 ],
"angle_degree": [ 0, 0, 90 ]
},
"rotor": {
"Tr": 0.05,
"Kr": 8000,
"rpmMax": 8000
},
"thruster": {
"rotorPositions": [
{"position": [ 0.3, 0.3, 0 ], "rotationDirection": 1.0 },
{"position": [ -0.3, -0.3, 0 ], "rotationDirection": 1.0 },
{"position": [ 0.3, -0.3, 0 ], "rotationDirection": -1.0 },
{"position": [ -0.3, 0.3, 0 ], "rotationDirection": -1.0 }
],
"HoveringRpm": 4000,
"parameterB": 60.0e-09,
"parameterJr": 5.0e-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.005
},
"gps": {
"sampleCount": 1,
"noise": 0
}
}
}
}
パラメータ探索した結果を一通り見てみたけれど、一番、安定飛行するのは最初に見つけたパラメータ。
そして、そのパラメータでは、ヨー角が小刻みに振動している。。こういう制御って・・
この周期、約 0.4/11 = 36 ms ですね、何か心あたりは? 何かの物理量から出るのか、px4の制御依存なのか、、、バネが要素がドローン内部にないから、px4側とループになった時に振動してるんだろうな。ダンパー(抵抗)欲しい。 そう言えば、並進には風の抵抗入れたが、回転には入ってないね。本には両方入ってなかった気がするが、、
振動現象は謎すぎるので、振動しなさそうなパラメータからまた探索を始めます(自動化できたのでこの点は良いですね)。
ベースパラメータ:
{
"simulation": {
"lockstep": true,
"timeStep": 0.003,
"logOutputDirectory": "/Users/tmori/project/oss/hakoniwa-px4sim/px4/auto-test/test_resource/logs/",
"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",
"airFrictionCoefficient": 0.01,
"inertia": [ 0.01, 0.01, 0.02 ],
"mass_kg": 1,
"position_meter": [ 0, 0, 0 ],
"angle_degree": [ 0, 0, 90 ]
},
"rotor": {
"Tr": 0.1,
"Kr": 8000,
"rpmMax": 8000
},
"thruster": {
"rotorPositions": [
{"position": [ 0.3, 0.3, 0 ], "rotationDirection": 1.0 },
{"position": [ -0.3, -0.3, 0 ], "rotationDirection": 1.0 },
{"position": [ 0.3, -0.3, 0 ], "rotationDirection": -1.0 },
{"position": [ -0.3, 0.3, 0 ], "rotationDirection": -1.0 }
],
"HoveringRpm": 4000,
"parameterB": 5.0e-09,
"parameterJr": 1.0e-08
},
"sensors": {
"acc": {
"sampleCount": 1,
"noise": 0.03
},
"gyro": {
"sampleCount": 1,
"noise": 0.01
},
"mag": {
"sampleCount": 1,
"noise": 0.03
},
"baro": {
"sampleCount": 1,
"noise": 0.005
},
"gps": {
"sampleCount": 1,
"noise": 0
}
}
}
}
B, Jr を以下の範囲で回します
B:0.5 1.0 2.0 5.0 10.0 20.0 X(e-09) Jr:1.0 2.0 4.0 8.0 10.0 X(e-08)
割といい感じに見えたグラフ
あー、姿勢角は積分し続けるから2π超えるのね。。
人回しした結果は、残念ながら、全て全滅でした。。 次は、Tr=0.05にして、同じパラメータ範囲を探索かけます。
今回の探索範囲だと、Jrが1.0以下のところが良い結果が得られているように見える。 ただし、結果の再現性がイマイチ。同じパラメータで再度実験を試みたところ、異なる結果が得られた。。(悩ましい
以下、代表的なグラフ:
以下、代表的なグラフ:
ローター位置の半径が大きすぎるのではないか?
単体テストとして、ドローン力学モデルのテストでチェックした方が良いかも
チューニング対象パラメータ
ベースパラメータ:https://github.com/toppers/hakoniwa-px4sim/blob/main/px4/auto-test/test_resource/configs/drone_config_base.json