20070421 シミュレータのアイデア †
シミュレータの実現ステップ †
こんなステップでシミュレータをつくろうかなと思います。期間内にできるところまで。
目的にあわせて、どのレベルの正確さを求めるか、が物理シミュレーター作りのポイント。
- STEP1:通称:LV1
最低限の動作をシミュレーションする。2次元、3自由度(X,Y,ヨー)の車両のシミュレーション。必要な各種パラメータは実機あわせ。実時間シミュレーションの離散化はシンプルなオイラー法。
2週間くらいで作るというのはこれくらいが限界かな
- STEP2:通称:LV2
少し動力学、運動学をいれてみる。各種パラメータ(たとえば慣性モーメントとか、テンソルとか)は物性値から計算してみる。2次元、3自由度(X,Y,ヨー)の車両のシミュレーション。実時間シミュレーションの離散化はちょっとこったルンゲクッタで。
- STEP3:通称:LV3
3次元、6自由度の運動シミュレーション。ぜんぶ自作プログラミングだと厳しいかも。まっとうな物理エンジンとか、最低でもMATLABくらいは使いたい。
実装よりの整理 †
実装よりにシミュレータへの要望を整理してみると、こんな感じ
- Windowsプラットフォームで動作すること
みんなのPCがWindowsだから。DirectXの過去のLIB使えそうというのもある。
- 今後のSTEP2,STEP3への物理計算拡張を考慮した設計とすること
物理計算処理も階層化したほうがよさそうです。ソルバー単位になるかな。。
- 物理計算エンジン部分を取替え可能に設計すること
物理計算と描画の境界線は意識しましょう。学生の頃、物理計算用のPG組んだとき、これを混ぜて痛い目を見た。後から描画処理を追加するときに、計算処理に手をいれたくなるもの。
- パスファインダーをパーツのアセンブリとして表現すること
将来パスファインダーを構成する部品が変わってもいいように。
- 3Dグラフィックスへの対応を考慮した設計とすること
いずれ3Dにも対応させたいので、スケール感をもって、2Dの計算をさせたほうが良いでしょう。
- 複数台のパスファインダーの同時シミュレーションに対応すること
複数でアルゴリズム対決みたいなのをシミュレータ上でできたら楽しそう。
- C++で記述されたパスファインダー制御コードと連携できること
パスファインダーの制御コードはC++なので、薄いWrapperをかませるような使い方を想定します。
実装イメージ †
もう少しイメージをふくらませて