1. - 湘南工科大学 情報工学科 ホームページ

Download Report

Transcript 1. - 湘南工科大学 情報工学科 ホームページ

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