Slide 1

Slide 1 text

はじめてのプログラミングと ロボット制御 第0回:導入 日本大学 工学部 機械工学科 専任講師 今林亘 2024年7月14日

Slide 2

Slide 2 text

なんでロボットやるのか 2 単純にワクワクするから.楽しいから.

Slide 3

Slide 3 text

何の役に立つのか? 3 1. 実ロボットを扱う経験 ➢ 機械要素(動力学,設計,加工) ➢ 電気要素(モータ,電気回路,電子回路) ➢ 情報要素(プログラミング,アルゴリズム) 2. Project Based Learning的学習 ➢ 作戦立案(人,お金,設備,納期,何をやるか) ➢ 設計,開発 ➢ デバック ➢ リリース ➢ フィードバック 3. 自分の専門分野への応用 ➢ ロボット開発で得られた部分的な技術の転用や応用 ➢ 期限の設定や作業時間の見積もり等の予測等

Slide 4

Slide 4 text

個人的に,ロボットを作って良かった点 4 • 技術の幅が広がる(何でもできる) • ロボット作りを通して人のことがわかる • ロボコンに参加する人に話しかけられる. • ロボコン経験が大学院進学につながる (希少なスキル,重宝される)

Slide 5

Slide 5 text

講義の内訳 5 ビジュアルプログラミング ロボット制御 pythonプログラミング

Slide 6

Slide 6 text

micro:bitでできること 6 機能:①LED点灯 ②ボタンスイッチ ③スピーカー ④マイク ⑤タッチセンサ ⑥加速度センサ ⑦地磁気センサ ⑧CPU ② ① ③ ④ ⑤ ⑥ ⑦ ⑧

Slide 7

Slide 7 text

ロボットマックイーンでできること 7 追加機能:①超音波距離センサ ②モータ ③ラインセンサ ライントレース制御が実現可能 ② ① ③

Slide 8

Slide 8 text

はじめてのプログラミングと ロボット制御 第1回:ビジュアルプログラミング 日本大学 工学部 機械工学科 専任講師 今林亘 2024年7月14日

Slide 9

Slide 9 text

プログラミングするための準備 9 ①“https://makecode.microbit.org/?lang=ja”と検索する. ②新しいプロジェクトをクリックする

Slide 10

Slide 10 text

プログラミングするための準備 10 ①適当に名前をつけて「作成」をクリック

Slide 11

Slide 11 text

プログラミングするための準備 11 プログラム開発画面

Slide 12

Slide 12 text

プログラミングするための準備 12 プログラムの要素タブ

Slide 13

Slide 13 text

プログラミングするための準備 13 プログラミングタブ

Slide 14

Slide 14 text

プログラミングするための準備 14 電子基板シミュレータの実行結果表示タブ

Slide 15

Slide 15 text

プログラミングするための準備 15 プログラミング言語変更タブ

Slide 16

Slide 16 text

試しにプログラミング 16 ①「基本」をクリックする ②このブロックをドラッグ ③ここにドロップ

Slide 17

Slide 17 text

試しにプログラミング 17 ①「ずっと」ブロックの中にいれる ②緑のボタンを押すとHelloが表示

Slide 18

Slide 18 text

次は実際の電子基板で実験 18 ①「ダウンロード」ボタンをクリック

Slide 19

Slide 19 text

プログラミングするための準備 19 ①USBケーブルを使って PCと電子基板を接続

Slide 20

Slide 20 text

次は実際の電子基板で実験 20 ①「次へ」をクリック

Slide 21

Slide 21 text

プログラミングするための準備 21 ①「ペア」をクリック

Slide 22

Slide 22 text

プログラミングするための準備 22 ①「接続」をクリック

Slide 23

Slide 23 text

プログラミングするための準備 23 ①「ダウンロード」をクリック

Slide 24

Slide 24 text

プログラミングするための準備 24 ①静かに待つ

Slide 25

Slide 25 text

接続トラブル 25 ①電子基板がないと リストに表示されない.

Slide 26

Slide 26 text

プログラム1:実行順番 26 プログラムは上から順番に実行されます.

Slide 27

Slide 27 text

プログラム1-ex 27 マイコンの色んな機能を試しましょう.

Slide 28

Slide 28 text

プログラム2:四則演算 28 マイコンはコンピュータなので, 四則演算できます.

Slide 29

Slide 29 text

プログラム2-ex:四則演算の演習課題 29 1. 9の倍数を画面に表示させるプログラムを 作りましょう. 2. サイコロを作ってください. • Aボタンを押したら,1~6の値を表示 させてようにしてください. 「□から□までの乱数」まで利用

Slide 30

Slide 30 text

プログラム3:変数を使いましょう 30 変数は数字を入れる箱 クリック

Slide 31

Slide 31 text

プログラム3:変数を使いましょう 31 クリック 好きな文字を設定して変数を作りましょう.

Slide 32

Slide 32 text

プログラム3:変数を使いましょう 32 色々つくりましょう. 変数リストができました.

Slide 33

Slide 33 text

プログラム3:変数を使いましょう 33 好きな数字を変数に入れて,実行できます.

Slide 34

Slide 34 text

プログラム3:変数を使いましょう 34 変数内の数字を増やしていきましょう.

Slide 35

Slide 35 text

プログラム3:変数を使いましょう 35 このような増やし方もできますね.

Slide 36

Slide 36 text

プログラム3:変数を使いましょう 36 ボタンを使って増減させられますね.

Slide 37

Slide 37 text

プログラム3-ex:変数の演習問題 37 1. XとYとZという変数を作成し,それぞれの変数に X=5, Y=10,Z=0を代入して!. その後,Z=X + Yを演算するプログラムを作成して, 結果を画面に表示させて!. 2. Xという変数を作成し,X=0で初期化します. Aボタンを押すと,Xの中身を5増やして,画面表示 するプログラムを作って! 3. XとYという変数を作成,それぞれの変数にX=0, Y=0を代入して!その後,Aボタンを押すたびに, Xを1ずつ増やして! そして,Y=X^2を計算し,Yを画面に表示させて!

Slide 38

Slide 38 text

プログラム4:条件分岐を勉強しましょう. 38 もしブロックを使うと,その条件に 当てはまると中身が実行できる.

Slide 39

Slide 39 text

プログラム4:条件分岐を勉強しましょう. 39 もしブロックを使うと,その条件に 当てはまると中身が実行できる.

Slide 40

Slide 40 text

データロギング 40 センサデータを出力するときに使用 クリック

Slide 41

Slide 41 text

データロギング 41 センサデータを出力するときに使用 クリック

Slide 42

Slide 42 text

データロギング 42 センサデータを出力するときに使用

Slide 43

Slide 43 text

データロギング 43 センサデータを出力するときに使用

Slide 44

Slide 44 text

データロギング 44 センサデータを出力するときに使用 クリック

Slide 45

Slide 45 text

データロギング 45 センサデータを出力するときに使用 センサの取得値

Slide 46

Slide 46 text

データロギング 46 センサデータを出力するときに使用 左のボタンを押して, データ取得を終了させて, 右のボタンでcsvデータとして ダウンロード

Slide 47

Slide 47 text

データロギング 47 データで遊ぼう!!

Slide 48

Slide 48 text

はじめてのプログラミングと ロボット制御 第2回:ロボット制御 日本大学 工学部 機械工学科 専任講師 今林亘 2024年7月14日

Slide 49

Slide 49 text

ロボット制御するための準備 49 ①ロボットを組み立てる(そんなに難しくない). ②micro:bitを差し込む(向きに気をつける).※ミスると爆発 ③電池を入れる(向きに気をつける).※ミスると爆発 ① ② ③ ④

Slide 50

Slide 50 text

ロボット制御のためのテストプログラム 50 拡張機能をクリックする クリック

Slide 51

Slide 51 text

ロボット制御のためのテストプログラム 51 クリック

Slide 52

Slide 52 text

ロボット制御のためのテストプログラム 52 拡張後の追加ブロック集

Slide 53

Slide 53 text

ロボット制御のためのテストプログラム 53 プログラム完成後, 通常通り基板にダウンロードする

Slide 54

Slide 54 text

ロボット制御のためのテストプログラム 54 ダウンロード後,基板をロボットに差し込み, 電源スイッチを入れると,プログラム実行 ロボット を準備 基板を 差し込む 電源を入れる (スライド)

Slide 55

Slide 55 text

ロボット制御のためのテストプログラム 55 ロボットを前に進めるプログラム モータが正常に動くかどうか確認

Slide 56

Slide 56 text

ロボット制御のためのテストプログラム 56 ラインセンサのテストプログラム 左のセンサに指を近づけて0→1に変化するか確認

Slide 57

Slide 57 text

ロボット制御のためのプログラム1 57 前へ進んで,Uターンするプログラム

Slide 58

Slide 58 text

ロボット制御のためのプログラム2 58 障害物を回避するプログラム

Slide 59

Slide 59 text

micro:bitの実行速度 59 ところで,「ずっと」を一回実行するのに かかる時間は? 一回実行するのに 何秒かかる?

Slide 60

Slide 60 text

micro:bitの実行速度 60 1000回カウントすると「1」を表示させる. 何秒かかるかな?

Slide 61

Slide 61 text

micro:bitの実行速度 61 おそらく,20秒くらいかかるはず. よって,20秒/1000回=20ミリ秒/回 micro:bitの実行速度はそれくらい.

Slide 62

Slide 62 text

micro:bitの実行速度 62 次は,数字をカウントしながら, その数字を表示させてみましょう.

Slide 63

Slide 63 text

micro:bitの実行速度 63 次は,数字をカウントしながら, その数字を表示させてみましょう. けっこう時間かからん? LEDに表示させるのって 時間かかるんよー しょうもない処理を入れると マイコンが鈍くなるよ

Slide 64

Slide 64 text

黒の線を数えるプログラム 64 段階的にプログラムを作っていきます. プログラムの流れ 1.真っ直ぐ走る 2.白から黒へ変化するところをキャッチする 3.キャッチしたらカウントする 4.任意の本数キャッチしたら停止&表示

Slide 65

Slide 65 text

黒線のキャッチの仕方 65 黒 白 赤の部分を検出する. ラインの色の変化をキャッチできれば.

Slide 66

Slide 66 text

黒の線を数えるプログラム 66 これで走ります.実行すると,現在と過去の ラインセンサの値を記憶します.

Slide 67

Slide 67 text

黒の線を数えるプログラム 67 現在と過去のラインセンサ値に変化があれば, 黒線をふんだと認識させて,カウントする. あくまでも変化を キャッチしているので...

Slide 68

Slide 68 text

黒の線を数えるプログラム 68 完成しました.白から黒へ変化する ところをキャッチします.

Slide 69

Slide 69 text

ライントレースとは? 69 ラインに沿ってロボットを走らせる制御方式

Slide 70

Slide 70 text

ライントレースの基本1 70 どちらのセンサも白なら前進

Slide 71

Slide 71 text

ライントレースの基本2 71 右のセンサが黒なら右旋回(左モータの回転↑)

Slide 72

Slide 72 text

ライントレースの基本3 72 左のセンサが黒なら左旋回(右モータの回転↑)

Slide 73

Slide 73 text

ライントレース制御(ON/OFF制御) 73 上記の3つのルールを組み合わせると

Slide 74

Slide 74 text

ライントレース制御(P制御) 74 上記の3つのルールを組み合わせると

Slide 75

Slide 75 text

ロボット制御のためのプログラム5 75 隊列走行(ほかの学生と協力しよう!!) そんなに難しくないよ!

Slide 76

Slide 76 text

はじめてのプログラミングと ロボット制御 第3回:pythonプログラミング 日本大学 工学部 機械工学科 専任講師 今林亘 2024年7月14日

Slide 77

Slide 77 text

ビジュアルプログラミング疲れません? 77 ドラッグ&ドロップめんどうくさくない? あと,大規模なプログラムになるとどう?

Slide 78

Slide 78 text

文字になるとハッピー 78 文字になると整理整頓された感じ! ちかちかしない.

Slide 79

Slide 79 text

プログラミング言語「python」 79 • プログラミング言語の一種 • インタープリター言語であり, 一行だけでプログラムの実行が可能. • 初心者が学ぶプログラミング言語でも人気 • 近年,人工知能やロボットのプログラムに よく使われる. • プログラムは上から順番に実行される. • コメントは「#〇〇〇〇」で記述 • 複数行コメントは「””” 〇〇 “””」 • コメント以外全角文字は使用禁止(スペースも) • タブ(インデント)でプログラムの階層を 記述(違反すると,プログラムエラー)

Slide 80

Slide 80 text

micro:bitのpythonの導入方法1 80 上の部分で切り替え

Slide 81

Slide 81 text

micro:bitのpythonの導入方法1 81 上の部分で切り替え

Slide 82

Slide 82 text

micro:bitのpythonの導入方法2 82 プロジェクト作成時にpythonで設定 コードオプション時にPythonだけを選択

Slide 83

Slide 83 text

micro:bitのpythonの導入方法2 83 プロジェクト作成時にpythonで設定 コードオプション時にPythonだけを選択 この部分にプログラムを書く

Slide 84

Slide 84 text

micro:bitのpythonの導入方法2 84 プログラムを,選択してドラッグ&ドロップ

Slide 85

Slide 85 text

micro:bitのpythonの導入方法2 85 プログラムを,選択してドラッグ&ドロップ

Slide 86

Slide 86 text

micro:bitのpythonの導入方法2 86 プログラムを,選択してドラッグ&ドロップ

Slide 87

Slide 87 text

プログラム1_py:実行順番 87 pythonバージョンだとこうなります. コピペを連続で使うと便利 def on_forever():#ずっと basic.show_number(1)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(2)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(3)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(4)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(5)#数を表示 pass basic.forever(on_forever) チート

Slide 88

Slide 88 text

プログラム1-ex1_py 88 マイコンの色んな機能を試しましょう. def on_forever():#ずっと basic.show_icon(IconNames.HEART)#アイコンを表示 basic.pause(500)#一時停止(ミリ秒) music.string_playable("", 150) basic.pause(500)#一時停止(ミリ秒) music.built_in_playable_melody(Melodies.DADADADUM)#鳴らす「」 basic.pause(500)#一時停止(ミリ秒) basic.show_number(input.temperature())#数を表示「温度」 basic.pause(500)#一時停止(ミリ秒) basic.show_number(input.compass_heading())#数を表示「方角」 basic.pause(500)#一時停止(ミリ秒) basic.show_number(input.light_level())#数を表示「明るさ」 basic.pause(500)#一時停止(ミリ秒) pass basic.forever(on_forever)

Slide 89

Slide 89 text

プログラム1-ex2_py 89 def on_button_pressed_a():#ボタンAが押されたとき basic.show_leds(""" . . # . . . # # # . # . . . # # # # # # # . . . # """) pass input.on_button_pressed(Button.A, on_button_pressed_a) マイコンの色んな機能を試しましょう.

Slide 90

Slide 90 text

プログラム1-ex3_py 90 def on_button_pressed_b():#ボタンBが押されたとき basic.show_leds(""" # # # # . # . . . # # # # # # # . . . # # # # # . """) pass input.on_button_pressed(Button.B, on_button_pressed_b) マイコンの色んな機能を試しましょう.

Slide 91

Slide 91 text

プログラム2_py:四則演算 91 マイコンはコンピュータなので, 四則演算できます. def on_forever():#ずっと basic.show_number(1+ 2)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(10 - 6)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(6* 4)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(32/4)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(5^2)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(32/5)#数を表示 basic.pause(500)#一時停止(ミリ秒) pass basic.forever(on_forever)

Slide 92

Slide 92 text

プログラム3_py:変数を使いましょう 92 好きな数字を変数に入れて,実行できます. x = 0 #変数xを0にする A2=2 #変数A2を2にする y = 1 #変数yを1にする def on_forever(): basic.show_number(x)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(A2)#数を表示 basic.pause(500)#一時停止(ミリ秒) basic.show_number(y)#数を表示 basic.pause(500)#一時停止(ミリ秒) pass basic.forever(on_forever)

Slide 93

Slide 93 text

プログラム3_2_py:変数を使いましょう 93 変数内の数字を増やしていきましょう. x = 0 #xを0にする. while True: #while文を使ったずっとの実現 basic.show_number(x)#数の表示 x += 1 #変数xを1だけ増やす basic.pause(1000)#一時停止(ミリ秒) pass

Slide 94

Slide 94 text

プログラム3_3_py:変数を使いましょう 94 このような増やし方もできますね. y = 0 #yを0にする. while True: #while文を使ったずっとの実現 basic.show_number(y) #数の表示 y = y + 1 #変数yを1だけ増やす basic.pause(1000)#一時停止(ミリ秒) pass

Slide 95

Slide 95 text

プログラム3:変数を使いましょう 95 ボタンを使って増減させられますね. x = 0 #xを0にする. while True: #while文を使った「ずっと」の実現 #ボタンAが押されたら if input.button_is_pressed(Button.A): x = x + 1 #変数xを1だけ増やす basic.show_number(x) #数の表示 basic.pause(100) #一時停止(ミリ秒) pass #ボタンBが押されたら if input.button_is_pressed(Button.B): x = x - 1 #変数xを1だけ減らす basic.show_number(x) #数の表示 basic.pause(100) #一時停止(ミリ秒) pass pass

Slide 96

Slide 96 text

プログラムの制御文法 96 If文else文:もし~なら for文:繰り返し処理 while文:条件を満たしていれば無限ループ x=1 if (x == 1): #xの中身が1ならここを実行 basic.show_number(1) pass else: #xの中身が1以外ならここを実行 basic.show_number(0) pass x=0 while (x ==0): #xが0であれば,while文の中を無限ループする. #無限ループから出たい場合,xの値をいじって,xが0でない #状況を作り出す必要がある. basic.show_number(0) pass x=5 for i in range(x): #iを0に初期化して5回繰り返し処理 basic.show_number(i)#iの中身を表示 #処理がすべて終わるときに,iに1を足す pass

Slide 97

Slide 97 text

プログラム4_1_py:条件分岐を勉強 97 もしブロックを使うと,その条件に 当てはまると中身が実行できる. x = 0 #xを0にする. while True: #while文を使った「ずっと」の実現 #ボタンAが押されたら if input.button_is_pressed(Button.A): x = x + 1 #変数xを1だけ増やす basic.show_number(x) #数の表示 pass #ボタンBが押されたら if input.button_is_pressed(Button.B): x = x - 1 #変数xを1だけ減らす basic.show_number(x) #数の表示 pass if (input.button_is_pressed(Button.A) && input.button_is_pressed(Button.B)): x = x + 5 #変数xを5だけ増やす basic.show_number(x) #数の表示 pass pass

Slide 98

Slide 98 text

プログラム4_2_py:条件分岐を勉強 98 もしブロックを使うと,その条件に 当てはまると中身が実行できる. y = 0 #yを0にする. while True: #while文を使った「ずっと」の実現 basic.show_number(y)#数の表示 #ボタンAが押されたら if input.button_is_pressed(Button.A): y = y + 1 #変数yを1だけ増やす if y==3: #もしyが3なら basic.show_string("Hello!")#文字列を表示 pass pass pass

Slide 99

Slide 99 text

ロボット制御のためのテストプログラム 99 ロボットを前に進めるプログラム モータが正常に動くかどうか確認 #CW: Clockwise 時計回り #CCW: Counter Clockwise 反時計回り while True:#ずっと #左のモータを正回転で速度50に設定 maqueen.motor_run(maqueen.Motors.M1,maqueen.Dir.CW, 50) #右のモータを正回転で速度50に設定 maqueen.motor_run(maqueen.Motors.M2,maqueen.Dir.CW, 50) pass

Slide 100

Slide 100 text

ロボット制御のためのテストプログラム 100 ラインセンサのテストプログラム 左のセンサに指を近づけて0→1に変化するか確認 #ずっと while True: #左のラインセンサの確認 basic.show_number(maqueen.read_patrol(maqueen.Patrol.PATROL_LEFT)) pass

Slide 101

Slide 101 text

ロボット制御のためのプログラム1 101 前へ進んで,Uターンするプログラム while True:#ずっと basic.pause(500) #一時停止(ミリ秒) #両方のモータを動かす maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 50) basic.pause(500) #一時停止(ミリ秒) #両方のモータを停止させる maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 0) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 0) #左のモータを駆動させる maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) basic.pause(1000) #一時停止(ミリ秒) #両方のモータを動かす maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 50) basic.pause(500) #一時停止(ミリ秒) pass

Slide 102

Slide 102 text

ロボット制御のためのプログラム2 102 障害物を回避するプログラム x = 10 while True: #超音波センサの値を確認して10cm以上なら停止 if (x > maqueen.ultrasonic(0)): #モータ停止 maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 0) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 0) pass else: #両方のモータを動かす maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 50) pass

Slide 103

Slide 103 text

黒の線を数えるプログラム 103 これで走ります.実行すると,現在と過去の ラインセンサの値を記憶します. XL = 1 XR = 1 pre_XL = 1 pre_XR = 1 black = 0 basic.pause(1000) #両方のモータを駆動 maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 50) while True: #過去の数値を更新 pre_XL = XL pre_XR = XR #ラインセンサーの値を読み取る. XL = maqueen.read_patrol(maqueen.Patrol.PATROL_LEFT) XR = maqueen.read_patrol(maqueen.Patrol.PATROL_RIGHT) pass

Slide 104

Slide 104 text

黒の線を数えるプログラム 104 完成しました.白から黒へ変化する ところをキャッチします. XL = 1 XR = 1 pre_XL = 1 pre_XR = 1 black = 0 basic.pause(1000) #両方のモータを駆動 maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 50) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 50) while True: #過去の数値を更新 pre_XL = XL pre_XR = XR #ラインセンサーの値を読み取る. XL = maqueen.read_patrol(maqueen.Patrol.PATROL_LEFT) XR = maqueen.read_patrol(maqueen.Patrol.PATROL_RIGHT) if (XL != pre_XL):#左のセンサの変化をとらえて if (XL == 0):#さらに,左のセンサが黒だったら black = black + 1 #白から黒への変化をとらえたと認識 pass pass if (black >= 4): #黒線を4本以上キャッチしたら, basic.show_number(black) #両方のモータを停止 maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 0) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 0) pass pass

Slide 105

Slide 105 text

ライントレース制御(ON/OFF制御) 105 上記の3つのルールを組み合わせると #ずっと while True: #左のセンサが黒なら右に曲がる if (maqueen.read_patrol(maqueen.Patrol.PATROL_LEFT)== 0): maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 5) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 30) pass #右のセンサが黒なら左に曲がる if (maqueen.read_patrol(maqueen.Patrol.PATROL_RIGHT)== 0): maqueen.motor_run(maqueen.Motors.M1, maqueen.Dir.CW, 30) maqueen.motor_run(maqueen.Motors.M2, maqueen.Dir.CW, 5) pass pass

Slide 106

Slide 106 text

ライントレース制御(P制御) 106 上記の3つのルールを組み合わせると desire = 0 #目標値を設定 Kp = 10 #制御ゲイン error =0 #誤差 basespeed =30 while True: #ずっと #センサの値取得 LS = maqueen.read_patrol(maqueen.Patrol.PATROL_LEFT) RS = maqueen.read_patrol(maqueen.Patrol.PATROL_RIGHT) sensor = -1*LS + RS #制御用センサ値取得 error = desire - sensor #誤差信号の計算 #P制御の実行 maqueen.motor_run(maqueen.Motors.M1,maqueen.Dir.CW, basespeed - Kp*error) maqueen.motor_run(maqueen.Motors.M2,maqueen.Dir.CW, basespeed + Kp*error) pass

Slide 107

Slide 107 text

ロボット制御のためのプログラム5 107 隊列走行(ほかの学生と協力しよう!!) そんなに難しくないよ! #制御ゲインの設定 Kp = 2 sensor = 0 while True: #超音波センサの情報をキャッチ sensor=maqueen.ultrasonic(0) #すべてのモータを動かす maqueen.motor_run(maqueen.Motors.M1,maqueen.Dir.CW, Kp*sensor) maqueen.motor_run(maqueen.Motors.M2,maqueen.Dir.CW, Kp*sensor) pass

Slide 108

Slide 108 text

プログラムの読みやすさ 108 x = 0 while True: if input.button_is_pressed(Button.A): x = x + 1 basic.show_number(x) pass if input.button_is_pressed(Button.B): x = x - 1 basic.show_number(x) pass pass x = 0 #xを0にする. while True: #while文を使った「ずっと」 #ボタンAが押されたら if input.button_is_pressed(Button.A): x = x + 1 #変数xを1だけ増やす basic.show_number(x) #数の表示 pass #ボタンBが押されたら if input.button_is_pressed(Button.B): x = x - 1 #変数xを1だけ減らす basic.show_number(x) #数の表示 pass pass before after

Slide 109

Slide 109 text

読みにくいプログラム 109 ・コメント文がない. ・意味のない変数や変数名. ・インデントやタブがない. ・if文やfor文の乱用による構造の不透明化