2007/5/22 情報工学科1年生 プログラミング入門第5回 ~レゴロボットのプログラミング5~ 湘南工科大学 工学部 情報工学科 高畠俊徳,小林 二宮 洋,鈴木 学 誠 [email protected] [email protected] [email protected] [email protected] 1 1. legOSとは • RCXモジュール用のフリーのOS 余計な動作を省いて、必要最小限の機能 を持っている。 フィードバックが速い。 C言語を用いてプログラムを作成できる。 ⇔より細かく記述する必要がある。 2 1. C言語とは • • • • #include<dsensor.h> #include<unistd.h> #include<dmotor.h> #include<conio.h> • • • • • • main() { int akarui=80; ds_active(&SENSOR_2); cputs("GO!!"); while(1){ • • • • • • • • • • • • } } C言語の例 if(LIGHT_2>=akarui){ motor_a_dir(brake); motor_c_speed(MAX_SPEED); motor_c_dir(fwd); } else{ motor_c_dir(brake); motor_a_speed(MAX_SPEED); motor_a_dir(fwd); } 3 1. プログラミングとは?(復習) プログラムを作る≠パソコンに向かって作業する – その前にやることがいっぱい 1.テーマを決める LEGOブロックでライン・トレースカーを作ろう!! 2.シナリオを考える どんなライン・トレースカーにするか? 3.シナリオを書く ライン・トレースカーってどうやって動くのか? 4.プログラミング言語に翻訳する 純正ファームウェア,C言語など 5.動かしてみる ライン・トレースカーを走らせる 6.確認する 線を辿って前進している事を確認 7.バージョンアップする もっと早く・複雑に動かすためには? 4 C言語プログラミングに挑戦! ・準備:C言語を使ったプログラミング ・プログラムの制御構造1 順次 ・プログラムの制御構造2 反復 ・プログラムの制御構造3 条件分岐 図のライントレースカー(基本形) を準備する 5 2. C言語を使ったプログラミング • 「メモ帳」(Notepad)を使って、C言語を入力する • 「スタート」→「プログラム」→「アクセサリ」→「メモ帳」を開く ③ ④ ② ① 6 2. C言語を使ったプログラミング #include<sit.h> main(){ Init(); Zenshin(1.0); Hidari_Turn(1.0); Migi_Turn(1.0); Koutai(1.0); } 7 2. C言語を使ったプログラミング #include<sit.h> 「メモ帳」に「半角」で入力 main(){ Init(); } Zenshin(1.0); Hidari_Turn(1.0); Migi_Turn(1.0); Koutai(1.0); • 入力が終了したら「名前を 付けて保存」する。 • 「ファイル」→「名前を付け て保存」を選択する。 8 2. C言語を使ったプログラミング (ファイルの保存) • 「保存する場所」は「ローカルディスク(C:)」→「legOS」→ 「Demo」とする。 ① ③ ② ④ 9 2. C言語を使ったプログラミング (ファイルの保存) • 「ファイルの種類」を「すべてのファイル」とする。 • 「ファイル名」は「sit1.c」とする。 • ファイル名を入力したら「保存」ボタンを押す。 ② ③ ① 10 3. 動かしてみる • 純正ファームウェアと異なる点 ↓ • C言語はコンパイルという操作 が必要 • コンパイルしたファイル(コン ピュータの理解できるファイル) をロボットへ転送する。 • コンパイルする環境を起動 • 「スタート」→「プログラム」→ 「Cygnus Solutions」→ 「Cygwin B20」をクリックし Cygwin B20を起動する。 プログラム コンパイル(ビルド) 実行可能ファイル 11 3. 動かしてみる Cygwin B20 12 3. 動かしてみる • コンパイル ⇒右の画面に次のように 入力する。 • cd /legOS 2回目以降は次のように 入力する。 • ./sit.sh • (エラーがでたら、もう一度始めから確かめてやり直す.) • ロボットの「Run」ボタンを押す。 • 前進,左ターン,右ターン,後退することを確認する。 13 4 プログラミングの基礎 4.1 プログラムの制御構造1:順次 #include<sit.h> main(){ Init(); Zenshin(2.0); Hidari_Turn(0.5); Migi_Turn(0.5); Koutai(2.0); } 数値の入力に注意! 14 4.1 プログラムの制御構造1:順次(復習) #include<sit.h> 非常に重要 main(){ Init(); Zenshin(2.0); 命令1 Hidari_Turn(0.5); Migi_Turn(0.5); Koutai(2.0); 命令2 プログラムの基本ルール1: 命令は,一度に一つだけ 実行される プログラムの基本ルール2: 命令は,一つずつ(下に) 順々に実行される 命令3 } 命令4 15 4.2 プログラムの制御構造2:反復(ループ,リピート) #include<sit.h> main(){ Init(); while(MUGEN){ Zenshin(2.0); Hidari_Turn(0.5); } } 16 4.2 プログラムの制御構造2:反復(復習) 非常に重要 #include<sit.h> main(){ Init(); } 反復の始 while(MUGEN){ Zenshin(2.0); Hidari_Turn(0.5); } 反復の終 プログラムの基本ルール2(反復): 反復の終わりまで来たら反復の 始まりまで戻る. ある終了条件を満たすまで反復 は繰り返される. 注:命令が一つずつ実行される のは変わらない 終了条件が書いてある(ここでは無限回繰り返す) ここでは「前進」→「左ターン」→「前進」→「左ターン」・・・を繰り返す 17 4.3 プログラムの制御構造3:条件分岐 #include<sit.h> main(){ Init(); } while(MUGEN){ if(Oshita1){ Hidari_Turn(0.5); } else{ Zenshin(2.0); } } 図のようにタッチセンサー を1番に取り付ける 18 4.3 プログラムの制御構造3:条件分岐(復習) 非常に重要 #include<sit.h> main(){ Init(); } while( MUGEN ){ if( Oshita1 ){ Hidari_Turn(0.5); } else{ Zenshin(2.0); } } 「はい」の とき実行 「いいえ」の とき実行 プログラムの基本ルール3(条件分岐): ある条件を満たした場合には,「は い」の方が実行され,満たしていない 場合には「いいえ」の方が実行される. 注:一度に実行されるのはどちらか 一方だけ. 条件が記述されている (センサー1とつながったタッチ センサーがおされているか?) 19 5. いくつかの例題 次のいくつかの例を実行してみよう(C言語) (注:プログラムを理解しながら作成すること) [例1]数値を変えてロボットの反応を確かめる #include<sit.h> main () { Init(); 時間を0.1秒に } while (MUGEN) { if (Oshita1) { Hidari_Turn(0.1); } else { Zenshin(0.1); } } 20 [例2]ライントレースカー(基本形) #include<sit.h> main () { Init(); } while (MUGEN) { if (Akarui2) { Hidari_Turn(0.1); } else { Migi_Turn(0.1); } } 21 [例3]ライントレースカー(衝突するとストップ) #include<sit.h> main () { Init(); } while (MUGEN) { if (Oshita1) { } else { if ( Akarui2 ) { Hidari_Turn(0.1); } else { Migi_Turn(0.1); } } } 22 [例4]前方が暗いとバック 図のようにライトセンサーをつなぐ #include<sit.h> 2番のライトセン サーが暗いか? main() { Init(); } while (MUGEN) { if (Kurai2) { Koutai(1.0); } else { Zenshin(1.0); } } 23 [例5]リモコンカー 図のようにタッチセンサーを2つつなぐ #include<sit.h> main() { Init(); while (MUGEN) { if (Oshita1) { if (Oshita3) { Zenshin(0.1); } else { Migi_Turn(0.1); } } else { if (Oshita3) { Hidari_Turn(0.1); } else { } } } } 24 5. 課題 次の課題の車をC言語でプログラミング及び実行しなさい [課題1]1秒前進,0.5秒左ターンを繰り返す [課題2]左ターンを繰り返し、ボタンを押している間だけ前進する [課題3]前進し,衝突したら1秒バックし,右へ障害物をよける [課題4]シートの黒枠より内側を走り続ける(ライントレースではない) [課題5]ライントレースカー(障害物に衝突したら1秒バックし,右へ障害物をよ け,再びもとのラインに戻る) [課題6]タッチセンサー1,3,ライトセンサー2をつける.センサー1だけ押すと左 ターン,センサー3だけ押すと右ターン.センサー1,3両方押すと前進. 両方押していないときはライントレースする. [課題7]次のページを参照 [課題8]ライントレースカー(前方が暗かったら1秒バックし,右へ障害物をよけ, 再びラインに戻る. 25 [課題7]2つのライトセンサーを使った次の動きをするライント レースカー センサー1 センサー3 センサー接続方法 26 [課題7]2つのライトセンサーを使った次の動きをするライント レースカー 右折 2つのセンサー が両方とも黒線 上の時 直進 2つのセンサー が境界線をまた いでいる時 左折 2つのセンサー が両方とも白の 時 27
© Copyright 2024 ExpyDoc