本リポジトリでは、以下の環境を統合したシミュレーション環境を目指しています。
- https://github.com/toppers/hakoniwa-single_robot
- https://github.com/toppers/hakoniwa-ros2sim
- https://github.com/toppers/hakoniwa-ecu-multiplay
- https://github.com/toppers/hakoniwa-iot
- https://github.com/toppers/hakoniwa-ros-multiplay
アーキテクチャのイメージは下図の通りです(本図はマイコン制御向けのアーキテクチャ)。
シミュレーション環境の構成として、以下の2つの環境が必要となります。
- [A] 制御対象ソフトウェアの開発環境
- [B] 制御対象ソフトウェアおよびハード・ロボットのシミュレーション実行環境
本リポジトリでは、[A]と[B]それぞれの環境をdockerコンテナとして提供します。
また、これらの環境は、利用するロボットの種類や数、制御で利用するプラットフォーム(RTOS, ROS等)によって、異なる環境を必要とします。
本リポジトリでは、そういった物をパラメータ化し、用途に応じた dockerコンテナを自動生成することを目指します。
現時点で検討中のパラメータは、こちらです。
今後、ブラッシュアップしながら、成長させていく予定です。
本シミュレーション環境に必要な環境は以下の通りです。
- OS
- Windows10/11 の WSL2
- Ubuntu 20.0.4, 22.0.4
- Intel系のMac OS
- Docker
- Unity
2022/12/31
時点では、EV3RT での HackEV ロボット制御のシミュレーション環境のみ対応しています。
git clone --recursive https://github.com/toppers/hakoniwa-base.git
2022/12/31
時点では、未対応です。
用途に応じたパラメータを json 形式で設定する予定です。
2022/12/31
時点では、未対応です。
設定したパラメータファイルから、開発環境と実行環境のDockerfileおよび環境変数群を自動生成する予定です。
まず、開発環境用のdockerイメージを作成します。
cd hakoniwa-base
bash docker/create-image.bash dev
次に、実行環境のdockerイメージを作成します。
cd hakoniwa-base
bash docker/create-image.bash runtime
まず、以下のリポジトリをクローンします。
git clone --recursive https://github.com/toppers/hakoniwa-ros2sim.git
次に、ブランチをunity-asset
に切り替えます。
git checkout unity-asset
docker コンテナを起動します。
bash docker/run.bash
もろもろインストールします。
bash hako-install.bash opt all
こちらの手順で、Unity プロジェクトを開いてください。
箱庭コンフィギュレータを起動すると、下図のようにTB3が見えます。
今回は、HackEVモデルを利用したいので、TB3は削除して、HackEVを配置します。
まず、TB3を以下の要領で削除します。
箱庭のロボットアセットを開き、HackEVモデルを選択します。
ドラッグ&ドロップで、「Robot」直下に配置しましょう。
最後に、この情報をコンフィグファイルとして生成します。
生成完了したら、再度、もろもろインストールします。
bash hako-install.bash opt all
開発対象とする制御アプリケーションは、workspace/dev/src
直下に開発アプリのディレクトリを作成し、ファイル配置する形になります。
workspace/dev
└── src
├── [開発アプリディレクトリ]
: :
├── build.bash
└── install.bash
開発環境でのビルドは、dockerコンテナ上で行います。 アプリケーションのビルド方法は、以下のコマンドを実行するだけです。
bash docker/build.bash [開発アプリディレクトリ名]
生成された実行バイナリは、ローカルホスト上のファイルとして生成されます。
EV3RTの場合は、[開発アプリディレクトリ]配下に、asp
ファイルが作成されます。
開発環境と同様に、実行環境もローカルホスト上に、シミュレーション実行に必要なファイル群を保存する構成です。
ディレクトリ構成は以下の通りです。
workspace/runtime/
├── asset_def.txt
├── asset_env.bash
├── hakoniwa-core-cpp-client
├── hakoniwa-conductor
├── install.bash
├── params
│ ├── base_practice_1-1
│ │ ├── device_config.txt
│ │ ├── memory.txt
│ │ └── proxy_config.json
│ ├── block_signal-1
│ │ ├── device_config.txt
│ │ ├── memory.txt
│ │ └── proxy_config.json
│ └── train_slow_stop-1
│ ├── device_config.txt
│ ├── memory.txt
│ └── proxy_config.json
├── run
│ ├── base_practice_1-1
│ ├── block_signal-1
│ │ └── log.txt
│ └── train_slow_stop-1
│ └── log.txt
└── run.bash
シミュレーション実行対象となるアセットは asset_def.txt
に記述します。
<開発アプリディレクトリ名>:<ID>
:
例:
block_signal:1
train_slow_stop:1
ところで、複数のathrillを同時に起動すると、コンソールログが重複して大変なことになります。 そのような場合に備えて、Athrillのログを特定の場所に吐き出すコンフィグ設定が可能です。
<開発アプリディレクトリ名>:<ID>:<ログ出力ファイルパス>
:
例:
block_signal:1:root/workspace/run/block_signal-1/debug.txt
train_slow_stop:1:root/workspace/run/train_slow_stop-1/debug.txt
docker コンテナを起動するだけです。
bash docker/run.bash runtime
成功すると、Rust版箱庭マスタと箱庭プロキシが起動します。
$ bash docker/run.bash runtime
INFO: ACTIVATING HAKO-MASTER
INFO: ACTIVATING ASSET-PROXY
OPEN RECIEVER UDP PORT=172.26.214.23:54001
OPEN SENDER UDP PORT=172.26.214.23:54002
delta_msec = 20
max_delay_msec = 100
INFO: shmget() key=255 size=12160
Server Start: 172.26.214.23:50051
INFO: START block_signal-1
add_option:/root/athrill-target-v850e2m/athrill/bin/linux/athrill2
add_option:-c1
add_option:-t
add_option:-1
add_option:-d
add_option:/root/workspace/params/block_signal-1/device_config.txt
add_option:-m
add_option:/root/workspace/params/block_signal-1/memory.txt
add_option:/root/workspace/dev/block_signal/asp
INFO: PROXY start
target_channels: 0 target_channels: 1024
create_channel: id=2 size=1024
INFO: START train_slow_stop-1
INFO: SIMULATION READY!
add_option:/root/athrill-target-v850e2m/athrill/bin/linux/athrill2
add_option:-c1
add_option:-t
add_option:-1
add_option:-d
add_option:/root/workspace/params/train_slow_stop-1/device_config.txt
add_option:-m
add_option:/root/workspace/params/train_slow_stop-1/memory.txt
add_option:/root/workspace/dev/train_slow_stop/asp
INFO: PROXY start
target_channels: 0 target_channels: 1024
create_channel: id=0 size=1024
Unityエディタ上で、シーンをToppers_Course
に切り替えます。
シミュレーション開始ボタンを押下します。
シミュレーション実行待ち状態になります。
「開始」ボタンを押下すると、動き出します。
動作例:
master2.mp4
TODO