ロボット向けヘテロシミュレータ箱庭(ROS2/マイコン制御を統合)

# 概要
ロボット向けのシミュレーション環境として，ROSに特化したものとマイコンに特化したものがあります．
本記事では，ROS2/マイコン制御のシミュレーションを１つのシミュレーション環境で同時に行えるヘテロシミュレータを紹介します．

TOPPERS/箱庭プロジェクトでは，ROS2向けのシミュレータとマイコン制御シミュレータを一般公開しており，これらを統合したシミュレータを製作しました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/b0543600-1db4-b68e-75d3-31f51b24940c.png)


## ROS2シミュレータの例

* [Gazebo](https://gazebosim.org/home)
* [箱庭 ROS シミュレータ](https://github.com/toppers/hakoniwa-ros2sim)

## マイコン制御シミュレータの例

* [ETロボコンシミュレータ](https://github.com/ETrobocon/etrobo)
* [箱庭 マイコン制御シミュレータ](https://github.com/toppers/hakoniwa-single_robot/blob/main/README_jp.md)

# 前提とする環境
基本的には，以下の動作環境に準じます．

* [箱庭 マイコン制御シミュレータ](https://github.com/toppers/hakoniwa-single_robot/blob/main/README_jp.md)
* [箱庭 ROS シミュレータ](https://github.com/toppers/hakoniwa-ros2sim)

ただし，現時点では，Windows11/wsl2 環境で動作確認しています．

# 手順
ヘテロ環境の構築手順は以下のステップで行います．

1. 箱庭 マイコン制御シミュレーション環境を構築
1. 箱庭 ROS シミュレーション環境を構築
1. 箱庭コンフィギュレータでロボットをカスタマイズ
1. ヘテロシミュレーション環境をインストール
1. ヘテロシミュレーションを実行

## 箱庭 マイコン制御シミュレーション環境を構築

まずは，以下の手順に従って，マイコン制御でのシミュレーションを実行してください．

https://github.com/toppers/hakoniwa-single_robot/blob/main/README_jp.md

ヘテロシミュレータでは，マイコン制御シミュレーション(dockerでのAthrill実行)のみを使用します．
※本環境で提供しているUnityアプリは利用しません．

## 箱庭 ROS シミュレーション環境を構築

次に，以下の手順に従って，ROS2制御でのシミュレーションを実行してください．

https://github.com/toppers/hakoniwa-ros2sim/blob/main/README_jp.md

## 箱庭コンフィギュレータでロボットをカスタマイズ

`hakoniwa-ros2sim`の箱庭コンフィギュレータを起動してください．

こんな感じで，TB3が１個あるはずです．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/e0496f94-ae78-b81f-cc60-b61708e11c36.png)

ここに，EV3ロボットを追加しましょう．

Projectビューの`Assets/Resources/Hakoniwa/Robots`を選択すると，`EV3RoboModel`が見えます．
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/6a4d9a94-eb96-7db1-06c5-7277711860c8.png)

TB3の場合と同じ要領で，EV3RoboModelをドラッグ＆ドロップしましょう．
Hierarchyビューの`Configurator/Hakoniwa/Robot`配下に配置します．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/4ef65f96-f73f-6198-e6ab-168b23cd9218.png)

次に，Inspectorビューの`EV3 Micon Config` を開いてください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/4cc37ad2-c8a2-89ce-e458-7c5fec45b111.png)

Udp_proxy に `Athrill` が見えます．`Ipaddr` を docker のIPアドレスを設定してください．

docker の IPアドレスの確認方法は以下の通りです．

```
root@DESKTOP-7UPRUP4:~/workspace/hakoniwa-ros2sim/ros2/workspace# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.175.6  netmask 255.255.240.0  broadcast 172.31.175.255
         :
```

こんな感じで，IPアドレス設定しましょう．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/9bab18ec-5497-338b-549c-19462a344307.png)

設定後，箱庭のコンフィグ情報を以下の要領で生成してください．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/bfeec8a8-66e1-fdb7-0217-36bc7f5eaa93.png)

## ヘテロシミュレーション環境をインストール

hakoniwa-ros2simのdocker端末上で，以下の要領でインストールを行ってください．

```
cd /root/workspace/hakoniwa-ros2sim/ros2/workspace
bash hako-install.bash opt all
bash build.bash
```

## ヘテロシミュレーションを実行
Unityエディタに戻り，シーンを `Toppers_Course` に変更しましょう．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/534b6206-e432-6249-14c1-44d8b8252e21.png)

hakoniwa-ros2sim の docker 端末で，ROS2のシミュレーション準備をします．

```
# bash launch.bash
IP_ADDR is 172.31.175.6 (eth0)
```

Unityエディタのシミュレーション開始ボタンを押下します．
TB3とEV3の２つのロボットが見えますね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/328869d0-5027-4eda-3c3c-47bac80cb17b.png)

次に，箱庭マイコン制御シミュレータの方で，箱庭プロキシを起動します．

```
bash run-proxy.bash base_practice_1
```

起動成功すると，`開始`ボタンが有効になります．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244147/64dad1e3-292d-7682-8cdf-1b27641cec77.png)

最後に，hakoniwa-ros2sim 側で，TB3のロボット制御プログラムを起動します．

```
# bash run.bash tb3 TB3RoboModel
START: TB3RoboModel
```

さー，準備完了です．`開始`ボタンを押しましょう．

# デモ
EV3 とTB3 が動きだしまた．
ロボットの動きだけだとわからないかもしれませんが，EV3の方(マイコン側)はUDP通信でマイコンシミュレータAthrillで制御しています．TB3の方(ROS2側)はROSトピックで制御しています．

https://twitter.com/kanetugu2020/status/1550645500801843200

# お知らせ：箱庭もくもく会

TOPPERS箱庭WGでは，もくもく会を不定期に開催しています．
本記事の内容を実際に試してみたい方や試してみたけど詰まっている方は，ぜひご参加ください．画面共有しながら参加者同士でサポートしたり，一緒に新しい機能を実装したりと”もくもく”しましょう．

https://hakoniwa.connpass.com/