実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!

Slides:



Advertisements
Similar presentations
山元進.  for 文  while 文  do ~ while 文  文のネスト  break 文  continue 文.
Advertisements

プログラミング演習( 2 組) 第 9 回
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB : 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎 :
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB : 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎 :
4章 制御の流れ-3.
配列(2) 第10回[平成15年6月26日(木)]:PN03-10.ppt 今日の内容 1 素数を求める(教科書の例):復習
解析的には解が得られない 方程式を数値的に求める。 例:3次方程式
プログラミング入門 第5回講義 第5回講義 制御の流れ(1) ループ(その1) - while - インデント(3) ループとは(7)
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
第6章 2重ループ&配列 2重ループと配列をやります.
プログラミング入門第4回 ~レゴロボットのプログラミング3~
担当:青木義満、篠埜 功 情報工学科 3年生対象 専門科目 システムプログラミング 第8回、第9回 シグナル処理 担当:青木義満、篠埜 功
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
プログラミング入門2 第3回 繰り返し文 芝浦工業大学情報工学科 青木 義満
第7回 条件による繰り返し.
プログラムの制御構造 選択・繰り返し.
岩村雅一 知能情報工学演習I 第11回(後半第5回) 岩村雅一
関数の定義.
第10回関数 Ⅱ (ローカル変数とスコープ).
プログラミング序論 2. n人のインディアン.
高度プログラミング演習 (03).
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
indentについて forやifの「中身」を右に寄せる. forやifの「外枠」は右に寄せない. int x; x = 3;
第7回 条件による繰り返し.
専門教育入門セミナーT in KatLab 2018/10/14 平木場風太 作成
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
プログラミング入門第6回 ~レゴロボットのプログラミング6~
プログラミング入門第5回 ~レゴロボットのプログラミング5~
関数への道.
プログラムの制御構造 配列・繰り返し.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
プログラミング言語論 第四回 理工学部 情報システム工学科 新田直也.
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
Cプログラミング演習資料.
オブジェクト プログラミング 第2回 プログラムの基本.
C言語ファミリー C# 高級言語(抽象的) Java オブジェクト指向 C++ C 機械語(原始的)
第4章 反復作業を楽にする方法!! ~繰り返しその1 while~
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
IF文 START もしも宝くじが当たったら 就職活動する 就職活動しない YES END NO.
プログラミングⅡ 第2回.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
復習 Cにおけるループからの脱出と制御 break ループを強制終了する.if文と組み合わせて利用するのが一般的. continue
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
実践ロボットプログラミング LEGO Mindstorms NXT で目指せロボコン! WEB: 著者:藤吉弘亘,藤井隆司,鈴木裕利,石井成郎
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
第5回 プログラミングⅡ 第5回
高度プログラミング演習 (11).
復習 breakとcontinueの違い int i; for (i = 1; i <= 100; i++) { ・・・処理1・・・・
第5章 まだまだ続く反復処理!! ~繰り返しその2 for~
ニュートン法による 非線型方程式の解.
プログラミング基礎演習 第4回.
ループだよ!難しいよ! 第5章 while(ループ);.
関数と再帰 教科書13章 電子1(木曜クラス) 2005/06/22(Thu.).
システムプログラミング 第11回 シグナル 情報工学科  篠埜 功.
モバイルプログラミング第2回 C言語の基礎 (1).
第10回 関数と再帰.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
専門教育入門セミナー 2016/10/31.
プログラミング入門2 第3回 条件分岐(2) 繰り返し文 篠埜 功.
計算技術研究会 第5回 C言語勉強会 関数(function)を使う
計算機プログラミングI 第10回 2002年12月19日(木) メソッドの再定義と動的結合 クイズ メソッドの再定義 (オーバーライド)
実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン!
Presentation transcript:

実践ロボットプログラミング LEGO Mindstorms EV3 で目指せロボコン! WEB:http://www.robot-programming.jp/ 著者:藤吉弘亘, 藤井隆司, 鈴木裕利, 石井成郎 E-mail:support@robot-programming.jp

04: 関数化 (p.63〜) 2

ロボットを一周させる時 同じ処理が何度も繰り返される → 関数化 1回目 3秒前進→90度旋回 3回目 2回目 4回目 3

関数化1(p.64 func.c) 関数化 #include "./jissenPBL.h" void forward(){ OnFwdEx(OUT_BC, 50,0); Wait(3000); } void turn_right(){ OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); Wait(500); int main() { OutputInit(); forward(); turn_right(); Off(OUT_BC); #include "./jissenPBL.h" int main() { int i ; OutputInit(); OnFwdEx(OUT_BC, 50,0); Wait(3000); OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); Wait(500); Off(OUT_BC); } 関数化 呼び出し

関数化2(p.64 func.c) #include "./jissenPBL.h" void forward(){ OnFwdEx(OUT_BC, 50,0); Wait(3000); } void turn_right(){ OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); Wait(500); int main() { OutputInit(); forward(); turn_right(); Off(OUT_BC); #include "./jissenPBL.h" void forward(int time){ OnFwdEx(OUT_BC, 50,0); Wait(time); } void turn_right(int time){ OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); int main() { OutputInit(); forward(3000); turn_right(500); Off(OUT_BC);

引数を持つ関数 関数の書式:void 関数名(引数){ } 引数は関数内のみ有効

旋回角度(時間制御)を調整するには、TURN90の値を変るだけで全てに反映 #defineによる定義 (p.65) → #include "./jissenPBL.h" #define TURN90 500 void forward(int time){ OnFwdEx(OUT_BC, 50,0); Wait(time); } void turn_right(int time){ OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); int main() { int i; OutputInit(); for(i=0; i<4; i++){ forward(3000); turn_right(TURN90); } Off(OUT_BC); → 旋回角度(時間制御)を調整するには、TURN90の値を変るだけで全てに反映

■■ チャレンジ! ■■ 星形やスパイラルの軌跡を描くロボットを実現してみよう! これは 簡単かも! … 8

05: 演算と変数 (p.66〜) 9

50cm前進するには? モータの回転角を変化させたときの直進距離を測定し、法則を みつける 角度[°] 距離[cm] 1cmあたりの 回転角度 180 9.0 20.0 360 17.5 20.6 720 34.5 20.8 1080 52.5 20.5 1440 69.5 20.4 RotateMotor(OUT_BC, 50, 180); 角度: 180〜1440度 中央値 ※1cmあたりの回転角度 =回転角度[°] / 距離[cm] 回転角度 = 直進したい距離 × 1cmあたりの回転角度 20.5度 10

50cm前進するには? (forward50cm.c) 実数型(double)を使用 #include "./jissenPBL.h" int main() { double angle; OutputInit();  angle=50*20.5; RotateMotor(OUT_BC, 50, angle); Off(OUT_BC); } 11

50cm前進するには? (forward50cm.c) 関数化 #include "./jissenPBL.h" void forward_cm(double cm){ double angle; angle=cm*20.5; RotateMotor(OUT_BC, 50, angle); } int main() { OutputInit(); forward_cm(50.0); Off(OUT_BC); 12

スパイラル軌跡に挑戦しよう 星形やスパイラルの軌跡を描くロボットの動きを実現してみよ う! これは簡単! … 13

実現したい動きの規則性 繰り返し回数ごとのロボットの動きを表にしてみよう 回数 前進 右回転 1 10cm 90度 6 60cm 90度 14

実現したい動きの規則性 規則性を数式で表現 1 10 前進する距離 = 10cm×回数 回数←回数+1 回数←1 回数 前進 右旋回 15

スパイラル状の軌跡のPAD 繰り返し回数cntと演算によりスパイラル軌跡を実現 1 2 3 4 5 6 スパイラル cnt←1 cntx10cm前進 角度の計算 無限ループ 3 4 求めた角度前進 90度右旋回 5 cnt←cnt+1 6 16

スパイラル状の軌跡 (p.69 spiral.c) → → 1 2 3 4 3 4 5 6 #include "./jissenPBL.h" #define TURN90 500 void forward_cm(double cm){ double angle; angle=cm*20.5; RotateMotor(OUT_BC, 50, angle); } void turn_right(int time){ OnFwdEx(OUT_B, 50,0); OnRevEx(OUT_C, 50,0); Wait(time); int main() { int cnt=1 ; double angle;   ButtonLedInit(); OutputInit(); while(true){ forward_cm(cnt*10.0); turn_right(TURN90);     cnt=cnt+1;     //force-quit if(ButtonPressed(BTN1)) break; }   Off(OUT_BC); 1 2 3 4 3 4 5 6 →

while (true) { } while文を用いたループ while(true){処理} とすると無限ループ 繰り返す処理 //force-quit if(ButtonPressed(BTN1)) break; } Off(OUT_BC); 無限ループのプログラムを作成する時は: プログラムの緊急停止(無限ループ脱出)のための処理を必ず入れておくこと 無限ループ脱出後の処理として、モータを停止する命令を追加すること 18