Stair Climberのプログラミング ~レゴマインドストームEV3~
Contents
レゴマインドストームEV3のStair Climber
教育用レゴマインドストームEV3の拡張機能を使ってサンプルに載っていたStair Climber(ステア・クライマー)を作ってみた時の備忘録。
Stairは階段、Climberは登るなので直訳すると階段登り。
後輪をコンベアで下げて機体全体を持ち上げることにより階段を登ってゆく。
段を登るイメージが沸かないと思うのでまずは下記の動画を見て欲しい。
下記は本格的なプログラミングの前にとりあえず低速で1段だけを登ってみた時の動画。
およその動きが理解できると思う。
駆動部・センサー類の説明
前輪Lモーター(ポートB) | ポートBのLモーターで前輪を駆動している マイナス回転で前進、プラス回転で後退する |
真ん中の車輪 | 真ん中の車輪は駆動輪では無いが後退しないようにストッパーが付いている ゴムで筒状のブロックをギアに押し付けることにより逆回転(後退)を防いでいる |
後輪Mモーター(ポートA) | ポートAのMモーターで後輪を駆動している 前輪と同じくマイナス回転で前進、プラス回転で後退する 但しパワー値は前輪×0.9程度で釣り合っている |
後輪リフト用Lモーター(ポートD) | 後輪リフト用のLモーター Lモーターの回転をギアからキャタピラに伝えて後輪を上げ下げする 後輪を下げることにより機体全体を持ち上げる |
タッチセンサー | 上記のLモーターで後輪を上げ下げする時の”下げ”の時の下限を判断するためのセンサー タッチセンサーが押される事により下限に達したことが分かる タッチセンサーが押される瞬間 |
ジャイロセンサー | 前輪が段差を登り始めると機体が傾くのでジャイロセンサーを使って判断する |
プログラム概要
まずはプログラムの全体構造、細かいブロック毎の機能やロジックは後述する。
mainブロック
mainブロックはこちらのサイトを参考にさせてもらったので詳細な説明はリンク先のPDFを参考にして欲しい。
ざっくり説明をすると、1行目は初期処理。
steps変数の初期化(0をセット)やLモーター(ポートD)で後輪の上げ下げを行い初期定位置の確保、ジャイロセンサーのリセット等を行っている。
2行目はインテリジェントボタンの上下キーでこれから登る階段数をsteps変数にセットしている。
真ん中ボタンを押すと3行目に制御が移る。
3行目はsteps変数の数だけclimber(マイブロック)を繰り返す。
climberを実行するたびにsteps変数をカウントダウンしている。
4行目は終了処理、少しだけ前進してモーターをオフにする。
プログラムの内容
次に個々のブロックの処理の流れについてみてみる。
今回はclimber以降のマイブロックを試行錯誤しながら作成した。
climberブロック
階段を1段だけ登るプログラム。
1 | プログラム開始 |
2 | ジャイロセンサーをリセット(念の為) |
3 | ジャイロセンサーの角度が20(度)以上になるまで4を繰り返す |
4 | advマイブロック(前進処理)を実行する |
5 | 前輪を停止する |
6 | 後輪を停止する |
7 | タッチセンサーが押されるまで8を繰り返す |
8 | liftマイブロック(キャタピラを使って後輪を下げて車体全体を持ち上げると同時に前輪を駆動する)を実行する |
9 | キャタピラを停止する |
10 | 前輪を停止する |
11 | resマイブロック(後輪を持ち上げながら前進する)を実行する |
12 | 前輪をパワー20で前進する |
13 | 後輪をパワー18で前進する |
adv(マイブロック)
機体を前進させる。
1 | プログラム開始 |
2 | 前輪を前進駆動する |
3 | 後輪を前進駆動する |
lift(マイブロック)
後輪を下げて車体全体を持ち上げる
1 | プログラム開始 |
2 | 後輪を下げる |
3 | 前輪を前進駆動する |
res(マイブロック)
後輪を上げて元の状態に戻すと同時に前進する。
1 | プログラム開始 |
2 | 後輪をパワー90で上げる |
3 | 後輪をパワー20で上げる(最後は弱いパワーで調整する) |
4 | 前進する |
使用したブロック
今回使用したブロックは以下の4種類。
尚、mainで使用したブロックは省略してclimber、adv、lift、resで使用したブロックのみを記載している。
ジャイロセンサーブロック
ジャイロセンサーをリセットする。
climberブロック ジャイロセンサーをリセットする
|
ループブロック
ループブロックは指定した条件を満たすまで繰り返し処理を行うブロック。
climberブロック ジャイロセンサーの角度が20度以上になるまで繰り返し
前輪が段差を登って機体が傾いた事を検出する | |
climberブロック タッチセンサーが押されるまで繰り返し
後輪を下げた時の下限を判定する |
Lモータブロック
重いものをゆっくり動かすのが得意なLモータ。
Mモータブロック
軽いものを素早く動かすのが得意なMモーター。
Mモーター(ポートA)を-45のパワーで動作させて後輪を前進方向に回転させる
パワーはマイナスで前進、プラスで後退する またポートBのLモーターと比較して約90%の出力で同等の速度になる
| |
Mモーター(ポートA)を停止する
|
プログラミングと実際に動かしてみた時の動画
プログラミングと実際に動かしてみた時の動画。
登る階段数を事前にセットする様子や実際に階段を登る様子動画で見てみて欲しい。
最近のコメント