本リポジトリは、箱庭用のEV3RT上で以下を実現します。
- EV3RT用のアプリをビルドする
- ビルドしたバイナリをマイコンシミュレータAthrillで実行する
- Athrill内のデバイスとUnity上のロボットとの通信します
- hakoniwa-unity-ev3modelのインストールが別途必要です。
現時点では、以下の環境のみサポートしています。
- Windows11/10 WSL2 Ubuntu 22.04.2 LTS
アーキテクチャは下図のとおり、WSL2上に箱庭直接インストールして実行する構成です。
背景:当初は、Dockerコンテナ内で実行する構成にしていましたが、箱庭の改修がやりづらいケースが多く、直接インストール構成としました。
プロジェクト構成は下図の通りです。
.
├── install.bash
├── docker
└── workspace
├── dev
| └── src
| ├── base_practice_1
| ├── block_signal
| └── train_slow_stop
└── run
箱庭のインストールは、install.bash
で行います。
EV3RT用のアプリケーションのビルドは、docker
環境で行います。
アプリケーションは、workspace/dev/src 配下に配置します。
デフォルトで、base_practice_1
, block_signal
, train_slow_stop
が配置されていますが、自分のアプリケーションをこの並びで追加できます。
- docker engine のインストール
- 箱庭のインストール
sudo apt install docker.io
sudo apt install net-tools
インストールが終わったら、docker を起動します。
sudo service docker start
以下のコマンドで、dockerイメージをpullします。
bash docker/pull-image.bash
以下の順番でインストールします。
必要なソフトのインストール:
bash install.bash prepare
箱庭のインストール:
bash install.bash hakoniwa
箱庭コンダクタのインストール:
bash install.bash conductor
Athrillのインストール:
bash install.bash athrill
Athrill Device のインストール:
bash install.bash athrill_device
成功するとこうなります。
ls -l /usr/local/lib/hakoniwa/
total 4532
drwxr-xr-x 3 root root 4096 Jan 27 11:19 hako_binary
-rwxr-xr-x 1 root root 726176 Jan 27 11:19 hakoc.so
-rwxr-xr-x 1 root root 1716536 Jan 27 11:19 libhakoarun.a
-rwxr-xr-x 1 root root 729800 Jan 27 11:41 libhakopdu.so
-rwxr-xr-x 1 root root 717208 Jan 27 11:41 libhakotime.so
-rwxr-xr-x 1 root root 726176 Jan 27 11:19 libshakoc.so
drwxrwxrwx 3 tmori tmori 4096 Jan 27 10:27 py
ls -l /usr/local/bin/hakoniwa/
total 134084
-rwxr-xr-x 1 root root 7464776 Jan 27 11:35 athrill2
-rwxr-xr-x 1 root root 194 Jan 27 11:30 hako-cleanup
-rwxr-xr-x 1 root root 427016 Jan 27 11:19 hako-cmd
-rwxr-xr-x 1 root root 297 Jan 27 11:30 hako-master
-rwxr-xr-x 1 root root 128329896 Jan 27 11:30 hako-master-rust
-rwxr-xr-x 1 root root 1062680 Jan 27 11:19 hako-proxy
~/.bashrc ファイルに以下の行を追加してください。
export LD_LIBRARY_PATH=/usr/local/lib/hakoniwa:$LD_LIBRARY_PATH
export PATH=/usr/local/bin/hakoniwa:$PATH
以下の手順でEV3RT用のアプリケーションを追加します。
workspace/dev/src
配下に、アプリケーションフォルダを作成する- アプリケーションフォルダ内に自分のプログラムとMakefile類を配置する(EV3RTの流儀に従ってください)
workspace/dev/template
配下のAthrillのパラメータファイルを自分のアプリケーションフォルダにコピー配置して、一部修正するworkspace/run/asset_def.txt
を自分のアプリケーション名に変更する
以下、アプリケーション名を HakoniwaApp
、制御対象ロボット名を HakoniwaRobo
として説明します。
mkdir workspace/dev/src/HakoniwaApp
自分のアプリを配置して、EV3RTの流儀に従って、Makefileなどをそろえてください。
cp workspace/dev/template/* workspace/dev/src/HakoniwaApp/
以下のファイルを修正してください。
修正前:asset_nameとrobo_nameを自分の名前に変更します。
"asset_name": "athrill-appname-1",
"robo_name": "Roboname",
修正後:
"asset_name": "athrill-HakoniwaApp-1",
"robo_name": "HakoniwaRobo",
修正前:asset_nameとrobo_nameを自分の名前に変更します。
DEBUG_FUNC_HAKO_ASSET_NAME athrill-appname-1
DEBUG_FUNC_HAKO_ROBO_NAME Roboname
修正後:
DEBUG_FUNC_HAKO_ASSET_NAME athrill-HakoniwaApp-1
DEBUG_FUNC_HAKO_ROBO_NAME HakoniwaRobo
EV3RT用のアプリケーションのビルドは、docker コンテナで行います。
以下のコマンド引数 <app>
に自分のアプリケーション名を入れることでビルドできます。
bash docker/build.bash <app>
例:
bash docker/build.bash HakoniwaApp
バイナリファイルは、アプリケーションフォルダに配置されます。
workspace/dev/src/HakoniwaApp/asp
以下の書式で自分のアプリケーション名を設定します。複数ある場合は複数行指定できます。
<アプリケーション名>:athrill.log
例:
HakoniwaApp:athrill.log
以下のコマンドで箱庭を起動し、待機状態にします。
bash workspace/run/run.bash
成功するとこうなります。
INFO: ACTIVATING HAKONIWA-CONDUCTOR
OPEN RECIEVER UDP PORT=172.29.246.4:54001
OPEN SENDER UDP PORT=172.29.246.4:54002
delta_msec = 20
max_delay_msec = 100
INFO: shmget() key=255 size=1129352
Server Start: 172.29.246.4:50051
INFO: START train_slow_stop
INFO: START block_signal
START
Press ENTER to stop...
ここから30秒以内に、Unity側のシミュレーションを開始してください。
なお、シミュレーションを停止するには、Unityのシミュレーションを終了させてから、本端末上でエンターキーを押します。