9/2(⾦) 10:20〜11:30 セッションs3b

ここから始める箱庭の活⽤

久保秋 真（チェンジビジョン）
細合 晋太郎（東京⼤学）
⾼瀬 英希（東京⼤学）
2022/9/2© 2022, Shin Kuboaki.

SWEST24

演習の準備（お詫び）• ハンズオンと予告しましたが時間が⾜りませんでした• ダウンロードだけで割と時間がかかります• 事前にある程度準備しておけば⼀緒に進められます• （あるいは、事後に資料をみながらやってみるとよいでしょう）• WSL2、Docker、Unity、GitHubの利⽤準備• GitHubのhakoniwa-single_robotの実施• https://github.com/toppers/hakoniwa-single_robot/• 演習で使うデータのダウンロード（https://bit.ly/3QPzJm6）• GitHubのhakoniwa-single_robotとhakonwia-ros2simの実施• https://github.com/toppers/hakoniwa-ros2sim/

22022/9/2© 2022, Shin Kuboaki.

SWEST24

このセッションの概要• 使う側からみた箱庭にできること• 箱庭は、なにで、どんなことに使えるか• どんなふうに使っているか（久保秋）• ⾃動運搬システム（RTOSプログラムによる機器の制御）• 信号に従って⾛⾏する列⾞（複数の機器を⼀緒に動作させる）• ⾃分たちのしごとで使うには（細合）• みなさんは、どんなことに使えそうか• みなさんが使うには、どんな準備や作業が必要か
32022/9/2© 2022, Shin Kuboaki.

SWEST24

42022/9/2© 2022, Shin Kuboaki.

SWEST24使う側から⾒た箱庭にできること

RTOSを使ったプ
ログラムを動かす機構や環境の物理現象を代替する機器やデバイス間の通信を試す

実機を必要とせず、 PCの上でさまざまなシミュレータを組み合わせていろいろなことが試せる
2022/9/2© 2022, Shin Kuboaki.

5SWEST24

【その1】
マイコン制御シミュレータ＋物理シミュレータ

RTOSを使ったプログラムを動かす2022/9/2

機構や環境の物理現象を代替する© 2022, Shin Kuboaki.

6SWEST24

事例）⾃動搬送システム
リアルワールド

物理シミュレータ上のロ
ボットとコースや荷物

EV3のロボットと運搬コースや荷物

sample04-02s2.mov
switch(p_state) {case P_WAIT_FOR_LOADING:
if(! timer_is_started() ){ timer_start(10000); }if (carrier_cargo_is_loaded()) { p_state =P_TRANSPORTING; }if (timer_is_timedout()) { p_state =P_TIMED_OUT; }if( p_state != P_WAIT_FOR_LOADING ){ timer_stop(); }break;
case P_TIMED_OUT:
horn_confirmation();p_state = P_WAIT_FOR_LOADING;
break;
case P_TRANSPORTING:
tracer_run();if (walldetector_is_detected()) {p_state = P_WAIT_FOR_UNLOADING;
tracer_stop();horn_arrived();}EV3RTのプログラム

プログラムはほぼ共通

2022/9/2

マイコン制御シミュレータ
上のプログラム© 2022, Shin Kuboaki.

7
SWEST24

導⼊⼿順（1）• マイコン制御シミュレーションの環境を導⼊する

必要なもの• Windows10〜• GitHub• WSL2• Docker• Unity• Blender
箱庭プロトタイプモデルA：単体ロボット向けシミュレータ
https://github.com/toppers/hakoniwa-single_robot/
2022/9/2© 2022, Shin Kuboaki.

8SWEST24

導⼊⼿順（2）• 物理シミュレータ⽤のロボットを作る
Unity⽤のデータ作成（CAD/Blenderなど）

物理動作のためのオブジェクトの設定（可動部、センサなど）

Unity上で動作する
仮想ロボット

あらかじめ作成したプログラムと環境は下記から入手できる
https://bit.ly/3QPzJm6
2022/9/2© 2022, Shin Kuboaki.

9
SWEST24

導⼊⼿順（3）• 物理シミュレータ⽤の環境を作る

シミュレータ操作のためのUI（ボタンや表⽰）、カメラなど運搬コース、荷物、配達先等のステーションなど
2022/9/2© 2022, Shin Kuboaki.

10
SWEST24

導⼊⼿順（4）• ロボットと環境をアプリ化する• Windows⽤だと、.exeファイルとデータセットができる• アプリ化しないでUnityエディタで実⾏する⽅法もある• プログラムとアプリを配置する├── sdk│└── workspace│├── auto_transporter_01│└── base_practice_1└── unity└── assets├── auto-transporter2└── single-robot
2022/9/2© 2022, Shin Kuboaki.

EV3RTのプログラムロボットと環境

11
SWEST24

シミュレーションの実⾏• 端末A• 開発⽤dockerコンテナを起動• Unityアプリが起動すると、ログが表⽰される• 端末B• プログラムのビルド• 端末C• Unityアプリの起動• プログラムとが起動し、シミュレーションが始まる
AutoTransporter_720.mov
2022/9/2© 2022, Shin Kuboaki.

12
SWEST24

【その2】
物理シミュレータ＋ROS制御シミュレータ

機構や環境の物理現象を代替する
2022/9/2© 2022, Shin Kuboaki.

機器やデバイス間の通信を試す

13
SWEST24

昔の信号機やイギリスの信号機の例

The Signal Engineers - 1962 - Electrical Engineering on the Railwayより抜粋
https://www.youtube.com/watch?v=6Oc_50DnGG0
https://farm8.staticflickr.com/7085/13465755913_94348f4cea_z.jpg
2022/9/2© 2022, Shin Kuboaki.

SWEST24

まねをして作った信号機の実機モデル• YouTube• https://youtu.be/k168I_5-GNs• https://youtu.be/71gXzo7RDiw• GitHub• https://github.com/kuboaki/ev3_train/• プログラム、LEGOのCADデータ、モデル図など
ev3_train_normal.mp4
ev3_train_slow_down.gif
🤔 都⼼部では、鉄道の信号はGPS等を使った列⾞上の電⼦信号に変わりつつある。
⼀⽅で、運転⼠の⽬視による閉塞信号⽅式も、まだたくさん使われている
2022/9/2© 2022, Shin Kuboaki.

SWEST24

事例）信号機に従って⾛⾏する列⾞
リアルワールド
閉塞信号機

列⾞

物理シミュレータ上の列⾞と信号機と線路EV3の列⾞と信号機と線路
switch(p_state) {case P_WAIT_FOR_LOADING:
if(! timer_is_started() ){ timer_start(10000); }if (carrier_cargo_is_loaded()) { p_state =P_TRANSPORTING; }if (timer_is_timedout()) { p_state =P_TIMED_OUT; }if( p_state != P_WAIT_FOR_LOADING ){ timer_stop(); }break;
case P_TIMED_OUT:
horn_confirmation();p_state = P_WAIT_FOR_LOADING;
break;
case P_TRANSPORTING:
tracer_run();if (walldetector_is_detected()) {p_state = P_WAIT_FOR_UNLOADING;
tracer_stop();horn_arrived();}

信号機のプログラム

列⾞のプログラム
2022/9/2

ROSベースの信号機のプログラム
ROSベースの列⾞のプログラム© 2022, Shin Kuboaki.

16
SWEST24

サンプルシステムの動作シナリオ（1）• エンドレスの線路に閉塞信号機がついている• ⾞上のカラーセンサーを使って、信号機が⽰すパレットの⾊を読み取る⽅式• 列⾞は、エンドレスの線路上を周回する• 信号が「停⽌」なら、列⾞は停⽌する• 信号が「進⾏」に変わると、列⾞は⾛⾏する• 信号機は、列⾞通過監視部で列⾞の通過を認識すると、信号を「停⽌」に変える• 列⾞は、信号機の⼿前の「徐⾏」信号を通過すると、徐⾏する
2022/9/2© 2022, Shin Kuboaki.

SWEST24

サンプルシステムの動作シナリオ（2）2022/9/2© 2022, Shin Kuboaki.

SWEST24

次は、信号や列⾞を増やしたいが…
• 実機では場所や機材の⼿配が⼤変• 信号機1機にEV3が1セット…
• 列⾞1編成にEV3が1セット…
• 線路を引く場所が…

• そうだ！
箱庭でやればいい！
• まずは信号と列⾞1つずつ…
2022/9/2

URB (Universal Railway Bus) systemより抜粋
https://arduinorailwaycontrol.com/examples.html#signal-system© 2022, Shin Kuboaki.

19
SWEST24

箱庭における信号機と列⾞の構成

ROSシミュレータ上の信号機のプログラム

ROSトピック
ROSトピック
ROSトピック
ROSトピック

物理シミュレータ
上の列⾞
物理シミュレータ
上の線路等

ROSシミュレータ上の列⾞のプログラム
2022/9/2

物理シミュレータ
上の信号機© 2022, Shin Kuboaki.

20
SWEST24

導⼊⼿順（1）• ROSシミュレーションの環境を導⼊する

必要なもの• Windows10〜• GitHub• WSL2• Docker• Unity• Blender

箱庭 ROS シミュレータ
https://github.com/toppers/hakoniwa-ros2sim/2022/9/2© 2022, Shin Kuboaki.

21
SWEST24

導⼊⼿順（2）• 物理シミュレータ⽤の列⾞や信号機を作る
Unity⽤のデータ作成（CAD/Blenderなど）

物理動作のためのオブジェクトの設定（可動部、センサなど）

Unity上で動作する
仮想の信号機

あらかじめ作成したプログラムと環境は下記から入手できる
https://bit.ly/3QPzJm6
2022/9/2© 2022, Shin Kuboaki.

22
SWEST24

導⼊⼿順（3）• 物理シミュレータ⽤の環境を作る

レールの形状、レールが持つ物理制約

シミュレータ操作のためのUI（ボタンや表⽰）、カメラなど

23
2022/9/2© 2022, Shin Kuboaki.

SWEST24

導⼊⼿順（4）• ロボットと環境をアプリ化する• Windows⽤だと、.exeファイルとデータセットができる• アプリ化しないでUnityエディタで実⾏する⽅法もある• プログラムとアプリを配置する├── ros2├── unity│└── tb3└── workspace└── src├── ev3└── tb3
2022/9/2

現状、アプリ化は条件付き
Unityエディタ内での実⾏が主

物理モデルと環境信号機と列⾞のプログラム24© 2022, Shin Kuboaki.

SWEST24

シミュレーションの実⾏• 端末A• Unityアプリorエディタ• 開発⽤dockerコンテナを起動• 物理モデルのシミュレータを起動• 信号機と列⾞のプログラムをビルド• シミュレーションを開始する• エンドポイントのプログラムを起動• 端末B• 開発⽤dockerコンテナにアタッチ• 信号機のプログラムを起動• 端末C• 開発⽤dockerコンテナにアタッチ• 列⾞のプログラムを起動
2022/9/2© 2022, Shin Kuboaki.

block_signal_demo03.mp4

25
SWEST24

箱庭によって解消される実機の課題• 実機はキットの購⼊が必要• 演習するグループ数に応じたキット数が必要• 列⾞や信号機を追加するごとにキットが必要• EV3のキットは販売が終了していて、すでに購⼊が難しい• 箱庭なら、もっと⾃由に開発できる• 実機や広い場所ながくても開発できる• 信号機を増やし、線路を⻑くできる• 電池がなくならない（実機は充電式バッテリーも購⼊が困難）• とはいえ、実機が動くのも楽しいんですよね…
2022/9/2© 2022, Shin Kuboaki.

SWEST24

さらに発展させると…
• 複数の信号機で、複数の列⾞を⾛らせる• 閉塞区間が複数になる• 列⾞は信号に従うことでうまく⾛⾏できる

司令室• 司令室の設置• どの閉塞区間に列⾞がいるか把握する• 通信で信号をまとめて切り替える
いったい、EV3が何セットあればいいのか…？
2022/9/2© 2022, Shin Kuboaki.

27
SWEST24

さらに発展させると…
• 待避線とポイントを追加する• 衝突しないよう複数の列⾞を双⽅向に⾛らせる• 踏切を追加する• 列⾞の通過に合わせて、遮断器を動かす

2022/9/2

踏切のモデル（アメリカの郊外のもの）
https://farm6.staticflickr.com/5523/14036859189_30285d3944_z.jpg© 2022, Shin Kuboaki.

28
SWEST24

まとめ• 箱庭を使ったシミュレーションを実⾏した• ⾃動搬送システム• マイコン制御シミュレータ＋物理シミュレータ• 信号機に従って⾛⾏する列⾞• 物理シミュレータ＋ROS制御シミュレータ• 実機も⽋かせないが、箱庭は開発を⼤いに助ける• 実は…ソフト屋には物理モデルの作成がネック
292022/9/2© 2022, Shin Kuboaki.

SWEST24

【おまけ】
作成に使ったモデル図、信号機や列⾞の詳細
実機用のモデル図やCADデータは、GitHubから入手可能https://github.com/kuboaki/ev3_train/
2022/9/2© 2022, Shin Kuboaki.

30

SWEST24

UMLで作成した信号機のクラス図

312022/9/2© 2022, Shin Kuboaki.

SWEST24

UMLで作成した信号機のステートマシン図322022/9/2© 2022, Shin Kuboaki.

SWEST24

UMLで作成した列⾞のクラス図

332022/9/2© 2022, Shin Kuboaki.

SWEST24

UMLで作成した列⾞のステートマシン図

デモで⾒つかった不出来

34
2022/9/2© 2022, Shin Kuboaki.

SWEST24

システムの全体像• エンドレスの線路、閉塞信号機、列⾞列⾞
このような拡張も考えられる
閉塞信号機

信号機への指⽰、信号のモニター
通信2022/9/2© 2022, Shin Kuboaki.

司令室（PC）
SWEST24

システムの全体像（拡⼤）• エンドレスの線路、閉塞信号機、列⾞
列⾞
閉塞信号機

2022/9/2© 2022, Shin Kuboaki.

SWEST24

列⾞の構造• 前進、後退する、信号読み取り、警笛を鳴らす
緊急停⽌ボタン（タッチセンサー）

信号読み取り器（カラーセンサー）

警笛

2022/9/2

⾛⾏ユニット（Mモーター）© 2022, Shin Kuboaki.

SWEST24

信号機の構造（1）• 下向きパレットで進⾏・停⽌を⽰す2灯式• 列⾞は、カラーセンサーで信号を読み取る• 間⽋時の回転抑⽌• ⼗字ギアとラチェット

信号機は停⽌（⾚）
を現⽰中

列⾞は信号をカラーセンサーで読み取る

2022/9/2© 2022, Shin Kuboaki.

SWEST24

信号機の構造（2）• パレットをモーターで間⽋回転する機構• 簡素なジェネバ機構で間⽋回転を実現• 回転した数の把握• カム機構とタッチセンサー

簡素なジェネバ機構（アームと⼗字ギア）カムとタッチセンサーで回転数を把握
2022/9/2© 2022, Shin Kuboaki.

SWEST24

信号機の構造（3）• 現⽰中の信号を調べる機構• 信号の回転に合わせてカラーセンサーで読み取る

2022/9/2© 2022, Shin Kuboaki.

SWEST24

列⾞通過監視部の構造• 超⾳波センサーを使って通過を調べる
列⾞通過監視部（超⾳波センサー）

2022/9/2© 2022, Shin Kuboaki.

SWEST24

9/2(⾦) 10:20〜11:30 セッションs3b

ここから始める箱庭の活⽤―

おしまい―

久保秋 真（チェンジビジョン）
細合 晋太郎（東京⼤学）
⾼瀬 英希（東京⼤学）
2022/9/2© 2022, Shin Kuboaki.

SWEST24