プログラミング入門第5回c言語プログラミングに挑戦!...

27
1 2007/5/22 情報工学科1年生 プログラミング入門第 プログラミング入門第 5 5 ~ ~ レゴロボットのプログラミング レゴロボットのプログラミング 5 5 ~ ~ 湘南工科大学 工学部 情報工学科 高畠俊徳,小林 二宮 洋,鈴木 [email protected] [email protected] [email protected] [email protected]

Upload: others

Post on 12-Aug-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

1

2007/5/22情報工学科1年生

プログラミング入門第プログラミング入門第55回回

~~レゴロボットのプログラミングレゴロボットのプログラミング55~~

湘南工科大学工学部 情報工学科

高畠俊徳,小林 学二宮 洋,鈴木 誠[email protected]@[email protected]@info.shonan-it.ac.jp

2

1. 1. legOSlegOSとはとは

• RCXモジュール用のフリーのOS

余計な動作を省いて、必要最小限の機能を持っている。

フィードバックが速い。

C言語を用いてプログラムを作成できる。

⇔より細かく記述する必要がある。

3

1. 1. CC言語とは言語とは• #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);• }• }• }

CC言語言語の例の例

4

1.テーマを決めるLEGOブロックでライン・トレースカーを作ろう!!

2.シナリオを考えるどんなライン・トレースカーにするか?

3.シナリオを書くライン・トレースカーってどうやって動くのか?

4.プログラミング言語に翻訳する純正ファームウェア,C言語など

5.動かしてみるライン・トレースカーを走らせる

6.確認する線を辿って前進している事を確認

7.バージョンアップするもっと早く・複雑に動かすためには?

1. 1. プログラミングとはプログラミングとは??(復習)(復習)プログラムを作る≠パソコンに向かって作業する

– その前にやることがいっぱい

シナリオ

?

5

CC言語プログラミングに挑戦言語プログラミングに挑戦!!

・準備:C言語を使ったプログラミング・準備:C言語を使ったプログラミング・プログラムの制御構造1 順次・プログラムの制御構造1 順次・プログラムの制御構造2 反復・プログラムの制御構造2 反復・プログラムの制御構造3 条件分岐・プログラムの制御構造3 条件分岐

図のライントレースカー(基本形)を準備する

6

2. C言語を使ったプログラミング

• 「メモ帳」(Notepad)を使って、C言語を入力する

• 「スタート」→「プログラム」→「アクセサリ」→「メモ帳」を開く

7

#include<sit.h>

 main(){  Init();

Zenshin(1.0);

Hidari_Turn(1.0);

Migi_Turn(1.0);

Koutai(1.0);

}

2.  C言語を使ったプログラミング

8

#include<sit.h>

main(){Init();

Zenshin(1.0);Hidari_Turn(1.0); Migi_Turn(1.0);Koutai(1.0);

}

2. C言語を使ったプログラミング

「メモ帳」に「半角」で入力

• 入力が終了したら「名前を付けて保存」する。

• 「ファイル」→「名前を付けて保存」を選択する。

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

 #include<sit.h>

 main(){  Init();

Zenshin(2.0);

Hidari_Turn(0.5);

Migi_Turn(0.5);

Koutai(2.0);

}

4 4 プログラミングの基礎プログラミングの基礎4.1 プログラムの制御構造1:順次

数値の入力に注意!

15

4.1 プログラムの制御構造1:順次(復習)

プログラムの基本ルール1:命令は,一度に一つだけ実行される

プログラムの基本ルール2:命令は,一つずつ(下に)順々に実行される

命令1

命令2

命令3

命令4

非常に重要#include<sit.h>

main(){Init();

Zenshin(2.0);

Hidari_Turn(0.5);

Migi_Turn(0.5);

Koutai(2.0);

}

16

4.2 プログラムの制御構造2:反復(ループ,リピート)

#include<sit.h>

 main(){Init();

   while(MUGEN){     Zenshin(2.0);

         Hidari_Turn(0.5);   }

 }

17

4.2 プログラムの制御構造2:反復(復習)

プログラムの基本ルール2(反復):反復の終わりまで来たら反復の始まりまで戻る.ある終了条件を満たすまで反復は繰り返される.

注:命令が一つずつ実行される   のは変わらない

非常に重要

反復の始

反復の終

終了条件が書いてある(ここでは無限回繰り返す)

#include<sit.h>

main(){Init();

while(MUGEN){Zenshin(2.0);Hidari_Turn(0.5);

}}

ここでは「前進」→「左ターン」→「前進」→「左ターン」・・・を繰り返す

18

4.3 プログラムの制御構造3:条件分岐

#include<sit.h>

main(){Init();

while(MUGEN){if(Oshita1){

Hidari_Turn(0.5); }else{

Zenshin(2.0);}

}}

図のようにタッチセンサーを1番に取り付ける

19

#include<sit.h>

main(){Init();

while( MUGEN ){    if( Oshita1 ){      Hidari_Turn(0.5);     }    else{

 Zenshin(2.0); }

}}

4.3 プログラムの制御構造3:条件分岐(復習)

プログラムの基本ルール3(条件分岐):ある条件を満たした場合には,「はい」の方が実行され,満たしていない場合には「いいえ」の方が実行される.注:一度に実行されるのはどちらか  一方だけ.

非常に重要

条件が記述されている(センサー1とつながったタッチ センサーがおされているか?)

「はい」のとき実行

「いいえ」のとき実行

20

5. 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();

while (MUGEN) {     if (Kurai2) {     Koutai(1.0);      }     else {

  Zenshin(1.0); }

}}

24

[例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 {}

}}

}

25

55. . 課題課題次の課題の車を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

2つのセンサーが境界線をまたいでいる時

2つのセンサーが両方とも黒線上の時

2つのセンサーが両方とも白の時

右折 左折直進

[課題7]2つのライトセンサーを使った次の動きをするライントレースカー