Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
実践ロボットプログラミング

LEGO Mindstorms EV3 で目指せロボコン!
CU-Robocon講習会


WEB:http://robot-programming.jp/
担当:藤吉弘亘(中部大学工学部ロボット理工学科)
E-m...
■ ロボットとは
2
ロボットとは?
• その定義を考えてみよう                         
3
国語大辞典によると:
「人間に類似した形態をもち、自動的に作業を行う機械装置」
おすすめ:
「感じる、判断する、動くの三つがそなわっている人工物」...
ロボットにおける要素技術
4
感じる、判断する、動くがそなわっている人工物
センシング技術
外界の情報をセンサを介して取り込む
(カメラ,レーザーセンサ等)
人工知能技術
センサ情報を基に状況を判断
(機械学習)
制御技術
状況判断に合わせた制...
■ LEGO Mindstormsについて
5
RIS NXT EV3
発売時期 1998年 2006年 2013年
CPU H8(8 bit) ARM7(32 bit) ARM9(32 bit)
クロック周波数 16MHz 48MHz 300MHz
RAM 32KB 64KB 64MB
フ...
LEGOロボットEV3の構成
• 入力:超音波センサ、カラーセンサ、ジャイロセンサ、タッチセンサ     
• 出力:Lモータ、Mモータ
超音波センサ
カラーセンサ
ジャイロセンサ
タッチセンサ
Mモータ
Lモータ
7
プログラミング環境:EV3ソフトウェア
8
■ロボットの組み立て
9
ロボットの組み立て
ロボットエデュケーション 組み立てガイド トレーニングボット
説明書を参考にトレーニングボットを組み立てましょう!
10
■プログラムを作成するには
11
1. PC上でソフトウェア(EV3-SW)を用いてプログラムを作成
2. USB/Bluetoothでロボットへダウンロード
3. ロボット上でプログラムを実行
プログラム実行までの流れ
USB
12
EV3ソフトウェア
1. EV3ソフトウェアを起動
2. 新規プロジェクトの作成
– 新規プロジェクト プログラム 開く
クリック! クリック! クリック!
13
プログラミングパレット
プログラミングキャンパス
スタートブロック
ツールバー
EV3ソフトウェアの画面構成
14
プログラミングパレット
動作
フロー
センサ
データ
15
■音をならしてみよう
16
音を鳴らすプログラムの設計図(PAD)
17
処理の流れ
音を鳴らす EV3と音を鳴らす
3秒間待機
無限ループ
1
2
3
反復:処理: 選択:
PADの構成部品:
• 指定したサウンドファイルを無限ループで再生
PAD(Problem An...
1
2
ループ
音
音量:0∼100(大)
無限ループ
3 待機
時間:3秒
• 指定したサウンドファイルを無限ループで再生
音を鳴らすプログラム
サウンドファイルを指定
18
スタートブロック
1. プログラム名を sound に変更
– プログラム名は半角の英数字のみ
2. ロボットが接続されているか確認 : ○:
3. ダウンロードボタンによりプログラムを転送
4. ロボット上でプログラムを実行
19
プログラムの転送
ダウンロー...
プログラムの実行
20
電池の残量
USBコネクション
Bluetooth
ブリックの名前
1
3
323
3
バックボタン
(キャンセル)
センターボタン
(決定)
3 上/下/左/右ボタン
プログラムを選択してセンターボタンで実行
(プログ...
プログラムの実行
• 実行前にすべきこと
‒ ケーブルを外して、安全確認
‒ プログラムのアルゴリズムを頭の中で実行
• 実行時の注意
‒ ロボットの動作をよく観察し、設計図(PAD)通りにアルゴリズム
が実現できているかを確認
‒ ロボットが...
トライ&エラーによる問題解決
22
実現したいロボット アルゴリズムを考える
設計図の作成
無限ループ 実行
ロボットは設計図
通りに動いた?
プログラムの作成
終了
プログラムの修正
True
False
トライ&エラーを繰り返す
• ロボッ...
23
• USBケーブルをつなげたままプログラムを実行
デバッグ方法
ココに注目!
1 ループ
2 音 3 待機
ロボットにおける要素技術
24
感じる、判断する、動くがそなわっている人工物
■ロボットを前進させるには(モータ制御1)
■ロボットを回転させるには(モータ制御2)
■演算と変数
■ロボットを前進させるには(モータ制御1)
25
モータの接続
• EV3のどの出力ポートにモータが接続されているか確認
26
左のモータ:B 右のモータ:C
進行方向
前進プログラムのPAD
27
• ロボット(モータB+C)を3秒前進、その後2秒後退
前進と後退 モータB+Cを前進
3秒持続
1
2
モータB+Cを後退
2秒間持続
}
}
タンクブロック
モータ制御によるロボットの前進 (ステアリングブロック)
28
• ロボット(モータB+C)を3秒前進、その後2秒後退
スタートブロック
1 2前進 後退
モータを時間指定で制御→
パワー:50
秒数:3秒
ブレーキ:ON
モータが接続されてい...
モータ制御によるロボットの前進 (タンクブロック)
29
• ロボット(モータB+C)を3秒前進、その後2秒後退
スタートブロック
1 2前進 後退
モータを時間指定で制御→
Cのパワー:50
秒数:3秒
ブレーキ:ON
モータが接続されている...
Lモータの原理
30
段数:7段 トルク比率:45:1 エンコーダの回転角:2度
曲線の動きを実現するには
31
左のモータ:B 右のモータ:C
• モータBとCのパワーの値のバランスを変えてみよう
パワー: 50 パワー: 40
B: 50 C: 50 B: 50 C: 40 B: 50 C: 30
ステアリング: 0 ステアリング: 10 ステアリング: 20
曲線の動きを実現するには
32
タンクブロック
ステアリングブロック
33
■ロボットを回転させるには(モータ制御2)
ロボットの回転
• ロボットを右回転(その場で旋回)させるには
逆方向順方向
34
左のモータ:B 右のモータ:C
右回転プログラムのPAD
• 左のモータBを順回転、右のモータCを逆回転
35
前進と後退
3秒持続
モータB+Cを前進
モータBを順回転
モータCを逆回転
2秒間持続
回転中心
モータB
順方向に回転
モータC
逆方向に回転
1
2
}
}
ロボットの右回転
• 左のモータBを順回転、右のモータCを逆回転
36
スタートブロック
1 2前進 右回転
モータBのパワー:
50(順回転)
モータCのパワー:
-50(逆回転)
ロボットを90度右回転させるには?
37
90度
1. 時間制御
モータのパワーと持続時間を調整
• どのように実現するか考えてみよう!
2. 回転制御
モータの回転数もしくは角度を調整
→複数の問題解決方法があるので、いろいろと試してみよう!...
ロボットを90度右回転させるには
38
→回転制御の方が便利(同じ動きでロボットを早くしたいとき等)
モータのパワーと持続時間を調整
1. 時間制御
持続時間:1.5秒
パワーを変更すると
→持続時間の再調整が必要
モータの回転数もしくは角度を...
ロボットを一周させるには?
39
1回目
3秒前進→90度回転
3回目
3秒前進→90度回転
2回目
3秒前進→90度回転
4回目
3秒前進→90度回転
• 3秒前進と90度右回転を4回繰り返せばよい
• 繰り返し処理(ループブロック)を利用
ロボットを一周させるには?
40
1回目
3秒前進→90度回転
3回目
3秒前進→90度回転
2回目
3秒前進→90度回転
4回目
3秒前進→90度回転
...
ロボットを一周させるには
• 3秒前進と90度右回転を4回繰り返す
41
1
2
ループ
3秒前進
カウント:4
3 90度右回転
カウントを指定
一周するプログラムのPAD
42
4回繰り返し
3秒持続
モータB+Cを前進
モータBを順回転
モータCを逆回転
90度右回転
2
3
}
}
1周 1
• 3秒前進と90度右回転を4回繰り返す
反復:処理: 選択:
PADの構成部品:
• 星形やスパイラルの軌跡を描くロボットを実現してみよう!
■■ チャレンジ! ■■
43
これは
簡単かも! …
44
■演算と変数
• モータの回転角を変化させたときの直進距離を測定し法則をみ
つける
角度:
180∼1440度
50cm前進するには?
45
角度[ ] 距離[cm]
1cmあたりの
回転角度
180 9.0 20.0
360 17.5 20.6
720 3...
• 四則演算結果をモータの回転角度に反映して前進制御
50cm前進するには?
46
直進したい距離:50cm
1cmあたりの回転角度:20.5
演算子を選択
a□b= a b=の結果を引き渡す(データワイヤ)
• 星形やスパイラルの軌跡を描くロボットの動きを実現してみよ
う!
スパイラル軌跡に挑戦しよう
47
これは簡単! …
• 繰り返し回数ごとのロボットの動きを表にしてみよう
実現したい動きの規則性
48
前進 右回転回数
1 10cm  90度
2 20cm  90度
3 30cm  90度
4 40cm  90度
5 50cm  90度
6 60cm  90度...
• 規則性を数式で表現
実現したい動きの規則性
49
前進 右回転回数
1 10cm   90度
2 20cm   90度
3 30cm   90度
4 40cm   90度
5 50cm   90度
6 60cm   90度
7 70cm  ...
• 変数:値を代入できる箱(変数ブロック)
変数の導入
50
回数←回数+1回数←1
cnt
1
cnt
1+1
cnt
1を代入
読み込み 書き込み
1を書き込み 読み込み 書き込み
変数名を設定
cnt
足し算
スパイラル状の軌跡のPAD
51
無限ループ
前進
cnt 10cm 20.5
計算結果だけ持続
90度右回転
4
}
2
• 繰り返し回数cntと演算によりスパイラル軌跡を実現
cnt←1スパイラル 1
cnt←cnt+1 6
5
3
スパイラル状の軌跡
52
• 繰り返し回数cntと演算によりスパイラル軌跡を実現
1
2
3 4 5 6
cnt←cnt+1cnt←1
ロボットにおける要素技術
53
感じる、判断する、動くがそなわっている人工物
■障害物回避(タッチセンサ)
■障害物回避(超音波センサ)
■カラーセンサによるライントレース
■ジャイロセンサを用いたモータ制御
■障害物回避(タッチセンサ)
54
タッチセンサの原理
タッチセンサの測定原理
スイッチボタンの状態を、押されていないときは 0 、押されたら 1 ,
離したときに 2 を出力する
スイッチボタン
55
• EV3の入力ポート1にタッセンサを接続
タッチセンサの接続
入力ポート1
※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート1である必要はない
56
1. 常にロボットを前進 →無限ループの利用
2. タッチセンサによる障害物の衝突を判定 →条件分
   衝突あり:一定時間後退し右回転.その後1. に戻る
   衝突なし:1.に戻る
タッチセンサによる障害物回避
障害物
後退
回転
}3.
...
• タッチセンサによる条件分岐
タッチセンサによる障害物回避のPAD
条件分岐:スイッチブロック
タッチセンサが
押された
前進 2
タッチセンサに
よる障害物回避
1
4
無限ループ
45度右回転
前進
3
5
True
False
反復:処...
• タッチセンサによる条件分岐
タッチセンサによる障害物回避
タッチセンサが押された
タッチセンサが押されてない
59
• タッチセンサによる条件分岐
タッチセンサによる障害物回避
タッチセンサを指定
1
2 3
4 5
無限
60
■障害物回避(超音波センサ)
61
超音波センサによる障害物回避
30cm前に障害物発見!
ぶつからないように回避しよう
62
超音波センサ
超音波センサの測定原理
超音波を発信し、対象物で反射した超音波を受信し、この音波の発信
から受信までの時間を計測することで対象物までの距離を計測
発信素子受信素子
63
• EV3の入力ポート4に超音波センサを接続
超音波センサの接続
入力ポート4
※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート4である必要はない
64
1. 常にロボットを前進 →無限ループの利用
2. 障害物までの距離を計測
   30cm以下(障害物あり):右回転.その後1. に戻る
   30cm以上(障害物なし):1.に戻る
超音波センサによる障害物回避
→後退する動作を必要としない
...
• 超音波センサの値により条件分岐して障害物回避
超音波センサによる障害物回避のPAD
障害物との距離が
30cm以下
前進 2
超音波センサに
よる障害物回避
1
4
無限ループ
45度右回転
3
True
False
66
•超音波センサの値により条件分岐して障害物回避
超音波センサによる障害物回避
1
2 3
4
< 30cm
超音波センサ(cm)を指定
67
■カラーセンサによるライントレース
68
カラーセンサ
カラーセンサの測定原理
LEDにより赤、緑、青の光を照射して、それぞれの反射量(R, G, B成
分)をフォトダイオードで計測して,カラーに変換
フォトダイオード
LED
69
カラーセンサ
• 二種類のしくみで色や光の強さを計測
RGB値
色
反射光の強さ
RGB値
周辺の光の強さ
フォトダイオード
R
G
B
R
G
B
LED反射光の計測
周辺光の計測
フォトダイオード
70
光の三原色とカラー(加法混色)
• 赤(R),緑(G),青(B)の3色を組み合わせて色彩を表現
色番号 R G B
1: 黒 0 0 0
2: 青 0 0 大
3: 緑 大 0 0
4: 黄 大 大 0
5: 赤 大 0 0
6: 白 大 大 ...
• LEDを切り替えて発光し、そのタイミングでの反射光を計測し
て、カラーを計測
カラーセンサの原理
LED:赤 R:
G:
B:
72
• LEDを切り替えて発光し、そのタイミングでの反射光を計測し
て、カラーを計測
カラーセンサの原理
LED:緑 R:
G:
B:
73
• LEDを切り替えて発光し、そのタイミングでの反射光を計測し
て、カラーを計測
カラーセンサの原理
LED:青 R:
G:
B:
黄色
オシロスコープで計測してみたところ:
1秒間に1,000回、R,G,Bと切り替えて発光し、
同期してフォト...
• EV3の入力ポート3にカラーセンサを接続
カラーセンサの接続
入力ポート3
※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート3である必要はない
75
ライントレースの考え方
• カラーセンサの 反射光の強さ を利用して白と黒に判別
• 白(明るい)ところでは右回転,黒(暗い)ところでは左回転
白いところ→右回転
黒いところ→左回転
76
ライントレースのPAD
• 白(明るい)ところでは右回転,黒(暗い)ところでは左回転
反射光 > 40ライントーレス 1
3
無限ループ
右回転
2
True
False
4左回転
回転中心
モータB
順方向に回転
モータC
停止(パワー0)
...
• 白(明るい)ところでは右回転,黒(暗い)ところでは左回転
ライントレース
1
2
3
4
カラーセンサ-比較-反射光の強さを指定
> 50
78
ライントレースの改良
ジグザグ走行なので遅い!
①黒のライン上→前進 ②白→左右に回転して
黒のライン探索
79
カラーの利用(PAD)
• カラーに合わせて複数に分岐
カラー?
カラーに合わせ
て複数分岐
1
3
無限ループ
ステータスライトを赤
6
その他
緑
赤 4
5ステータスライトをオフ
ステータスライトを緑
1秒間待機
2
カラー:緑
ステータ...
カラーの利用
1
2
3
4
5
6
条件:緑
条件:赤
条件:その他
条件の追加
1秒間待機
81
カラーの利用
カラーセンサ-測定-色を指定
1
2
3
4
5
6
条件の追加
緑ライト
赤ライト
ライトオフ
1秒間待機
82
■ジャイロセンサを用いたモータ制御
83
ジャイロセンサの原理
ジャイロセンサの測定原理
ジャイロセンサは角速度センサとも呼ばれ、単位時間あたりの回転角
である角速度[degree/s]を計測
ジャイロチップ
(InvenSense社)
ジャイロセンサ
85
• EV3のジャイロセンサは一軸の回転角/角速度を計測
回転角 [degree]
角速度 [degree/sec]
ジャイロセンサによる旋回角度制御(PAD)
• ジャイロセンサの角度が90度以上になるまで右回転
86
ジャイロセンサのリセット
ジャイロセンサ
による制御
2 3角度<90 右回転
4モータの停止
1
ジャイロセンサによる旋回角度制御
87
• ジャイロセンサの角度が90度以上になるまで右回転
角度をリセット
90度以上になるまで
繰り返し
モータのオフ
(ブレーキ)
1
2
3 4
■マイブロック
88
マイブロック化
①マイブロック化したい複数のブロックをドラッグにより選択
② ツール マイブロックビルダー を起動
③マイブロックの名前やアイコンを決定
89
マイブロックの設定
マイブロック
の名前
アイコンの選択
内容を記入
90
マイブロックの利用
マイブロックパレット
91
マイブロック
■ディスプレイへの表示
92
ディスプレイの座標
0 177
127
x
y
0 21
12
¦x¦
グリッド座標
ピクセル座標
y
¦¦
93
テキストの表示
0 177
127
x
y
0 21
12
¦x¦
グリッド座標
ピクセル座標
MINDSTORMS
HELLO!
表示したい文字列を入力
y¦¦
テキスト→ピクセル
テキスト→グリッド
94
図形の表示
0 177
127
x
y
表示したい文字列を入力
図形→円形
図形→長方形
0 177
127
x
y
(50,20)
(50,20)
40
80
80
95
• 超音波センサの値を液晶ディスプレイに表示
‒ デバッグに重要
超音波センサの値を表示
96
• 超音波センサの値を読み取り、テキストをディスプレイに表示
超音波センサの値を表示(PAD)
距離の読み取り 2
超音波センサ
ディスプレイ表示
1無限ループ
テキストを表示 3
97
• 超音波センサの値を読み取り、テキストをディスプレイに表示
超音波センサの値を表示
1
2 3
測定-接近度を指定
ワイヤーテキスト
黄   :数値
緑   :ロジック(正偽値)
オレンジ:テキスト(文字)
データワイヤの色と意味
98
図形の繰り返し表示(PAD)
• 図形1と図形2を繰り返しにディスプレイに表示
図形1の表示 2図形の表示 1無限ループ
1秒間保持 3
図形2の表示 4
1秒間保持 5
99
• 図形1と図形2を繰り返しにディスプレイに表示
並列タスク
1
2 4
1秒 1秒
3 5
100
• 障害物までの距離が小さくなるほど大きくなる円を表示
■課題
0 177
127
x
y
(89,64)
r
101
■並列タスク
102
• シングルタスクと並列タスク
シングルタスク
→ライントレースと障害物回避を同時に行うには並列タスクを利用
103
PADによる並列タスクの図示
反射光 > 40ライントーレス 3
5
無限ループ
右回転
4
True
False
6左回転
1
並列タスク
ライントレースプログラムを起動
2障害物回避プログラムを起動
1
障害物との距離が
30cm以下
超音...
1
並列タスク
2
4
3
5
6
7
8
9
ライントレース
障害物回避
ケーブルを分岐
105
並列タスクにおける問題
• 命令の衝突(コンフリクト)
‒ タスクAがタスクBの実行を妨害
‒ 同時にモータを制御
タスクA:前進
モータBCを順方向に回転
タスクB:後退
モータBCを逆方向に回転
どっちを実行すればいいの?
106
セマフォ(信号灯)
107
セマフォ(信号灯)
108
セマフォ(信号灯)
109
セマフォ(信号灯)
110
セマフォによるコンフリクトの回避
111
• モータ制御の前に、セマフォによる待機とセマフォに偽を代入
• モータ制御の後には、セマフォに真を代入
セマフォによるコンフリクト回避
セマフォの値が真になるまで セマフォに偽を代入
セマフォに真を代入
モータ制御前 モータ制御 モータ制御後...
セマフォによるコンフリクト回避
変数に真を代入
113
藤吉  弘亘  (Hironobu  Fujiyoshi)  

中部⼤大学  ⼯工学部情報⼯工学科(ロボット理理⼯工学科),⼤大学院⼯工学研究科情報⼯工学専攻  教授  
1997年年  中部⼤大学⼤大学院  博⼠士後期課程修了了

1997...
[WEBサイト]
http://www.robot-programming.jp/
[単行本]
実践ロボットプログラミング
LEGO Mindstorms NXTで目指せロボコン!
近代科学社
ISBN-13: 978-4764903784
[電子書籍iBook]
NXT-SWによる実践ロボットプログラミング
近代科学社
https://itunes.apple.com/jp/book/
id902846245
[電子書籍iBook]
NXCによる実践ロボットプログラミング
近代科...
Upcoming SlideShare
Loading in …5
×

Tutorial for robot programming with LEGO mindstorms EV3

23,646 views

Published on

LEGO Mindstorms EV3を用いたロボットプログラミングのチュートリアル

Published in: Education
  • Be the first to comment

Tutorial for robot programming with LEGO mindstorms EV3

  1. 1. 実践ロボットプログラミング
 LEGO Mindstorms EV3 で目指せロボコン! CU-Robocon講習会 
 WEB:http://robot-programming.jp/ 担当:藤吉弘亘(中部大学工学部ロボット理工学科) E-mail:hf@cs.chubu.ac.jp 
 1
  2. 2. ■ ロボットとは 2
  3. 3. ロボットとは? • その定義を考えてみよう                          3 国語大辞典によると: 「人間に類似した形態をもち、自動的に作業を行う機械装置」 おすすめ: 「感じる、判断する、動くの三つがそなわっている人工物」 (東嶋和子)
  4. 4. ロボットにおける要素技術 4 感じる、判断する、動くがそなわっている人工物 センシング技術 外界の情報をセンサを介して取り込む (カメラ,レーザーセンサ等) 人工知能技術 センサ情報を基に状況を判断 (機械学習) 制御技術 状況判断に合わせた制御 (制御理論)
  5. 5. ■ LEGO Mindstormsについて 5
  6. 6. RIS NXT EV3 発売時期 1998年 2006年 2013年 CPU H8(8 bit) ARM7(32 bit) ARM9(32 bit) クロック周波数 16MHz 48MHz 300MHz RAM 32KB 64KB 64MB フラッシュメモリ なし 256KB 16MB 転送方法 赤外線通信 USB/Bluetooth U/B + WiFi ポート数 入力:3 出力:3 入力:4 出力:3 入力:4 出力:4 駆動 電池 電池/バッテリーパック 電池/バッテリーパック 第一世代RCX 第二世代:NXT 第三世代:EV3 6
  7. 7. LEGOロボットEV3の構成 • 入力:超音波センサ、カラーセンサ、ジャイロセンサ、タッチセンサ      • 出力:Lモータ、Mモータ 超音波センサ カラーセンサ ジャイロセンサ タッチセンサ Mモータ Lモータ 7
  8. 8. プログラミング環境:EV3ソフトウェア 8
  9. 9. ■ロボットの組み立て 9
  10. 10. ロボットの組み立て ロボットエデュケーション 組み立てガイド トレーニングボット 説明書を参考にトレーニングボットを組み立てましょう! 10
  11. 11. ■プログラムを作成するには 11
  12. 12. 1. PC上でソフトウェア(EV3-SW)を用いてプログラムを作成 2. USB/Bluetoothでロボットへダウンロード 3. ロボット上でプログラムを実行 プログラム実行までの流れ USB 12
  13. 13. EV3ソフトウェア 1. EV3ソフトウェアを起動 2. 新規プロジェクトの作成 – 新規プロジェクト プログラム 開く クリック! クリック! クリック! 13
  14. 14. プログラミングパレット プログラミングキャンパス スタートブロック ツールバー EV3ソフトウェアの画面構成 14
  15. 15. プログラミングパレット 動作 フロー センサ データ 15
  16. 16. ■音をならしてみよう 16
  17. 17. 音を鳴らすプログラムの設計図(PAD) 17 処理の流れ 音を鳴らす EV3と音を鳴らす 3秒間待機 無限ループ 1 2 3 反復:処理: 選択: PADの構成部品: • 指定したサウンドファイルを無限ループで再生 PAD(Problem Analysis Diagram)はプログラムの設計図
  18. 18. 1 2 ループ 音 音量:0∼100(大) 無限ループ 3 待機 時間:3秒 • 指定したサウンドファイルを無限ループで再生 音を鳴らすプログラム サウンドファイルを指定 18 スタートブロック
  19. 19. 1. プログラム名を sound に変更 – プログラム名は半角の英数字のみ 2. ロボットが接続されているか確認 : ○: 3. ダウンロードボタンによりプログラムを転送 4. ロボット上でプログラムを実行 19 プログラムの転送 ダウンロード:プログラムを転送 ダウンロード&実行:転送して実行 選択範囲を実行:選択した内容を実行
  20. 20. プログラムの実行 20 電池の残量 USBコネクション Bluetooth ブリックの名前 1 3 323 3 バックボタン (キャンセル) センターボタン (決定) 3 上/下/左/右ボタン プログラムを選択してセンターボタンで実行 (プログラム終了はバックボタン)
  21. 21. プログラムの実行 • 実行前にすべきこと ‒ ケーブルを外して、安全確認 ‒ プログラムのアルゴリズムを頭の中で実行 • 実行時の注意 ‒ ロボットの動作をよく観察し、設計図(PAD)通りにアルゴリズム が実現できているかを確認 ‒ ロボットが思い通りに動かないときは、ロボットがどこまで設計 図通りに動いたかを調べ、プログラムを修正(デバッグ)する 21
  22. 22. トライ&エラーによる問題解決 22 実現したいロボット アルゴリズムを考える 設計図の作成 無限ループ 実行 ロボットは設計図 通りに動いた? プログラムの作成 終了 プログラムの修正 True False トライ&エラーを繰り返す • ロボットを思い通りに動かすには →設計図通りにロボットが動くまでトライ&エラーを繰り返して問題解決
  23. 23. 23 • USBケーブルをつなげたままプログラムを実行 デバッグ方法 ココに注目! 1 ループ 2 音 3 待機
  24. 24. ロボットにおける要素技術 24 感じる、判断する、動くがそなわっている人工物 ■ロボットを前進させるには(モータ制御1) ■ロボットを回転させるには(モータ制御2) ■演算と変数
  25. 25. ■ロボットを前進させるには(モータ制御1) 25
  26. 26. モータの接続 • EV3のどの出力ポートにモータが接続されているか確認 26 左のモータ:B 右のモータ:C 進行方向
  27. 27. 前進プログラムのPAD 27 • ロボット(モータB+C)を3秒前進、その後2秒後退 前進と後退 モータB+Cを前進 3秒持続 1 2 モータB+Cを後退 2秒間持続 } } タンクブロック
  28. 28. モータ制御によるロボットの前進 (ステアリングブロック) 28 • ロボット(モータB+C)を3秒前進、その後2秒後退 スタートブロック 1 2前進 後退 モータを時間指定で制御→ パワー:50 秒数:3秒 ブレーキ:ON モータが接続されている ポートを指定 (自動で設定される) パワーの値をマイナス にすると後退 秒数:2秒
  29. 29. モータ制御によるロボットの前進 (タンクブロック) 29 • ロボット(モータB+C)を3秒前進、その後2秒後退 スタートブロック 1 2前進 後退 モータを時間指定で制御→ Cのパワー:50 秒数:3秒 ブレーキ:ON モータが接続されている ポートを指定 (自動で設定される) パワーの値をマイナス にすると後退 秒数:2秒 Bのパワー:50
  30. 30. Lモータの原理 30 段数:7段 トルク比率:45:1 エンコーダの回転角:2度
  31. 31. 曲線の動きを実現するには 31 左のモータ:B 右のモータ:C • モータBとCのパワーの値のバランスを変えてみよう パワー: 50 パワー: 40
  32. 32. B: 50 C: 50 B: 50 C: 40 B: 50 C: 30 ステアリング: 0 ステアリング: 10 ステアリング: 20 曲線の動きを実現するには 32 タンクブロック ステアリングブロック
  33. 33. 33 ■ロボットを回転させるには(モータ制御2)
  34. 34. ロボットの回転 • ロボットを右回転(その場で旋回)させるには 逆方向順方向 34 左のモータ:B 右のモータ:C
  35. 35. 右回転プログラムのPAD • 左のモータBを順回転、右のモータCを逆回転 35 前進と後退 3秒持続 モータB+Cを前進 モータBを順回転 モータCを逆回転 2秒間持続 回転中心 モータB 順方向に回転 モータC 逆方向に回転 1 2 } }
  36. 36. ロボットの右回転 • 左のモータBを順回転、右のモータCを逆回転 36 スタートブロック 1 2前進 右回転 モータBのパワー: 50(順回転) モータCのパワー: -50(逆回転)
  37. 37. ロボットを90度右回転させるには? 37 90度 1. 時間制御 モータのパワーと持続時間を調整 • どのように実現するか考えてみよう! 2. 回転制御 モータの回転数もしくは角度を調整 →複数の問題解決方法があるので、いろいろと試してみよう!(試行錯誤しよう) ヒント
  38. 38. ロボットを90度右回転させるには 38 →回転制御の方が便利(同じ動きでロボットを早くしたいとき等) モータのパワーと持続時間を調整 1. 時間制御 持続時間:1.5秒 パワーを変更すると →持続時間の再調整が必要 モータの回転数もしくは角度を調整 2. 回転制御 回転角:180度 パワーを変更しても →回転角の再調整は必要なし
  39. 39. ロボットを一周させるには? 39 1回目 3秒前進→90度回転 3回目 3秒前進→90度回転 2回目 3秒前進→90度回転 4回目 3秒前進→90度回転
  40. 40. • 3秒前進と90度右回転を4回繰り返せばよい • 繰り返し処理(ループブロック)を利用 ロボットを一周させるには? 40 1回目 3秒前進→90度回転 3回目 3秒前進→90度回転 2回目 3秒前進→90度回転 4回目 3秒前進→90度回転 100周するには?→800個のブロックを並べる必要があり!
  41. 41. ロボットを一周させるには • 3秒前進と90度右回転を4回繰り返す 41 1 2 ループ 3秒前進 カウント:4 3 90度右回転 カウントを指定
  42. 42. 一周するプログラムのPAD 42 4回繰り返し 3秒持続 モータB+Cを前進 モータBを順回転 モータCを逆回転 90度右回転 2 3 } } 1周 1 • 3秒前進と90度右回転を4回繰り返す 反復:処理: 選択: PADの構成部品:
  43. 43. • 星形やスパイラルの軌跡を描くロボットを実現してみよう! ■■ チャレンジ! ■■ 43 これは 簡単かも! …
  44. 44. 44 ■演算と変数
  45. 45. • モータの回転角を変化させたときの直進距離を測定し法則をみ つける 角度: 180∼1440度 50cm前進するには? 45 角度[ ] 距離[cm] 1cmあたりの 回転角度 180 9.0 20.0 360 17.5 20.6 720 34.5 20.8 1080 52.5 20.5 1440 69.5 20.4 ※1cmあたりの回転角度 =回転角度[ ] / 距離[cm] 中央値 回転角度 = 直進したい距離 1cmあたりの回転角度 20.5度
  46. 46. • 四則演算結果をモータの回転角度に反映して前進制御 50cm前進するには? 46 直進したい距離:50cm 1cmあたりの回転角度:20.5 演算子を選択 a□b= a b=の結果を引き渡す(データワイヤ)
  47. 47. • 星形やスパイラルの軌跡を描くロボットの動きを実現してみよ う! スパイラル軌跡に挑戦しよう 47 これは簡単! …
  48. 48. • 繰り返し回数ごとのロボットの動きを表にしてみよう 実現したい動きの規則性 48 前進 右回転回数 1 10cm  90度 2 20cm  90度 3 30cm  90度 4 40cm  90度 5 50cm  90度 6 60cm  90度 7 70cm  90度 8 80cm  90度 9 90cm  90度 10cm
  49. 49. • 規則性を数式で表現 実現したい動きの規則性 49 前進 右回転回数 1 10cm   90度 2 20cm   90度 3 30cm   90度 4 40cm   90度 5 50cm   90度 6 60cm   90度 7 70cm   90度 8 80cm   90度 9 90cm   90度 1 10 前進する距離 = 10cm 回数 回数←回数+1 回数←1
  50. 50. • 変数:値を代入できる箱(変数ブロック) 変数の導入 50 回数←回数+1回数←1 cnt 1 cnt 1+1 cnt 1を代入 読み込み 書き込み 1を書き込み 読み込み 書き込み 変数名を設定 cnt 足し算
  51. 51. スパイラル状の軌跡のPAD 51 無限ループ 前進 cnt 10cm 20.5 計算結果だけ持続 90度右回転 4 } 2 • 繰り返し回数cntと演算によりスパイラル軌跡を実現 cnt←1スパイラル 1 cnt←cnt+1 6 5 3
  52. 52. スパイラル状の軌跡 52 • 繰り返し回数cntと演算によりスパイラル軌跡を実現 1 2 3 4 5 6 cnt←cnt+1cnt←1
  53. 53. ロボットにおける要素技術 53 感じる、判断する、動くがそなわっている人工物 ■障害物回避(タッチセンサ) ■障害物回避(超音波センサ) ■カラーセンサによるライントレース ■ジャイロセンサを用いたモータ制御
  54. 54. ■障害物回避(タッチセンサ) 54
  55. 55. タッチセンサの原理 タッチセンサの測定原理 スイッチボタンの状態を、押されていないときは 0 、押されたら 1 , 離したときに 2 を出力する スイッチボタン 55
  56. 56. • EV3の入力ポート1にタッセンサを接続 タッチセンサの接続 入力ポート1 ※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート1である必要はない 56
  57. 57. 1. 常にロボットを前進 →無限ループの利用 2. タッチセンサによる障害物の衝突を判定 →条件分    衝突あり:一定時間後退し右回転.その後1. に戻る    衝突なし:1.に戻る タッチセンサによる障害物回避 障害物 後退 回転 }3. 57
  58. 58. • タッチセンサによる条件分岐 タッチセンサによる障害物回避のPAD 条件分岐:スイッチブロック タッチセンサが 押された 前進 2 タッチセンサに よる障害物回避 1 4 無限ループ 45度右回転 前進 3 5 True False 反復:処理: 選択: PADの構成部品: 58
  59. 59. • タッチセンサによる条件分岐 タッチセンサによる障害物回避 タッチセンサが押された タッチセンサが押されてない 59
  60. 60. • タッチセンサによる条件分岐 タッチセンサによる障害物回避 タッチセンサを指定 1 2 3 4 5 無限 60
  61. 61. ■障害物回避(超音波センサ) 61
  62. 62. 超音波センサによる障害物回避 30cm前に障害物発見! ぶつからないように回避しよう 62
  63. 63. 超音波センサ 超音波センサの測定原理 超音波を発信し、対象物で反射した超音波を受信し、この音波の発信 から受信までの時間を計測することで対象物までの距離を計測 発信素子受信素子 63
  64. 64. • EV3の入力ポート4に超音波センサを接続 超音波センサの接続 入力ポート4 ※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート4である必要はない 64
  65. 65. 1. 常にロボットを前進 →無限ループの利用 2. 障害物までの距離を計測    30cm以下(障害物あり):右回転.その後1. に戻る    30cm以上(障害物なし):1.に戻る 超音波センサによる障害物回避 →後退する動作を必要としない }3. 障害物 回転 65
  66. 66. • 超音波センサの値により条件分岐して障害物回避 超音波センサによる障害物回避のPAD 障害物との距離が 30cm以下 前進 2 超音波センサに よる障害物回避 1 4 無限ループ 45度右回転 3 True False 66
  67. 67. •超音波センサの値により条件分岐して障害物回避 超音波センサによる障害物回避 1 2 3 4 < 30cm 超音波センサ(cm)を指定 67
  68. 68. ■カラーセンサによるライントレース 68
  69. 69. カラーセンサ カラーセンサの測定原理 LEDにより赤、緑、青の光を照射して、それぞれの反射量(R, G, B成 分)をフォトダイオードで計測して,カラーに変換 フォトダイオード LED 69
  70. 70. カラーセンサ • 二種類のしくみで色や光の強さを計測 RGB値 色 反射光の強さ RGB値 周辺の光の強さ フォトダイオード R G B R G B LED反射光の計測 周辺光の計測 フォトダイオード 70
  71. 71. 光の三原色とカラー(加法混色) • 赤(R),緑(G),青(B)の3色を組み合わせて色彩を表現 色番号 R G B 1: 黒 0 0 0 2: 青 0 0 大 3: 緑 大 0 0 4: 黄 大 大 0 5: 赤 大 0 0 6: 白 大 大 大 R G B 加法混色 71
  72. 72. • LEDを切り替えて発光し、そのタイミングでの反射光を計測し て、カラーを計測 カラーセンサの原理 LED:赤 R: G: B: 72
  73. 73. • LEDを切り替えて発光し、そのタイミングでの反射光を計測し て、カラーを計測 カラーセンサの原理 LED:緑 R: G: B: 73
  74. 74. • LEDを切り替えて発光し、そのタイミングでの反射光を計測し て、カラーを計測 カラーセンサの原理 LED:青 R: G: B: 黄色 オシロスコープで計測してみたところ: 1秒間に1,000回、R,G,Bと切り替えて発光し、 同期してフォトダイオードで反射光量を計測 1[ms] 74
  75. 75. • EV3の入力ポート3にカラーセンサを接続 カラーセンサの接続 入力ポート3 ※EV3では入力ポートにどのセンサを接続しているか判定しているため、必ず入力ポート3である必要はない 75
  76. 76. ライントレースの考え方 • カラーセンサの 反射光の強さ を利用して白と黒に判別 • 白(明るい)ところでは右回転,黒(暗い)ところでは左回転 白いところ→右回転 黒いところ→左回転 76
  77. 77. ライントレースのPAD • 白(明るい)ところでは右回転,黒(暗い)ところでは左回転 反射光 > 40ライントーレス 1 3 無限ループ 右回転 2 True False 4左回転 回転中心 モータB 順方向に回転 モータC 停止(パワー0) 右回転しながら少し前に進むには: 77
  78. 78. • 白(明るい)ところでは右回転,黒(暗い)ところでは左回転 ライントレース 1 2 3 4 カラーセンサ-比較-反射光の強さを指定 > 50 78
  79. 79. ライントレースの改良 ジグザグ走行なので遅い! ①黒のライン上→前進 ②白→左右に回転して 黒のライン探索 79
  80. 80. カラーの利用(PAD) • カラーに合わせて複数に分岐 カラー? カラーに合わせ て複数分岐 1 3 無限ループ ステータスライトを赤 6 その他 緑 赤 4 5ステータスライトをオフ ステータスライトを緑 1秒間待機 2 カラー:緑 ステータスライト カラー:赤 カラー:その他 80
  81. 81. カラーの利用 1 2 3 4 5 6 条件:緑 条件:赤 条件:その他 条件の追加 1秒間待機 81
  82. 82. カラーの利用 カラーセンサ-測定-色を指定 1 2 3 4 5 6 条件の追加 緑ライト 赤ライト ライトオフ 1秒間待機 82
  83. 83. ■ジャイロセンサを用いたモータ制御 83
  84. 84. ジャイロセンサの原理 ジャイロセンサの測定原理 ジャイロセンサは角速度センサとも呼ばれ、単位時間あたりの回転角 である角速度[degree/s]を計測 ジャイロチップ (InvenSense社)
  85. 85. ジャイロセンサ 85 • EV3のジャイロセンサは一軸の回転角/角速度を計測 回転角 [degree] 角速度 [degree/sec]
  86. 86. ジャイロセンサによる旋回角度制御(PAD) • ジャイロセンサの角度が90度以上になるまで右回転 86 ジャイロセンサのリセット ジャイロセンサ による制御 2 3角度<90 右回転 4モータの停止 1
  87. 87. ジャイロセンサによる旋回角度制御 87 • ジャイロセンサの角度が90度以上になるまで右回転 角度をリセット 90度以上になるまで 繰り返し モータのオフ (ブレーキ) 1 2 3 4
  88. 88. ■マイブロック 88
  89. 89. マイブロック化 ①マイブロック化したい複数のブロックをドラッグにより選択 ② ツール マイブロックビルダー を起動 ③マイブロックの名前やアイコンを決定 89
  90. 90. マイブロックの設定 マイブロック の名前 アイコンの選択 内容を記入 90
  91. 91. マイブロックの利用 マイブロックパレット 91 マイブロック
  92. 92. ■ディスプレイへの表示 92
  93. 93. ディスプレイの座標 0 177 127 x y 0 21 12 ¦x¦ グリッド座標 ピクセル座標 y ¦¦ 93
  94. 94. テキストの表示 0 177 127 x y 0 21 12 ¦x¦ グリッド座標 ピクセル座標 MINDSTORMS HELLO! 表示したい文字列を入力 y¦¦ テキスト→ピクセル テキスト→グリッド 94
  95. 95. 図形の表示 0 177 127 x y 表示したい文字列を入力 図形→円形 図形→長方形 0 177 127 x y (50,20) (50,20) 40 80 80 95
  96. 96. • 超音波センサの値を液晶ディスプレイに表示 ‒ デバッグに重要 超音波センサの値を表示 96
  97. 97. • 超音波センサの値を読み取り、テキストをディスプレイに表示 超音波センサの値を表示(PAD) 距離の読み取り 2 超音波センサ ディスプレイ表示 1無限ループ テキストを表示 3 97
  98. 98. • 超音波センサの値を読み取り、テキストをディスプレイに表示 超音波センサの値を表示 1 2 3 測定-接近度を指定 ワイヤーテキスト 黄   :数値 緑   :ロジック(正偽値) オレンジ:テキスト(文字) データワイヤの色と意味 98
  99. 99. 図形の繰り返し表示(PAD) • 図形1と図形2を繰り返しにディスプレイに表示 図形1の表示 2図形の表示 1無限ループ 1秒間保持 3 図形2の表示 4 1秒間保持 5 99
  100. 100. • 図形1と図形2を繰り返しにディスプレイに表示 並列タスク 1 2 4 1秒 1秒 3 5 100
  101. 101. • 障害物までの距離が小さくなるほど大きくなる円を表示 ■課題 0 177 127 x y (89,64) r 101
  102. 102. ■並列タスク 102
  103. 103. • シングルタスクと並列タスク シングルタスク →ライントレースと障害物回避を同時に行うには並列タスクを利用 103
  104. 104. PADによる並列タスクの図示 反射光 > 40ライントーレス 3 5 無限ループ 右回転 4 True False 6左回転 1 並列タスク ライントレースプログラムを起動 2障害物回避プログラムを起動 1 障害物との距離が 30cm以下 超音波センサに よる障害物回避 7 10 無限ループ 45度右回転 9 True False 2 104
  105. 105. 1 並列タスク 2 4 3 5 6 7 8 9 ライントレース 障害物回避 ケーブルを分岐 105
  106. 106. 並列タスクにおける問題 • 命令の衝突(コンフリクト) ‒ タスクAがタスクBの実行を妨害 ‒ 同時にモータを制御 タスクA:前進 モータBCを順方向に回転 タスクB:後退 モータBCを逆方向に回転 どっちを実行すればいいの? 106
  107. 107. セマフォ(信号灯) 107
  108. 108. セマフォ(信号灯) 108
  109. 109. セマフォ(信号灯) 109
  110. 110. セマフォ(信号灯) 110
  111. 111. セマフォによるコンフリクトの回避 111
  112. 112. • モータ制御の前に、セマフォによる待機とセマフォに偽を代入 • モータ制御の後には、セマフォに真を代入 セマフォによるコンフリクト回避 セマフォの値が真になるまで セマフォに偽を代入 セマフォに真を代入 モータ制御前 モータ制御 モータ制御後 112
  113. 113. セマフォによるコンフリクト回避 変数に真を代入 113
  114. 114. 藤吉  弘亘  (Hironobu  Fujiyoshi)  
 中部⼤大学  ⼯工学部情報⼯工学科(ロボット理理⼯工学科),⼤大学院⼯工学研究科情報⼯工学専攻  教授   1997年年  中部⼤大学⼤大学院  博⼠士後期課程修了了
 1997〜~2000年年  ⽶米国カーネギーメロン⼤大学  ロボット⼯工学研究所  Postdoctoral  Fellow
 2000年年  中部⼤大学  講師
 2004年年  中部⼤大学  准教授
 2006年年  ⽶米国カーネギーメロン⼤大学  ロボット⼯工学研究所  客員研究員
 2010年年〜~中部⼤大学  教授  
 2014年年〜~名古屋⼤大学  客員教授   博⼠士(⼯工学)計算機視覚、動画像処理理、パターン認識識・理理解の研究に従事
 ロボカップ研究賞(2005年年),⼭山下記念念研究賞(2009年年),情報処理理学会論論⽂文賞(2009年年),画像センシングシンポジウム 優秀学術賞(2011年年,2013年年),電⼦子情報通信学会ISS論論⽂文賞(2013年年)   E-‐‑‒mail:  hf@cs.chubu.ac.jp
 WEB:  http://www.vision.cs.chubu.ac.jp/
 Facebook:  facebook.com/hironobu.fujiyoshi  
 Twitter:  @hf149  
  115. 115. [WEBサイト] http://www.robot-programming.jp/ [単行本] 実践ロボットプログラミング LEGO Mindstorms NXTで目指せロボコン! 近代科学社 ISBN-13: 978-4764903784
  116. 116. [電子書籍iBook] NXT-SWによる実践ロボットプログラミング 近代科学社 https://itunes.apple.com/jp/book/ id902846245 [電子書籍iBook] NXCによる実践ロボットプログラミング 近代科学社 https://itunes.apple.com/jp/book/ id902356211

×