Stair Climberのプログラミング ~レゴマインドストームEV3~ | そう備忘録

Stair Climberのプログラミング ~レゴマインドストームEV3~

レゴマインドストームEV3のStair Climber

教育用レゴマインドストームEV3の拡張機能を使ってサンプルに載っていたStair Climber(ステア・クライマー)を作ってみた時の備忘録。

Stairは階段、Climberは登るなので直訳すると階段登り。

後輪をコンベアで下げて機体全体を持ち上げることにより階段を登ってゆく。

Stair Climber全体

段を登るイメージが沸かないと思うのでまずは下記の動画を見て欲しい。

下記は本格的なプログラミングの前にとりあえず低速で1段だけを登ってみた時の動画。

およその動きが理解できると思う。

 

駆動部・センサー類の説明

前輪Lモーター(ポートB) ポートBのLモーターで前輪を駆動している

マイナス回転で前進、プラス回転で後退する

Lモーターによる前輪の駆動

真ん中の車輪真ん中の車輪は駆動輪では無いが後退しないようにストッパーが付いている

ゴムで筒状のブロックをギアに押し付けることにより逆回転(後退)を防いでいる

真ん中の車輪

後輪Mモーター(ポートA)ポートAのMモーターで後輪を駆動している

前輪と同じくマイナス回転で前進、プラス回転で後退する

但しパワー値は前輪×0.9程度で釣り合っている

Mモーターで駆動する後輪

後輪リフト用Lモーター(ポートD)後輪リフト用のLモーター

Lモーターの回転をギアからキャタピラに伝えて後輪を上げ下げする

後輪を下げることにより機体全体を持ち上げる

後輪リフトアップ用Lモーター

タッチセンサー上記のLモーターで後輪を上げ下げする時の”下げ”の時の下限を判断するためのセンサー

タッチセンサーが押される事により下限に達したことが分かる

タッチセンサー

タッチセンサーが押される瞬間

タッチセンサーが押される瞬間

ジャイロセンサー前輪が段差を登り始めると機体が傾くのでジャイロセンサーを使って判断する

ジャイロセンサー

プログラム概要

まずはプログラムの全体構造、細かいブロック毎の機能やロジックは後述する。

mainブロック

mainブロックはこちらのサイトを参考にさせてもらったので詳細な説明はリンク先のPDFを参考にして欲しい。

ざっくり説明をすると、1行目は初期処理。

steps変数の初期化(0をセット)やLモーター(ポートD)で後輪の上げ下げを行い初期定位置の確保、ジャイロセンサーのリセット等を行っている。

2行目はインテリジェントボタンの上下キーでこれから登る階段数をsteps変数にセットしている。

真ん中ボタンを押すと3行目に制御が移る。

3行目はsteps変数の数だけclimber(マイブロック)を繰り返す。

climberを実行するたびにsteps変数をカウントダウンしている。

4行目は終了処理、少しだけ前進してモーターをオフにする。

プログラム概要mainブロック

プログラムの内容

次に個々のブロックの処理の流れについてみてみる。

今回はclimber以降のマイブロックを試行錯誤しながら作成した。

climberブロック

階段を1段だけ登るプログラム。

階段を一段だけ登るプログラム

プログラム開始
ジャイロセンサーをリセット(念の為)
ジャイロセンサーの角度が20(度)以上になるまで4を繰り返す
advマイブロック(前進処理)を実行する
前輪を停止する
後輪を停止する
タッチセンサーが押されるまで8を繰り返す
liftマイブロック(キャタピラを使って後輪を下げて車体全体を持ち上げると同時に前輪を駆動する)を実行する
キャタピラを停止する
10前輪を停止する
11resマイブロック(後輪を持ち上げながら前進する)を実行する
12前輪をパワー20で前進する
13後輪をパワー18で前進する

adv(マイブロック)

機体を前進させる。

advマイブロック

プログラム開始
前輪を前進駆動する
後輪を前進駆動する

lift(マイブロック)

後輪を下げて車体全体を持ち上げる

liftマイブロック

プログラム開始
後輪を下げる
前輪を前進駆動する

res(マイブロック)

後輪を上げて元の状態に戻すと同時に前進する。

resマイブロック

プログラム開始
後輪をパワー90で上げる
後輪をパワー20で上げる(最後は弱いパワーで調整する)
前進する

使用したブロック

今回使用したブロックは以下の4種類。

尚、mainで使用したブロックは省略してclimber、adv、lift、resで使用したブロックのみを記載している。

ジャイロセンサーブロック

ジャイロセンサーをリセットする。

ジャイロセンサー
climberブロック

ジャイロセンサーをリセットする

  • リセット

ループブロック

ループブロックは指定した条件を満たすまで繰り返し処理を行うブロック。

ループ ジャイロセンサー
climberブロック

ジャイロセンサーの角度が20度以上になるまで繰り返し

  • ループ:ジャイロセンサー、比較、角度
  • 比較タイプ:3(>=)
  • しきい値:20(度)

前輪が段差を登って機体が傾いた事を検出する

ループ タッチセンサー
climberブロック

タッチセンサーが押されるまで繰り返し

  • ループ:タッチセンサー、比較、状態
  • 状態:1(押された)

後輪を下げた時の下限を判定する

Lモータブロック

重いものをゆっくり動かすのが得意なLモータ。

Lモーター 前輪前進Lモーター(ポートB)を-50のパワーで動作させて前輪を前進方向に回転させる

  • Lモーター:オン
  • パワー:-50(反時計回りに回転する)

パワーは-50の他に-20、-60とケースによって使い分けている

Lモーター 前輪停止Lモーター(ポートB)を停止する

  • Lモーター:オフ
  • ブレーキ方法:真(惰性なしで停止)
Lモーター 後輪の上げ下げLモーター(ポートD)を-100のパワーで動作させてキャタピラを使って後輪を下げる

  • Lモーター:オン
  • パワー:-100

パワーはマイナスは後輪を下げる、プラスは後輪を上げる動作をする

Lモーター 後輪の上げ下げ停止Lモーター(ポートD)を停止する

  • Lモーター:オフ
  • ブレーキ方法:真(惰性なしで停止)

Mモータブロック

軽いものを素早く動かすのが得意なMモーター。

Mモーター 後輪駆動Mモーター(ポートA)を-45のパワーで動作させて後輪を前進方向に回転させる

  • Mモーター:オン
  • パワー:-45(反時計回りに回転する)

パワーはマイナスで前進、プラスで後退する

またポートBのLモーターと比較して約90%の出力で同等の速度になる

 

Mモーター 後輪停止Mモーター(ポートA)を停止する

  • Mモーター:オフ
  • ブレーキ方法:真(惰性なしで停止)

プログラミングと実際に動かしてみた時の動画

プログラミングと実際に動かしてみた時の動画。

登る階段数を事前にセットする様子や実際に階段を登る様子動画で見てみて欲しい。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。