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