今回は白線に沿って自動で走行する車を作ったのでそれを動かしていく。
このページに直接来た方は以下を参照。
Pythonから操作可能な物理シミュレーション環境作った - ぼうびろく
Unityの準備
以下からインストーラーを入手し、Unityをインストールする。Unityは年商によってライセンス料が変わる。個人であれば気にせず無料ライセンスでOK。
Unity Hubを起動する。
New projectを押し、3Dを選択し、適当な名前を付け、Create Projectを押す。これでUnityの基本的な準備は完了したので、環境を作っていく。
以下からソースコードを入手する。
編集画面からAssets -> Import package -> custom packageを選択し、ソースコードにある、/unity/package/AICarSet.unitypackageとBase.unitypackageをインポートする。そうすると、下のAssetsにAICarとBaseが追加される。
下のAssetsにある、AICar/Prehub/AICarSet.prefabを左のHierarchyにドラッグ&ドロップする。
そうすると、以下のような画面になる。
これで操作対象の車が用意できた。次は道路を用意する。
以下からEasyRoads3Dをインストールする。
EasyRoads3Dを使用して、道路を作成する。参考は以下のリンク。ただし道路の幅は変更しないこと。うまく自動運転させるコツとしては、急な曲がり角がない、平坦な道路を作ることが重要。
【入門】レースゲームの作り方&Unityの使い方と道路アセットの紹介 | 「Free! Illustlation &くりえいてぃぶ」
イメージとしては以下のような感じ。
車の位置を調整する。左上の矢印が4方向に出ているMove Toolを選択し、HierarchyからAICarを選択し、車の位置と向きを道路に合わせる。
最後にUIsにあるGoleLineを選択し、位置を調整する。これはStart/GoalLineであり、ここを車(正確にはBodyという名前のオブジェクト)が通過するとストップウォッチがスタートし、再度通るとストップする。
再生ボタンを押してみて、以下のようになっていればOK。見づらければMainCameraを移動する。ちなみに矢印で車を動かせる。車をもとの位置に戻したい場合は"PosReset"ボタンを押す。
Python
以下からMinicondaをインストールする。
コマンドプロンプトを立ち上げ、以下を実行する。
$ conda create -n test python=3.9 $ conda activate test $ pip install -U pip $ pip install matplotlib pandas numpy $ conda install -c conda-forge opencv $ pip install jupyter
Unity準備の4.で入手したソースコードのディレクトリに移動し、Jupyter notebookを起動する。
$ cd ${your install path} $ jupyter notebook
起動するとログに、http://localhost:XXXXXXX というようなURLが出るのでそこにアクセス。
以下のノートブックを起動する。これでPython側の準備は完了。
- python/Follow_the_white_line/Sample_Car_controal.ipynb
実行
Unityのシミュレータを起動し、Pythonのノートブックから早送りみたいなマークのRun Allを押して実行する。順番が反対だとMMAPへのアクセスに失敗するため起動しない。
Python側で、以下のような画面が立ち上がって無事に運転できればOK。