Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
BeautoRacer-自動走行ロボットを作ろう-
電気電子工学科
草間 裕介
2010/10/5(火) 5-8限2010/10/12(火) 5-8限
改訂 v2.61 2
ロボットとは?
チェコ語で労働を意味する “robota”
人の代わりに何らかの作業をする装置・機械。人が要求する仕事を自動制御で代行する装置
語源 ロボット http://ja.wikipedia.org/wiki/ より引用
産業用ロボット 将来?
コンピュータプログラム(ボット)
人工知能
自律連続動作型
人間型
自動制御の流れ
①.センサ状況を感知する。⇒ 光センサ
②.コンピュータ状況を判断し命令する。⇒ コンピュータプログラム
③.アクチュエータ動作・仕事を行なう。⇒ モータ、LED
入力
判断命令
出力
電気 信号
人間も自動制御と同じことを意識せずに瞬時にやっている。
電気 信号
3
自動制御の例演習1 身の回りで自動制御している例を挙げて、
センサ・コンピュータ・アクチュエータに相当する機能がそれぞれ何か考えよ。
冷蔵庫 エアコン
航空機
衛星
ミサイル自動洗浄トイレ
4
自動走行ロボットの仕事
人の代わりにカーブできる。
人の代わりにスピード調整できる。
RoutineWork
人の代わりに止まれる。
人の代わりに交通ルールを守れる。
人の代わりに・・・できる。
この仕事を自律連続動作型のロボットにさせることはできないか
ドライブは楽しいが・・・、毎日いつも同じ道を走るのはあきてしまうし、面倒になってくる。
5
自律動作をするには?
カーブや直線を認識して、
走行スピードを認識して、
停止位置を認識して、
交通標識を認識して、
人の代わりに状況を感知して
⇒ ハンドルをきる。
⇒ アクセルを踏む。
⇒ ブレーキをかける。
⇒ 標識指示に従う。
⇒ 判断・行動する。
6
(受) (発) (色)
BeautoRacer の制御
① センサ=赤外線センサ物や床の状況をみる。
② コンピュータ=PICマイコン判断して命令を送る。
③ アクチュエータ=モータ、LEDロボットを動かす。LEDを点灯・点滅する。
7
センサとインターフェース
※インターフェースとは情報のやり取りの仲介者です。センサ‐インターフェースA‐コンピュータ‐インターフェースB‐アクチュエータという関係になります。
インターフェースは、赤外線センサのアナログ信号を、ロボット内のコンュータが処理するためにデジタル信号に変換します。(A/D変換と言います)
8
ビデオ
プロモーションビデオpv2_brief.wmv (2分40秒)
組み立てビデオpv1_assembling.wmv (3分40秒)
Vstone ホームページ http://www.vstone.co.jp/robot/beautoracer/ より引用
9
PICマイコンとは?PICとは “Peripheral Interface Controller” の略米国マイクロチップ・テクノロジー社の製品
Beauto Racer に搭載されているPIC18F14K50
パフォーマンス、メモリ容量
機能
CPU, メモリ, A/D変換, I/O等が一つのICチップ内に収まっている。ROMに書き込まれたプログラムにより制御される。“ワンチップマイコン”とも呼ぶ。
エレキジャック, No.8, p.12 より引用
マイコンとはマイクロコンピュータの略語
10
PIC18F14K50のピン配置
1
20
11
PICの使い方後閑哲也, ``電子工作の素’’, p.308, 技術評論社
BeautoRacerPC本体+ソフト(BeautoBuilderR)
USB
本実験では、青枠と赤枠が既に一つの装置になっているので、2つをUSBで接続するだけ。
12
BeautoRacer-基礎プログラミング-
13
プログラミング言語とは?
C言語
アセンブラ Fortran
Java
BASIC Python
象形文字
英語
日本語
ロシア語
アラビア語
ハードウェア(機械の言葉)に近い 人間の言語に近い
Perl
ドイツ語
中国語
宇宙には言語(単語と文法)の種類が沢山あるように、プログラミング言語もたくさんある。
絵文字
14
BeautoBuilderRの起動
① 命令ブロックエリア
② センサエリア
③ 命令詳細設定エリア
④ 記述エリア
車型アイコンをクリック(2人で1台のPCを使うときは2つ同時起動)
開始と終了の間にプログラムを記述します。
15
①「前に進む」ブロックを選択!
②右側の記述欄でクリックするとブロックが追加される。
命令ブロックの配置演習2 1.5秒だけ前進するプログラムを作成せよ。
16
命令ブロックの接続
①開始の青い■をドラッグ
②矢印を伸ばしてブロックにつなぐ
④「終了」にもつなげる
③前進の青い■をドラッグ
⑤配置バランスを整えて完了
演習21.5秒だけ前進するプログラムを作成せよ。
答え
17
PCとロボットの接続
※ロボット電源はOFF!
PCへ
コネクタの向きを間違えずに!
※ロボットをケーブルにつないだ状態でグラグラ動かしたりすると、ケーブルの接触が不安定になって通信が途切れることがあります。
USB電極面
ロボット電極面
18
接続の確認方法
「接続中」になる
センサに値が表示される
接続前 接続後
センサ値が???のときは、接続がうまくいっていません。
19
プログラムの書き込み
※書き込みに10秒以上かかる場合は失敗している。「中断」をクリックして一度ケーブルを抜き差しして書き込みなおす。
クリック!
青いメーターが一瞬で右端まで届き、画面が消えたら無事書き込み終了。
20
プログラムの実行
②電源スイッチをONにするとすぐにプログラムが始まります。
ON←OFF
①USB端子からロボットを抜く。
×
×
※ロボットが落ちないよう、
机の中央でプログラムを実行し、停止するまで必ず見張っていること。
③机の中央で動きを見張る。
不注意による落下でセンサ破損
21
前進時間の変更
命令をクリックすると、左下の「設定エリア」の表示が変わる。
③ 命令詳細設定エリア
①クリック
②数値変更
22
モータ速度の調整
同じパソコンを二人以上で使う場合はチェックを入れておく。チェックを入れないと他人のモータスピードになってしまう。
①設定⇒モータの設定
②調整
④設定を変更したら、もう一度「書き込み」を行う。
③OK
23
命令のカスタマイズ演習3 1.3秒間直進⇒一時停止⇒右旋回4.3秒⇒5秒間
停止⇒左旋回5.3秒するプログラムを作成せよ。ただし、モータ速度55とする。
前進
左旋回 右旋回
処理待ち停止
24
命令のカスタマイズ演習3
答え
1.3秒間直進⇒一時停止⇒右旋回4.3秒⇒5秒間停止⇒左旋回5.3秒するプログラムを作成せよ。ただし、モータ速度55とする。
25
LEDプログラミング(1)
③ 命令詳細設定エリア
演習4 左右のLEDを交互に0.7秒ずつ2回点灯させるプログラムを作成せよ。
②左LED
①右LED
26
LEDプログラミング(1)演習4 左右のLEDを交互に0.7秒ずつ2回点灯させるプ
ログラムを作成せよ。答え
優
27
LEDプログラミング(2)演習5 右のLEDを点灯したまま、左のLEDを0.3秒間隔
で点滅させるプログラムを作成せよ。
③処理待ち
②左LED
①右LED
28
LEDプログラミング(2)演習5
答え右のLEDを点灯したまま、左のLEDを0.3秒間隔で点滅させるプログラムを作成せよ。
29
1周して戻るプログラム
【プログラムのポイント整理】 どの命令が必要なのか?どういう順番でつなげるのか? 時間をどう設定するか
スタート & ゴール
①1秒前進②右180度ターン
③1秒前進④右180度ターン
演習6 1秒前進⇒右旋回180度⇒1秒前進⇒右旋回180度⇒スタート地点に戻るプログラムを作成せよ。ただし、モータ速度は自由。
30
180度ターンは旋回の命令を使います。180度ターンを行なうには、旋回の秒数を変えながら何度もプログラムを実行して、適度な時間を調べる必要があります。
1周して戻るプログラム演習6
答え
1秒前進⇒右旋回180度⇒1秒前進⇒右旋回180度⇒スタート地点に戻るプログラムを作成せよ。ただし、モータ速度は自由。
これはモータ速度55の場合の例です。
31
BeautoRacer-実用プログラミング-
32
繰り返しプログラミング
本実験は、言語を記述する代わりに絵文字に相当するフローチャートだけでプログラミングします。
実行結果
C言語の場合は、決められた単語と文法を使って、処理を記述していきます。“ソースコード”と呼びます。LOOP
の中身BeautoRacerのLOOPブロック
33
繰り返しブロック(LOOP)は、「繰り返しの始まり」と「終わり」の二つがセットになっています。繰り返す回数を自由に設定できます。
繰り返しブロックの使い方
繰り返しブロックで挟まれた命令を設定した回数だけ繰り返します。
34
同じ命令を一塊と考え、これを5個並べると作成できます。しかし、手間がかかる上にプログラムが見づらくなります。もし100周に増やしたい場合は・・・お手上げです。
周回プログラム
そこで、同じ命令を何度も実行する場合は 「繰り返し(LOOP)」 を使います。
1周目
2周目
・・・
演習7 ロボットが1周走るプログラムを改良して、5周走るプログラムを作成せよ。
35
周回プログラム演習7 ロボットが1周走るプログラムを改造して、5周
走るプログラムを作成せよ。答え
繰り返しブロックで挟まれた命令(1周するプログラム)を設定した回数(5回)だけ繰り返します。
指定回数
36
ジグザグプログラム
スタート
③1秒前進
ゴール
①ジグ(左旋回)
②ザグ(右旋回)
0.5秒 0.5秒 1.0秒
演習8 3回ジグザグに走った後、最後に1秒直進して終了するプログラムを作りましょう。ただし、必ずLOOPを使い、前進(1.0秒)、右旋回(0.5秒)、左旋回(0.5秒)はそれぞれ1つだけ使うこと。
37
ジグザグプログラム演習8 3回ジグザグに走った後、最後に1秒直進して終
了するプログラムを作りましょう。ただし、必ずLOOPを使い、前進(1.0秒)、右旋回(0.5秒)、左旋回(0.5秒)はそれぞれ1つだけ使うこと。
答え
スタート ゴール
LOOP1 LOOP2 LOOP3
38
LED点滅プログラム演習9 左右のLEDを交互に0.5秒ずつ無限に点滅する
プログラムを作成せよ。
LOOP
LED左
LED右
39
LED点滅プログラム演習9 左右のLEDを交互に0.5秒ずつ無限に点滅する
プログラムを作成せよ。答え
40
「繰り返し」の中に「繰り返し」を使うというような複雑な構造もできます。
繰り返しプログラミングの応用
入れ子とかネスト(nest)とも呼びます。
繰り返しブロックで挟まれた命令(青枠)を3回だけ繰り返します。青枠は、1.5秒待って赤枠の命令を3回繰り返します。
41
繰り返し命令は、「繰り返しの始まり」から「終わり」に正しくつながらないと、おかしな動作になります。
繰り返し命令の注意点
繰り返しの途中で止まってしまう
一度も繰り返さずに終了してしまう
繰り返しのはじめがおかしくなってしまう
42
2重繰り返しプログラム演習10 0.5秒前進して1秒停止し、0.1秒間隔で左右の
LED点滅を10回繰り返す。この処理を4回繰り返すプログラムを作成せよ。
ゴール
①0.5秒前進
スタート
②1秒停止
③LED点滅(10回)
1回目 2回目 3回目 4回目
43
2重繰り返しプログラム演習10
答え
0.5秒前進して1秒停止し、0.1秒間隔で左右のLED点滅を10回繰り返す。この処理を4回繰り返すプログラムを作成せよ。
ゴールスタート
LOOP②
LOOP①
44
分岐プログラミング
実行結果AYES
NO(else)
実行結果B
仕事A 仕事B
分岐
条件によって処理内容を変えたい場合に、「分岐」を使います。
IFの中身
仕事B
仕事A
分岐
45
センサ値の計測指でセンサを押さえて反応を確かめてみよ。
・センサを指で押さえると数値はいくらか?・指をはなすと数値はいくらか?
指
パソコンにロボットを接続するとセンサの値がセンサエリアに表示されます。
46
指で押さえているとき、センサ値=10付近
指を離しているとき、センサ値=180付近
センサ値は、ノイズや電源の影響で、実際には若干変化します。
ノイズなどの影響を踏まえ、「指を押さえているとき」と「指を離しているとき」の状態を分けるしきい値は、2つのセンサ値の中央値 (10+180)/2=85 にします。
センサ閾値の決定方法
閾値
指
47
条件によるLEDの点灯・消灯演習11
指
点灯 消灯
押さえる離す
左センサを指で押さえたら左LEDが点灯、指を離したら消灯するプログラムを作成せよ。
左センサ値=10付近
左センサ値=180付近
48
条件によるLEDの点灯・消灯演習11
答え
左センサを指で押さえたら左LEDが点灯、指を離したら消灯するプログラムを作成せよ。
49
点灯
指
指
点灯
条件によるLEDの点灯・消灯演習12 左右センサをそれぞれ指で押さえたら、それぞ
れのLEDが点灯するプログラムを作成せよ。
指
点灯点灯
指
※ヒント = 4つの状況に場合分けする
左≒10右≒10 左≒10右≒180
左≒180右≒180左≒180右≒10
【Case 1】 【Case 2】
【Case 3】 【Case 4】
50
条件によるLEDの点灯・消灯演習12
答え
左右センサをそれぞれ指で押さえたら、それぞれのLEDが点灯するプログラムを作成せよ。
優
51
指
回転
指
回転
演習13 左右センサをそれぞれ指で押さえたら、それぞれのモータが回転するプログラムを作成せよ。
条件によるモータ回転・停止
指指
回転回転
※ヒント1 = 4つの状況に場合分けする。 ヒント2 = 右モータの回転は左旋回ブロックを使う。
左≒10右≒10 左≒10右≒180
左≒180右≒180左≒180右≒10
【Case 1】 【Case 2】
【Case 3】 【Case 4】
52
演習13
答え
条件によるモータ回転・停止左右センサをそれぞれ指で押さえたら、それぞれのモータが回転するプログラムを作成せよ。
優
53
BeautoRacer-ライントレースに挑戦-
54
センサによるライン計測
白
台紙上でセンサを移動させて反応を確かめよ。
灰50% 黒
台紙の水平度合い(台紙とセンサまでの距離が変わる)によってセンサの値は大きく変わるので注意。この場合なら閾値は (10+100)/2=55 くらいに設定。
55
ライン左回りの分岐動作
ラインにかからない(左センサ白≒10<閾値)場合、そのまま前進する。
左カーブに来たとき、左センサにラインがかかれば(左センサ黒≒100>閾値)、左に曲がる。
演習14 左センサだけを使って、黒いラインに沿って左回りするプログラムを作成せよ。
前進
前進
左旋回
白
黒
黒
白
56
閾値を使ったプログラミング演習14
答え
左センサだけを使って、黒いラインに沿って左回りするプログラムを作成せよ。
白黒
57
前進1.5秒の意味
実は、前進(1.5秒)というブロックは3つのブロックの組合せで構成されています。「前進」+「3秒続ける」+「止まる」
前進(1.5秒)を「前進」のみにすることで無駄な処理がなくなり、センサ反応を早めることができたのです。
58
右回りのライントレース演習15 右センサだけを使って、黒いラインに沿って
右回りするプログラムを作成せよ。
ラインにかからない(右センサ白≒10<閾値)場合、そのまま前進する。
右カーブに来たとき、右センサにラインがかかれば(右センサ黒≒100>閾値)、右に曲がる。
前進
前進
右旋回
白
黒
黒白
59
右回りのライントレース演習15
答え
右センサだけを使って、黒いラインに沿って右回りするプログラムを作成せよ。
白
黒
60
両周りのライントレース演習16 左右両方のセンサを使って、黒いラインに沿っ
て両回りできるプログラムを作成せよ。
前進
前進
右旋回
前進
前進
左旋回
【Case 1】 【Case 2】 【Case 3】 【Case 4】
白10
白10
白10
黒160
黒160
白10
黒160
黒160
※ヒント = 4つの状況に場合分けする
61
両周りのライントレース演習16 左右両方のセンサを使って、黒いラインに沿っ
て両回りできるプログラムを作成せよ。答え
白
黒
白黒白黒
62
両周りのライントレース演習17 黒いラインに沿って両回りしながら、右折時は
右LED、左折時は左LEDを点灯させよ。
※ヒント = 4つの状況に場合分けする
前進
前進
右旋回
前進
前進
左旋回
【Case 1】 【Case 2】 【Case 3】 【Case 4】
白10
白10
白10
黒160
黒160
白10
黒160
黒160
点灯 点灯消灯 消灯
63
ライントレース+LED演習17 黒いラインに沿って両回りしながら、右折時は
右LED、左折時は左LEDを点灯させよ。答え
白
黒
白 黒白黒
64
演習18
ライントレース先の両周りプログラムを微調整して、付録の台紙コースをクリアせよ。
65
演習19a 次の8の字コースをクリアするプログラムを作成せよ。
ライントレース A
スタート&ゴール
66
演習19b 次の白抜きコースをクリアするプログラムを作成せよ。
ライントレース B
スタート&ゴール
67
演習19c 黒塗りのゴールエリアで停止するプログラムを作成せよ。
ライントレース C
ゴール
スタート
CAUTION
68
演習19d 黒塗りのゴールエリアで停止するプログラムを作成せよ。
ライントレース D
スタート
ゴール
69
演習19e 黒塗りのゴールエリアの右端で停止するプログラムを作成せよ。
ライントレース E
ゴール
スタート
70
演習19f
ライントレース F
スタート&ゴール
次のコースをクリアするプログラムを作成せよ。スタートとゴールは同じ位置である。
71
演習19g 次のコースをクリアするプログラムを作成せよ。スタートとゴールは同じ位置である。
ライントレース G
スタート&ゴール
72
演習20 ビニールテープ又はマジックで描いたコースを考案し、クリアするプログラムを作成せよ。
最終試験73
74
BeautoRacer-上級プログラミング-
74
上級プログラミング
②チェックを入れる
①設定⇒上級者向け機能・・
③新しい命令ブロックが追加される。
75
変数プログラミング
演算ブロック a-hまで8個の
変数が使える。
四則演算が可能。
a=a×2aにa×2を代入
a=a+baにa+bを代入
a=左センサaに左センサ値(0,1,2,3)を代入
76
h
h
h
h
h
h
変数プログラミング演習21 1から10までの整数を総和するプログラムを
作成せよ。(1から100までの場合はどうか?)
初期値 a
h
h
h
h
h0 1
a1 2
a3 3
a6 4
a10 5
a15 6
a21 7
a28 8
a36 9
a45 10
a55
答え
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
a=a+h h=h+1
変数が入る箱を2つ考えます。
77
変数プログラミング演習21 1から10までの整数を総和するプログラムを
作成せよ。(1から100までの場合はどうか?)答え
数値はすべて0-255までしか表示できない。
※PIC18Fは8ビットマイコンなので、一つの変数は 28=255 の数値までしか記憶できません。それ以上は計算不可能です。
78
b
変数プログラミングの応用演習22 徐々に減速して最後に停止するプログラムを作成せよ。
ただし、初期速度255(⇒モータ速度100に相当)とする。
a
初期速度(max 255)
左
減速率
左
左モータ速度
初期値
左=左-b
変数が入る箱を4つ考えます。
停止
左左=a
右
右モータ速度
右右=a
右 右=右-b
左=左-b 右=右-b左 右
・・・
・・・
左=0 右=0左 右
79
変数プログラミングの応用演習22
答え
徐々に減速して最後に停止するプログラムを作成せよ。ただし、初期速度255(⇒モータ速度100に相当)とする。
80
トラブル事例・USB接続認識はできるが、書き込みエラーが頻発する。
⇒原因不明
81
BeautoRacer-ロボットの組み立て-
電気電子工学科
2010/10/5(火) 5-8限2010/10/12(火) 5-8限2010/10/19(火) 5-8限
改訂 v1.182
83
前輪の取り付け
※基板の裏面です!
パチッ
基板の表裏間違えないように、奥まで押し込みます。
後輪の組み立て
(タイヤ)
84
パチッ ×○
ホイールをモータホルダに入れ、ワッシャーで留めます。
後輪の取り付け
きつくて入りにくいときは、ツマミを爪でつまんで先端をすぼめます。
85
モータ端子の引き起こしモータの端子電極を少し起こします。
86
モータ装着
端子電極が上です。
手でタイヤが回るか、確認
87
モータホルダの装着
パチッ
モータ端子がはみ出ている。
部品の爪がかかっていない
88
電池の取り付け
電源スイッチ
※電池の向きを間違えないよう注意
89
動作確認① 左右センサに触れない
⇒左右モータ停止、左右LED点灯
② 右センサに触れる⇒右モータ回転、左LED点灯
③ 左センサに触れる⇒左モータ回転、右LED点灯
④ 左右センサに触れる⇒左右モータ回転、左右LED消灯
※モータの回転が一目で分かるようにホイールにマジックで線を入れておくと良い。
90
ロボットを動かしてみよう
センサで黒ラインを認識し、モータの駆動を制御しています。
ライントレースの用紙を広げ、輪のコースを走らせてみよう。
※ロボットが机から落ちないように注意
練習1
91