プログラムのエントリーポイントです。以下のクラスをインスタンス化し、シミュレーションを実行します:
Worldクラス:環境設定(壁、障害物など)Bayesianクラス:ベイズ推論の実装Agentクラス:コウモリの動作と状態管理BatVisualizerクラス:シミュレーション結果の可視化
実行フローは以下の通りです:
- 各クラスの初期化
- ステップごとのシミュレーション実行
- 結果の可視化とGIFアニメーション生成
Worldクラスを定義しています。シミュレーション環境の管理を担当します。
主な機能:
- 壁の座標設定と管理
- 障害物(ポール)の座標読み込みと管理
- 環境の境界設定
主なメソッド:
__init__:環境パラメータの初期化_setup_walls:壁の座標を設定_real_obs:CSVファイルから障害物の位置データを読み込み
Agentクラスを定義しています。コウモリの動作と状態を管理します。
主な機能:
- コウモリの位置と方向の管理
- 実験データからの飛行経路読み込み
- 各ステップでのシミュレーション実行
主なメソッド:
__init__:コウモリの初期状態設定one_step:1ステップのシミュレーション実行_real_flight:実験データからコウモリの飛行経路情報を読み込み
Bayesianクラスを定義しています。ベイズ推論によるマップ更新を担当します。
主な機能:
- 事前確率分布の管理
- 尤度計算
- ベイズ更新による事後確率計算
主なメソッド:
__init__:ベイズ推論パラメータの初期化Init:事前確率分布の初期化dB_trans:データをデシベルスケールに変換new_likelyhood_2D:2次元空間上の尤度計算update_belief:ベイズ更新による信念(確率分布)の更新
シミュレーションに必要な様々な計算関数を提供します。
主な機能:
- 座標変換(デカルト座標⇔極座標)
- 音波の減衰計算
- エコー検出判定
- 超音波の往復距離計算
主な関数:
round_angle:角度の正規化XY_to_r_theta_calc:デカルト座標から極座標への変換dist_attenuation:距離による音波減衰計算direc_attenuation:方向による音波減衰計算real_dist_goback:超音波の往復距離計算calc:メインの計算関数(各ステップでの計算を統合)
BatVisualizerクラスを定義しています。シミュレーション結果の可視化を担当します。
主な機能:
- シミュレーション状態のプロット
- フレームごとの画像生成
- GIFアニメーション作成
主なメソッド:
__init__:可視化パラメータの初期化plot_frame:単一フレームのプロットと保存create_gif_from_frames:フレーム画像からGIFアニメーション作成
Worldクラスが環境(壁と障害物)を初期化Agentクラスがコウモリの初期位置と飛行経路を設定Bayesianクラスが事前確率分布を初期化- 各ステップで以下が実行されます:
Agent.one_stepがステップ実行を開始calc関数がエコー信号を計算Bayesian.update_beliefがベイズ更新を実行BatVisualizer.plot_frameが結果を可視化
- 全ステップ完了後、
BatVisualizer.create_gif_from_framesがGIFアニメーションを作成
WorldクラスからAgentクラスへ:環境設定(X, Y座標系)、マージン空間WorldクラスからBayesianクラスへ:格子点数、空間サイズAgentクラスからBayesianクラスへ:試行回数Agent.one_stepからcalc関数へ:コウモリの位置と方向calc関数からAgent.one_stepへ:エコー信号、観測点座標Agent.one_stepからBayesian.update_beliefへ:エコー信号、距離行列Bayesian.update_beliefからAgent.one_stepへ:更新された確率分布Agent.one_stepからBatVisualizer.plot_frameへ:シミュレーション状態データ
python main.py実行すると、シミュレーションが1ステップずつ進行し、各ステップの状態が可視化されます。最終的にGIFアニメーションが生成されます。