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

Pick and Placeのプログラミング ~レゴマインドストームEV3~

レゴマインドストームEV3のPick and Place

教育用レゴマインドストームEV3のサンプルに載っていたPick and Placeを作ってみた時の備忘録。

Pick and Placeはアームで物をつかんで水平方向に回転して移動させる事ができるロボット。

車を掴む

一緒に写っている車と女の子達はレゴフレンズのサマーキャンピング(#41034)

セットを娘に借りてきてキャンプに行くオープンカーを納車(?)するという前提でPick and Placeのアームで持ち上げてみた。

ちなみに女の子たちの名前はオリビアとジョアンナとの事。

Pick and Place全体図

オープンカーをつかむ

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

アームの回転、把持(物をつかむ)機構と各種センサー類についての説明。

回転用Lモーター(ポートB) アームを水平方向に回転させる為のLモーター

ギアを使って自分自身を含めたアーム部分を時計・反時計回りに回転させることができる

アーム回転用Lモーター

回転用ギアの拡大写真

回転用ギア

把持用Lモーター(ポートC)把持用(物を掴む部分)のLモーター

回転運動を支点を使って把持部分を閉じたり開いたりする運動に変換している

把持用のLモーター

把持部が開いている状態

アームが開いてい状態

把持部が閉じている状態

アームが閉じている状態

タッチセンサーアーム底部についているタッチセンサー

タッチセンサーは押された/離れた/バンプを判定する事ができる

詳しくはこちらの記事を参照

「タッチセンサーを押すことによりアームを可動させる」等という使い方も可能だが今回は時計回りに回転した時の上限(一番右に回っている状態)を判定する為に使用した

タッチセンサー

タッチセンサーが押されている状態

タッチセンサーが押されている状態

ジャイロセンサージャイロセンサーは静止状態からの回転角度や角速度を測定する事ができるセンサー

詳しくはこちらの記事を参照

アームの回転軸の真上に取り付けて水平方向(時計回り・反時計回り)の回転角度を測定する為に使用する

ジャイロセンサー

カラーセンサーインテリジェントブロックの横に取り付けたカラーセンサー

カラーセンサーには色の判定、周囲の光の強さ、反射光の強さの3種類のモードがある

詳しくはこちらの記事を参照

今回は色を判定してプログラム動作させる為に使用する

カラーセンサー

プログラム概要

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

やっている事はオープンカーをつかんで持ち上げ、反時計回りに回転させてオリビアとジョアンナの前に持ってきたら車を離す(納車する)という単純なプログラム。

尚、記事の最後にプログラミングと実際の動きの動画を載せているので、最初に見るとイメージしやすいと思う

大きく分けて

  1. 初期処理
  2. カラーセンサーが赤色になるまで待機
  3. アームを閉じて車を持ち上げてオリビアとジョアンナの前まで持っていく

の3つの処理からできている

mainブロック

プログラムの内容

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

mainブロック

全体の制御をするメインプログラム。

Mainプログラム

プログラム開始
Initialブロック呼び出す(初期状態にする)
カラーセンサーが赤色を判定するまでループする(待機ブロックを使っても構わない)
トーン周波数を再生する(動作開始の合図)
ArmCloseAndPickを呼び出して、把持部分を閉じてオープンカーを持ち上げる

下記の6~10までの処理と同時平行で動作させる

1秒間待機する

5のオープンカーを掴むまでの間、待機して掴み終わった頃を見計らって7以降の処理を実施する

アーム上部のジャイロセンサーが-65(度)以下になるまで待機する

最初の状態から約65度反時計回りに回転させるとオリビアとジョアンナの前に位置になる

アームを反時計回りに回転させる
アームの回転を停止する
10ArmOpenを呼び出して把持部分を開いてオープンカーをおろす

Initial(マイブロック)

アームを初期状態にすると同時に把持部分を開く。

Initialマイブロック

プログラム開始
StartPositionマイブロックを呼び出してアームを最初の位置にセットする
ArmOpenマイブロックを呼び出して把持部分を開く

StartPosition(マイブロック)

アームを時計回りに回転させて一番端の初期状態にする。

StartPositionマイブロック

プログラム開始
タッチセンサーが押されるまで待機する
Lモーター(ポートB)を使ってアームを時計回りに回転させる
Lモーター(ポートB)を停止する

ArmOpen(マイブロック)

アームの把持部分を開いた状態にする。

ArmOpenマイブロック

プログラム開始
1秒間待機する
アームの把持部分をLモーター(ポートC)で開く
Lモーター(ポートC)を停止する

ArmCloseAndPick(マイブロック)

アームの把持部分を閉じて物をつかんで持ち上げる。

一つの処理だけなのでマイブロックにする必要は全く無いが、ついマイブロックにしてしまった悪い例。

プログラムの可読性(理解しやすさ)が損なわれるので本当はマイブロックにしないほうが良い。

ArmCloseAndPickマイブロック

プログラム開始
Lモーター(ポートC)で把持部分を閉じて物をつかんで持ち上げる

使用したブロック

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

ループブロック

指定した条件に一致するまでループ(同じ処理を繰り返す)する。

赤色を判定するまでループ
mainブロック

カラーセンサーが赤色を判定するまでループする

カラーセンサーに赤色のブロックを読み込ませて動作を開始させる

  • ループ:カラーセンサー、色
  • 色のセット:5(赤)のみチェック

※本来は読み込ませる色によって異なる動作をさせたい所だが今回は単純に赤色を読み込ませるだけにカラーセンサーを使用している

ジャイロセンサーが-65度以下になるまでループ
mainブロック

ジャイロセンサーが-65度以下になるまでループする

アームを反時計回りに回転させてオリビアとジョアンナの前までオープンカーを持っていく

  • ループ:ジャイロセンサー、角度
  • 比較タイプ:4(<)
  • しきい値:-65(度)
1秒間ループする
ArmOpenブロック

1秒間ループする

把持部分が開くまでの時間ループする

  • ループ:時間
  • 秒:1
タッチセンサーが押されるまでループする
StartPositionブロック

タッチセンサーが押されるまでループする

アームを時計回りに一番端まで回転させる為に使用している

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

音ブロック

音ブロックは様々な音を再生する為のブロック。

尚、音ブロックの詳細についてはこちらの記事を参照

音ブロック
mainブロック

440Hzのトーン周波数を再生する

動作開始の合図で使用している

  • 音:トーン周波数の再生
  • 周波数:440(Hz)
  • 持続時間:0.2(秒)
  • ボリューム:100
  • 再生タイプ:0(完了待ち)

待機ブロック

指定された条件に一致するまで待機するブロック。

1秒間待機する1秒間待機する

  • 待機:時間
  • 秒:1(秒)

Lモータブロック

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

アームの回転と把持に使用している。

Lモーター(ポートB)オンLモーター(ポートB)を-10のパワーで動作させてアーム反時計回りに回転させる

掴んだ車をオリビアとジョアンナの前に持っていく時に使用してる

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

 

Lモーター(ポートB)オンLモーター(ポートB)を5のパワーで動作させてアーム時計回りに回転させる

アームを初期位置にする為に使用している

  • Lモーター:オン
  • パワー:5(時計回りに回転する)
Lモーター(ポートB)オフLモーター(ポートB)を停止する

アームの水平方向の回転(時計回り/反時計回り)の停止に使用する

  • Lモーター:オフ
  • ブレーキ方法:真(惰性なしで停止)
Lモーター(ポートC)オンLモーター(ポートC)を5のパワーで動作させて把持部分を開く

  • Lモーター:オン
  • パワー:5
Lモーター(ポートC)Lモーター(ポートC)をー5のパワーで動作させて把持部分を閉じて物を持ち上げる

  • Lモーター:角度
  • パワー:-5
  • 度:100(度)
  • ブレーキ方法:真(惰性なしで停止)
Lモーター(ポートC)オフLモーター(ポートC)を停止する

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

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

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

souichirou

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

おすすめ

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

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