Pick and Placeのプログラミング ~レゴマインドストームEV3~
Contents
レゴマインドストームEV3のPick and Place
教育用レゴマインドストームEV3のサンプルに載っていたPick and Placeを作ってみた時の備忘録。
Pick and Placeはアームで物をつかんで水平方向に回転して移動させる事ができるロボット。
一緒に写っている車と女の子達はレゴフレンズのサマーキャンピング(#41034)。
セットを娘に借りてきてキャンプに行くオープンカーを納車(?)するという前提でPick and Placeのアームで持ち上げてみた。
ちなみに女の子たちの名前はオリビアとジョアンナとの事。
駆動部・センサー類の説明
アームの回転、把持(物をつかむ)機構と各種センサー類についての説明。
回転用Lモーター(ポートB) | アームを水平方向に回転させる為のLモーター ギアを使って自分自身を含めたアーム部分を時計・反時計回りに回転させることができる 回転用ギアの拡大写真 |
把持用Lモーター(ポートC) | 把持用(物を掴む部分)のLモーター 回転運動を支点を使って把持部分を閉じたり開いたりする運動に変換している 把持部が開いている状態 把持部が閉じている状態 |
タッチセンサー | アーム底部についているタッチセンサー タッチセンサーは押された/離れた/バンプを判定する事ができる 「タッチセンサーを押すことによりアームを可動させる」等という使い方も可能だが今回は時計回りに回転した時の上限(一番右に回っている状態)を判定する為に使用した タッチセンサーが押されている状態 |
ジャイロセンサー | ジャイロセンサーは静止状態からの回転角度や角速度を測定する事ができるセンサー 詳しくはこちらの記事を参照 アームの回転軸の真上に取り付けて水平方向(時計回り・反時計回り)の回転角度を測定する為に使用する |
カラーセンサー | インテリジェントブロックの横に取り付けたカラーセンサー カラーセンサーには色の判定、周囲の光の強さ、反射光の強さの3種類のモードがある 詳しくはこちらの記事を参照 今回は色を判定してプログラム動作させる為に使用する |
プログラム概要
まずはプログラムの全体構造、細かいブロック毎の機能やロジックは後述する。
やっている事はオープンカーをつかんで持ち上げ、反時計回りに回転させてオリビアとジョアンナの前に持ってきたら車を離す(納車する)という単純なプログラム。
尚、記事の最後にプログラミングと実際の動きの動画を載せているので、最初に見るとイメージしやすいと思う。
大きく分けて
- 初期処理
- カラーセンサーが赤色になるまで待機
- アームを閉じて車を持ち上げてオリビアとジョアンナの前まで持っていく
の3つの処理からできている
プログラムの内容
次に個々のブロックの処理の流れについてみてみる。
mainブロック
全体の制御をするメインプログラム。
1 | プログラム開始 |
2 | Initialブロック呼び出す(初期状態にする) |
3 | カラーセンサーが赤色を判定するまでループする(待機ブロックを使っても構わない) |
4 | トーン周波数を再生する(動作開始の合図) |
5 | ArmCloseAndPickを呼び出して、把持部分を閉じてオープンカーを持ち上げる 下記の6~10までの処理と同時平行で動作させる |
6 | 1秒間待機する 5のオープンカーを掴むまでの間、待機して掴み終わった頃を見計らって7以降の処理を実施する |
7 | アーム上部のジャイロセンサーが-65(度)以下になるまで待機する 最初の状態から約65度反時計回りに回転させるとオリビアとジョアンナの前に位置になる |
8 | アームを反時計回りに回転させる |
9 | アームの回転を停止する |
10 | ArmOpenを呼び出して把持部分を開いてオープンカーをおろす |
Initial(マイブロック)
アームを初期状態にすると同時に把持部分を開く。
1 | プログラム開始 |
2 | StartPositionマイブロックを呼び出してアームを最初の位置にセットする |
3 | ArmOpenマイブロックを呼び出して把持部分を開く |
StartPosition(マイブロック)
アームを時計回りに回転させて一番端の初期状態にする。
1 | プログラム開始 |
2 | タッチセンサーが押されるまで待機する |
3 | Lモーター(ポートB)を使ってアームを時計回りに回転させる |
4 | Lモーター(ポートB)を停止する |
ArmOpen(マイブロック)
アームの把持部分を開いた状態にする。
1 | プログラム開始 |
2 | 1秒間待機する |
3 | アームの把持部分をLモーター(ポートC)で開く |
4 | Lモーター(ポートC)を停止する |
ArmCloseAndPick(マイブロック)
アームの把持部分を閉じて物をつかんで持ち上げる。
一つの処理だけなのでマイブロックにする必要は全く無いが、ついマイブロックにしてしまった悪い例。
プログラムの可読性(理解しやすさ)が損なわれるので本当はマイブロックにしないほうが良い。
1 | プログラム開始 |
2 | Lモーター(ポートC)で把持部分を閉じて物をつかんで持ち上げる |
使用したブロック
今回使用したブロックは以下の4種類。
ループブロック
指定した条件に一致するまでループ(同じ処理を繰り返す)する。
音ブロック
音ブロックは様々な音を再生する為のブロック。
mainブロック 440Hzのトーン周波数を再生する 動作開始の合図で使用している
|
待機ブロック
指定された条件に一致するまで待機するブロック。
1秒間待機する
|
Lモータブロック
重いものをゆっくり動かすのが得意なLモータ。
アームの回転と把持に使用している。
プログラミングと実際に動かしてみた時の動画
プログラミングと実際に動かしてみた時の動画。
最近のコメント