タイヤの回転角度をグラフ表示する ~レゴマインドストームEV3~ | そう備忘録

タイヤの回転角度をグラフ表示する ~レゴマインドストームEV3~

タイヤの回転角度のグラフ化

教育用レゴマインドストームのトレーニングロボットで以前に指定した距離だけ移動するプログラムを作った。

タイヤの直径を測ってタイヤの円周を計算した後、移動したい距離をタイヤの円周で除算すると必要な回転数が得られる。それに360(度)をかければ必要な回転角度が算出される。

移動に必要な回転角度=移動したい距離÷(タイヤの直径✕3.14)✕360

詳細はこちらの記事を参照

今回は移動と同時に回転角度をインテリジェントブロックのディスプレイに棒グラフで表示するプログラムを作ってみる。

インテリジェントブロックの座標は左上を(0,0)としてX軸は0~177(右端)まで、Y軸は0~127(下端)となっている。

Y軸の座標の考え方が数学で習ったものとちょっと違うので注意が必要。

詳細はこちらの記事を参照

X軸は時間軸とする。

左から順番に表示ブロックの直線を描画する機能を使って棒グラフを描いてゆく。

この時のY座標の始点(下記図の3)を計算で求めて終点のY座標(127)まで直線を引く。

グラフの表示の仕方について

プログラム概要

まず最初にプログラムの全体図。

上のブロック群と下のブロック群では同時並列で実行される。

それぞれの大まかな処理は赤字のコメントを参照。

尚、記事の最後にプログラミングと実際に動かした時の動画を載せているので確認してみて欲しい

300mm直進とモーターの回転角度をグラフ化

ディスプレイに表示されるグラフは以下の様になる。

モーター回転角度をグラフ表示

プログラム全体

プログラム全体とそれぞれの処理内容は以下の通り。

プログラム全体

プログラム開始
300mm進むのに必要なタイヤ(モーター)の回転角度を計算する

結果を3、4に出力する

2の結果を変数angleに保存する
300mm直進する
ディスプレイを初期化してgraphと表示する
7~12をロジックが”真”になるまで繰り返す
モーター回転角度を9、12に出力する
変数angleを9、12に出力する
Y座標の始点を計算する
10棒グラフでモーター回転角度を描画する
110.1秒待機する
12ループの終了(到達点かどうか)を判定する

結果を6のロジックに出力する

13グラフの描画を残すため5秒間待機する

使用したブロック

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

数学ブロック

計算式に基づいた演算を行うブロック。

数学ブロックの詳細な機能についてはこちらの記事を参照

回転角度を算出(1)進みたい距離(300mm)に対して必要なタイヤの回転角度を算出する

  • 数学:拡張機能
  • a:300(進みたい距離)
  • b:56(タイヤの直径)
  • c:3.14(円周率)
  • d:360(度)
  • 計算式:a÷(b✕c)✕d
Y座標の算出(2)Y座標の始点を求めるための計算式

図1の3.の計算を行っている

  • 数学:拡張機能
  • a:モーターの回転角度をデータワイヤーで受け取る
  • b:変数angleからデータワイヤーで数学ブロック(1)の計算結果を受け取る
  • c:127
  • d:未使用
  • 計算式:(bーa)÷b✕c

変数ブロック

変数の書き込み、読み込みを行うためのブロック。

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

変数 書き込み 数値変数angleに数学ブロック(1)の計算結果を書き込む

  • 変数:書き込み、数値
  • 値:データワイヤーで数学ブロック(1)の結果を受け取る
  • 変数名:angle
変数 読み込み 数値書き込んだ変数angleをY座標の始点の計算の為に読み込む

  • 変数:読み込み、数値
  • 値:データワイヤーで出力する
  • 変数名:angle

タンクブロック

トレーニングロボットのLモーターを制御して移動させるためのブロック

タンクブロック 直進パワー10で300mm直進する為に必要な回転角度だけ車輪を回転させる

  • タンク:角度
  • 左側パワー:10
  • 右側パワー:10
  • 度:データワイヤーで数学ブロック(1)の計算結果を受け取る
  • ブレーキ方法:真

表示ブロック

インテリジェントブロックのディスプレイにテキスト、イメージ、図形を描画する。

表示ブロックの詳細な機能についてはこちらの記事を参照

表示ブロック画面をクリアして画面上部に”Graph”の文字を表示する

  • 表示:テキスト、グリッド
  • 画面消去:真※
  • 列:0(列目)
  • 行:0(行目)
  • 色:偽(黒)
  • フォント:0(通常)
  • テキスト:Graph

※このブロックは初めにディスプレイを消去する為に配置している

まず画面をクリアしてから棒グラフを描画する

表示ブロック 棒グラフの描画棒グラフ(モーターの回転角度)を描画する

  • 表示:図形、線
  • 画面消去:偽※
  • X1:ループインデックスをデータワイヤーで受け取る
  • Y1:数学ブロック(2)の計算結果をデータワイヤーで受け取る
  • X2:X1と同値
  • Y2:127(ディスプレイの下端)
  • 色:偽(黒)

※画面消去を行ってしまうと前回描いた線がきえてしまうので、ここは”偽”にする

ループブロック

ループ内に配置されたブロックを右側の条件に一致するまで繰り返す。

ループブロックロジックが”真”※になるまで繰り返す

  • 番号:01
  • ループ:ロジック

※モーターの回転角度 >=数学ブロック(1)の計算結果の時に”真”になる

モーター回転ブロック

L、Mモーターの回転センサーから回転角度、パワーなどを取り出すためのブロック。

尚、モーター回転ブロックの機能詳細についてはこちらの記事を参照

モーター回転ブロック車輪のLモーターのリアルタイムな回転角度を取り出す

  • モーター回転:測定、度
  • 度:データワイヤーで数学ブロック(2)に引き渡す

待機ブロック

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

0.1秒待機する0.1秒待機する

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

0.1秒毎にループを回して棒グラフを描画する

5秒間待機する5秒待機する

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

描画したグラフを5秒間表示する為のブロック

比較ブロック

2つの数値を比較して結果をロジック(”真” or ”偽”)で出力する。

尚、比較ブロックの詳細な機能についてはこちらの記事を参照

比較ブロックループの終了条件※を判定する為のブロック

※モーター回転角度>数学ブロック(1)の結果

  • 比較:≧ ~以上
  • a:モーター回転角度をデータワイヤーで受け取る
  • b:変数ブロックより数学ブロック(1)の計算結果をデータワイヤーで受け取る
  • 結果:ループの終了条件に引き渡す

実際に動かしてみた動画

プログラミングと実際にインテリジェントブロックのディスプレイにグラフを描画する様子を動画にしている。

souichirou

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

おすすめ

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

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