ロボットシミュレータWebotsを使ってオンライン研修やってみた
LED-Camp実行委員会
祐源英俊

1

発表者自己紹介
祐源英俊（ゆうげんひでとし）• 2018年 LED-Camp6参加• 2018年より実行委員（3年目）• 教材開発グループに所属• オムロン株式会社 勤務(社会人1年目)• ジャズの演奏が趣味@Ke_N_551@ken551

2

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り

3

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り4そもそも，ってなんなん？

• 組込み初学者（学生，社会人1,2年目など）を対象とする合宿形式の研修• アジャイル，スクラム，MDDなど開発手法の講義・実践• 競技会に向けたソフトウェアをチームで開発する実習→チーム開発のコツ・難しさなどを経験的に学べる！

5競技会ではこんなことをします6競技会ではこんなことをします密密

密密密密

7

今年はこんなことをしました

8

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り9オンサイト形式のLED-Camp• 下呂温泉（山形屋）での三泊四日の合宿• 講義，開発実習，発表会など密なスケジュール• ナイトセッションを始めとする交流の機会も（LT大会，グループワークなど）• Camp7（2019年）ではLED-Tank改（右写真）を教材に使用

10

Camp7での環境（既存資産）
参加者PC

コード生
成UML図（astah*上）

既存の資産：• コントローラ用テンプレート• RasPi向けTankドライバ• Astah*に関係する知識C++• Tankの筐体• 競技会のルール
Tankコントローラ

Tank上RasPi

C++
Tankドライバ

コリンンパ
クイル・.a
実行ファイル

実行！

11

今年のLED-Camp（Camp9）は・・・？
• LED-Camp史上初の完全オンライン開催• これまでの内容に加え，オンラインコミュニケーションおよびオンラインチーム開発の経験を目的に• ロボットシミュレータWebotsを用いたバーチャル競技会を実施• 今年度の開催報告はのちほど！

12

Camp9の教育目標• 組込みシステムの開発技術を習得する• UMLを用いたモデル駆動開発• アジャイル開発手法（スクラムフレームワーク）• チーム開発を円滑にするコミュニケーション技術を習得する• 目標に向けた合意形成• メンバーの考えを引き出す話し方・聴き方• チーム状況を適切に把握するフォローアップ

13

Camp9の教育目標• 組込みシステムの開発技術を習得する• UMLを用いたモデル駆動開発• アジャイル開発手法（スクラムフレームワーク）• チーム開発を円滑にするコミュニケーション技術を習得する• 目標に向けた合意形成• メンバーの考えを引き出す話し方・聴き方• チーム状況を適切に把握するフォローアップ

14

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り

15

Webots• Cyberbotics社（スイス）が開発するロボットシミュレータ• バージョン2019aより完全オープンソースに※1（Apache 2.0)
• 物理エンジンはODEの改良版（Fork）を使用• サポート付きの有償プランあり• 日本企業での使用実績もあり※1:

Version R2019a - Webots Goes Open Source – Webots Blog
https://www.cyberbotics.com/doc/blog/Webots-2019-a-release16

Webots概要
シミュレーション画面

コードエディタ

ノード一覧(Scene Tree)

コンソール出力17

Webotsによるプロトタイプ

18

ちょっとしたデモ
お手元で体験していただけます• 以下のリポジトリからclone（あるいはダウンロード）
https://github.com/LED-Camp/LED-Camp9_SWEST23_demo• リポジトリ内に含まれるWorldを開き，ビルド＆実行• WASDでTankを操作できます（E押下で止まります）• コード上部“USE_〇〇_SENSOR”のdefineでセンサ使用/不使用を切り替え

19

特徴１：アセットのロボットが豊富
UserGuideによると車型・人型・動物型など62種類

Jetbot(NVIDIA)

Turtlebot 3
Burger(Robotis)

Create(iRobot)

Spot(BostonDynamics)
20

ちょっとしたデモ

21

特徴１：アセットのロボットが豊富
こんなものまで・・・・

Nao(SoftbankRobotics)

Sojouner(NASA)AIBO(Sony)

BB-8(Sphero)22特徴２：アセットのデバイスが豊富• アクチュエータ

プロペラ

履帯

モータ

LED

ペン

回転角センサ

距離センサ

カメラ

LiDAR

• センサ

加速度センサ※有償プランのみ使えるデバイスあり（例：HOKUYO製LiDAR，Kinectなど）

23特徴３：ロボットは木構造で管理
LED-Tank
ジョイント
車輪モータ特性

ID

前方基板
立体図形

立体図形
形

表面形

表面

物理特性

距離センサ

特性

ID

24

特徴４：ロボットはControllerから制御• ロボットに搭載されるデバイスをControllerから利用• ControllerはC, C++, Java, Python, MATLABがサポート• 1ロボットには1コントローラが紐づけ可能

デバイス指定・初期化
値（回転速度）セット25

良かった・助かった点• Windowsの場合ビルドツールが付属する（ビルド済みのMinGWコンパイラ）• 比較的低スペックPCでもそこそこ動作する• Fusion360から出力する色付き３Dモデル（.fbx）がそのまま読み込みルドツールが付属（コンパイル済み・使える• 必要なセンサ類が揃っていてControllerから直感的に叩くことができる

26

困った点・躓いた点• 英語の公式ドキュメント（と一部Youtube動画）が参考情報• 光の反射は計算されない（＝反射型カラーセンサは使えない）

開発は比較的スムーズに進んだ印象

27

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り28Camp9開催の背景• 感染症対策により合宿形式のオフライン開催が不可能に• Camp1-7はすべてオンサイト開催→既存のカリキュラム・プログラム資産では開催不可能に• Camp8（2020年）は中止し，準備期間に• 開催目的・要件・ニーズを整理• 開催したい，けど集まりはできない・・・→オンライン形式での開催を検討

29

教材の要件• そもそも動作がもっさりだとモチベーションが低下するのでは？
→動作の軽さ• 環境構築が複雑だと心折れそう＆サポート大変→環境構築（の容易さ）• 見た目がカッコいいとモチベーション上がりそう→見た目（の良さ）• なるべく現実に近い方が面白いのでは？
→シミュレーション性（Sim性）• 教材開発が大変だと実行委員が大変なことになる→開発コスト30

実機配布 or シミュレータ？
実機配布
利点
欠点

シミュレータ• 手元で動く楽しさ• より「組込み」らしい• 参加者全員に均一の競技環境• コロナ禍もあり，ナウい• これまでの知見を適用しやすい• 故障時のフォローが難しい• 配送など作業の手間がかかる• 動かす場所を確保する必要• これまでの知見が使いにくい• 高スペックのPC環境が必要• 組込み感が薄い

実機の故障と配送の手間，開発コストを心配しシミュレータを採用することに31

2D or 3D？
2D（robocodeが候補）
利点
欠点

3D

• 要求スペックを抑えられる• 開発コストを抑えられる• 何より見た目がカッコいい• いわゆる「シミュレータ」• 見た目・魅力がイマイチ• 現実から遠すぎるのでは？

• 高スペックのPC環境が必要• 開発コストの高さ

見た目と現実の再現度を重視し，３Dシミュレータを用いる方針に

32

実行環境は？
仮想環境(WSL,Docker)• Windows上でLinux利 • ナウい点 • Dockerならコンテナ配布できる• 使えるまでが複雑
欠 • スペック要件が点 上がるのでは？

クラウド(AWSなど)

直接構築• 参加者環境に非依存 • 直接実行なので• 参加者環境に非影響
要求スペックは低い• 運営コストの高さ• 予想以上にもっさり• Windows向けはややこしい傾向

実行時の軽さを考え，環境構築手順の制約を決めたうえで直接構築してもらうことに33

3Dシミュレータの選択候補として，以下のものが挙がった• Gazebo• Unity• 箱庭• ODE（内製）• Webots34

Gazebo• Open Source Robotic Foundation（OSRF）が管理する3Dロボットシミュレータ• 物理エンジンにODEを使用• ROSと連携して使われることが多い

http://www.clearpathrobotics.com/assets/guides/kinetic/moose/MooseSimulation.html

35

箱庭• 国産RTOSのTOPPERSプロジェクト内WG• 仮想化技術を組み合わせたシミュレーションを実現• 単体ロボット向けでは，ETロボコン向けシミュレータを実現，マイコンシミュレータとUnity 3D
シミュレータの同期・連携

https://toppers.github.io/hakoniwa/prototypes/

36Unity• Unity Technologiesによるゲームエンジン・プラットフォーム• IDE内蔵で，単体でC++・C#がビルド可能• 有償・無償のアセットが豊富にあり，初心者でも手軽に本格的ゲームが作成可能

37

ODE（内製）• オープンソースの物理エンジン（BSD，LGPL）• 無償利用可能な物理エンジンの中では軽量• シミュレータ利用よりさらに軽量• C++のサンプルもあり，手軽に(?)３D描画・シミュレーション

38

他候補との比較
参加者目線

実行委員目線

動作の軽さ

環境構築

見た目

Sim性

開発コスト

Gazebo

××〇〇

△

Unity

△〇〇？

×箱庭？

×〇〇

×

ODE(内製)〇×△△×

Webots△〇〇〇〇39

開催にあたっての心配事• 教育目標は達成できるか？
• 「参加者目線」の4つの教材要件は満たせるか？
動作の軽さ，環境構築，見た目，Sim性• そもそも，参加・開発が楽しいか？

開催しての結果は次次章で発表

40

発表目次1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて

4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り41プチハンズオン1:Controllerを作成しよう• 目的：ロボットを制御するControllerの作り方を学ぶ• ゴール：• Controllerの作成・追加ができる• デバイス類を制御する基本的なコードの書き方がわかる

42

Controllerを作成しよう(1/2)
1. Wizards > New Robot Controller
2. “Language”を”C++”に，“IDE”を“Webots”に，“Controller Name”を“SWEST_Handson”に指定

3. ”Open ‘SWEST_Handson.cpp‘ in Text Editorにチェックを入れてFinish
4. 画面左のViewからRobot “LED-Tank” > controllerをクリック，”select”ボタンから”SWEST_Handson”を選択

43

Controllerを作成しよう(2/2)
5. 画面右側のエディタから，SWEST_Handson.cppの一部にコードを追加（二か所↓→）

6. エディタ上部の歯車ボタンを押下し，ビルド
7. シミュレーション画面上部の再生ボタンを押し，シミュレーション実行44

プチハンズオン1:Controllerを作成しよう• このようにLED-Tankが前進します45

プチハンズオン2:Cameraを取り付けよう• 目的：ロボットにデバイスを取り付けて利用する方法を学ぶ• ゴール：• ロボットにデバイスを追加することができる• Controllerから追加したデバイスにアクセスすることができる

46

Cameraを取り付けよう(1/3)• Robot “LED-Tank”のchildrenを右クリックし，”Add New”
• Base Nodes > Camera を選択してadd• Cameraのnameを”camera_swest”に変更• View＞Optional Rendering＞Show Camera Frustumsからカメラの撮影範囲描画をOnに• Camera選択→青矢印をドラッグして車体上部へ（カメラの撮影範囲描画が確認できます）

47Cameraを取り付けよう(2/3)• 各色矢印をドラッグor座標直接入力でTank正面にCamera設置• Transition: 0, -0.13, 0.02
• Rotation: 0, 0.707105, 0.707105, 3.14159• 取得，有効化のコードをControllerに追加（詳細は次ページ）48

Cameraを取り付けよう(3/3)• 以下の画像に従ってコードを変更• 保存・ビルドして実行！

49

プチハンズオン2:Cameraを取り付けよう• このようにカメラ画像が表示されます

50

Cameraを取り付けよう:補足• Cameraなどデバイス自体は何も描画されません• 図形をつけたい場合，以下のようにSolidを作成し，Shapeと一緒にCameraをぶら下げます
LED-TankSolid(0,-1,2)

ShapeCylinder

BlackCamera“camera_swest”

51

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. ロボットシミュレータwebotsについて4. LED-Camp９教材開発裏話
5. Webotsプチハンズオン

6. Camp9開催報告・振り返り52LED-Camp9 開催実績
• 参加者11名（社会人5名，学生6名）• 8/30(月) ~ 9/1(水)の三日間• 1日目：座学• 2日目：開発• 3日目：開発・競技会

53

オンライン開発の様子

54

開催にあたっての心配事（再掲）• 教育目標は達成できるか？
• 「参加者目線」の4つの教材要件は満たせるか？
動作の軽さ，環境構築，見た目，Sim性• そもそも，参加・開発が楽しいか？

55

教育目標は達成できたか？
• どのチームもアジャイル・スクラム・MDDを実践• どのチームも競技会で動くモデル&高い得点• オンラインでの開発・コミュニケーションについてのいい感想

ただし技術的に深堀するような質問・姿勢は少なめ？

56

要件が満たせたか？
• 動作の軽さ→「重くて動かねえ！」はなし，ある程度動いてた？
• 環境構築（の容易さ）→Webotsの環境構築で躓いた参加者は確認できず• 見た目（の良さ）→動く様子を見て喜んでもらったようだった• シミュレーション性（Sim性）→ time-baseのノイズ挿入で実行のたびに異なる結果
これら要件の達成が円滑かつ意欲的な実習につながっていたのでは？

57

要件が満たせたか？
• 開発コスト→比較的スムーズに開発できたという意味では〇(5月中旬本格開発開始，7月中旬には大まかに完成)

LED-Camp/LED-Camp9(github.com)

58

アンケート結果
2日目（回答10件）

3日目（回答7件）

59

アンケート結果

60

参加者に聞いたシミュレータの長/短所• 長所• いろいろ試すのがやりやすかった• 個体差がないことによるやさしさ・公平感（「なんかわからんけど動かん」がなかった）• 「自分のコードが動いて楽しい」という感じ（見た目・Sim性が寄与？）• 短所• センサの位置等が確認しにくい（筐体が手に取れない）• やっぱり実機に触ってみたかった61オンライン研修についての気づき• 参加者が時間外開発しがち（チーム会議で「昨日の夜試したんですけど…」がちらほら）• 個人作業の様子が外から見えない（→フォローしにくい）• ブレイクアウトルームの行き来が大変（→フォローしにくい）• 他チームとの交流・情報交換が少ない（とはいえ，最終日の交流の時間は盛り上がっていた様子）

62発表まとめ• ロボットシミュレータWebotsを使用してオンライン研修してみた• Webotsはオープンソースのロボットシミュレータ
比較的軽量かつすぐに慣れるインタフェース• オンラインでも参加者には楽しんでもらえる（ただし主催側のサポートは少ししんどい）• 検討した4要件はかなり重要では？

• 実行委員大募集中！！！！
63ここからは・・・？
Webotsやオンライン研修について語りあいましょう！
• デモ・ハンズオンの延長戦• LED-Campの定めた教材要件についてのご意見• LED-Camp9開催してみてどうだったの？聞きたい！
• オンライン研修をやってみようと思うけど・・・• オンライン研修やってみたらこうだった！

64以下，補足資料65• 教材について定めた要件を達成できたか？
• 事後アンケートから，参加者はどう感じていたか？

66

メモ• 結構重たさに苦しんでる様子はなさそう• 議論するときは，一つの画面を見ながらあーでもないこーでもないしている→課
題はある程度難しい・考える余地がある方がいい？
• 個人作業の時は作業の内容が見えないことが多い→フォローがしにくい• 実行してみてわかる不具合がやっぱり多い・・・・• フォローが結構大変（実行委員7,8人，参加者11人3チーム）• やっぱりサビ残してたみたい• 他チームの動きが見えないので良くも悪くも成果物にばらつきが• どうしても個人開発したものを組み合わせる形になる

67

参加者からの声• センサの位置など筐体の特徴がわかりにくい→センサー位置は物理的に見えるようにした方がいい• 実機の個体差がなかった，「なんかわからんけど動かん」がなかった• 見知らぬ人同士に意味を感じた• シミュレータは重さを感じなかった• 何回も試せてよかった• とはいえ実機触ってみたかった• ステートマシン図から直接生成して動いたのが面白かった• シミュレータが結構簡単に動いてよかった

68参加者の想定を基にした教材の要件• 教育目標を達成できる教材であること• アジャイル，スクラム，MDDを実践できる• オンラインでコミュニケーションをとりながらチーム開発できる• 組込み初学者の参加を想定としたものであること• Windows環境でできること• 開発環境やその構築が複雑でないこと• ある程度のランダム要素が含まれること• ある程度快適に演習ができること• 見た目がいいこと

69

Camp7での環境（既存資産）
参加者PC

コード生
成UML図（astah*上）

既存の資産：• コントローラ用テンプレート• RasPi向けTankドライバ• Astah*に関係する知識C++• Tankの筐体• 競技会のルール
Tankコントローラ

Tank上RasPi

C++
Tankドライバ

コリンンパ
クイル・.a
実行ファイル

実行！

70

既存資産を基にした教材の要件• astah*のUML図から生成するコードが使えること• 別プロセスで立ち上げて通信？
• リンクさせて同一の実行ファイルに？
• 動的リンクライブラリ（DLL）を利用？

• Windows上に構築できるビルドツールを使用すること• CYGWIN? MSYS? WSL?

• Camp7の競技ルールを再現できること

72

発表目次
1. はじめに
2. LED-Campってどんなイベント？
3. LED-Camp９の議論

4. LED-Camp９での教材開発議論
5. ロボットシミュレータwebotsについて

6. Camp9開催報告・振り返り73