3
1

More than 1 year has passed since last update.

SPIKEプライムの軌跡をPythonで描画する

Last updated at Posted at 2022-05-12

目次

1.SPIKEプライムとは?
2.プログラミング
3.ロボットを動かす
  ジャイロセンサーから情報取得
4.Pythonで描画
5.最後に

SPIKEプライムとは?

LEGO公式ページより

レゴ®エデュケーション SPIKE™ プライムは、小学校高学年から中高生向けのSTEAM学習セットです。カラフルなブロックパーツや、使いやすいハードウェアとScratchベースの直感的なプログラミングを融合し、問題解決型のプロジェクトを通して楽しみながら実社会で役立つスキルを育くむことを可能にします。また、SPIKEプライムは、人気の高いプログラミング言語Pythonを使ったテキストコーディングにも対応し、学習ニーズに応じてアプリ上で、ワードブロック(Scratch ベース)または、Python(テキストベース)を選択することが可能です。SPIKEプライムは、児童・生徒が、AI、IoT社会で輝くために必要なSTEAM科目への自信と21世紀型スキルの習得をサポートします。遊び心も大切にしながら!

簡単に言うと、中高生向けの、"プログラミング教育を目的としたロボット"です。前代のEV3よりカラフルで、ポートがわかりやすい場所にあるなど、初心者にとって取り組みやすくなっている印象です。

プログラミング

SPIKEプライムの動かし方は、ICONブロック、WORDブロックそしてPythonの3種類があります。
スクリーンショット 2022-05-08 12.48.17.png

今回は細かい情報を取得したいため、Pythonで動かしました。

ロボットを動かす

今回はSPIKEロボットをあらかじめ作っておいたコースの上を辿らせました。ライントレースと呼ばれるものです。どうやら競技もあるみたいですね。
673670119.396973 (1).gif
ロボット制御の細かい話は今回の目的とずれているのでおいておきます。
簡単に説明すると、
1.カラーセンサーで下の地面の色を取得
2.特定の条件を満たしたとき線の上に戻るように回転
3.それ以外の場合1cm進む
この3つの処理を繰り返してます。

ジャイロセンサーから情報取得

SPIKEプライムのPythonライブラリはとても充実しています。色々な機能があるので是非触ってみてください。
今回はSPIKE本体に当たるハブに内蔵されているジャイロセンサーからの情報を取得します。

hub.motion_sensor.get_yaw_angle()

この関数を使うとyaw angle(垂直方向の軸を中心とした回転角度)を取得することができます。
これをwhile文で取得していく感じです。

Pythonで描画

センサーで取得したyaw angleたちを使って描画してみます! 描画するにはx,y座標が必要なのでこの角度たちから座標を出しました。
毎度1cm動いているので単位円を描き続けている感じをイメージすればこの角度だけで座標が取得できると考えました。
16075434001697.jpg
(日本語が難しかったので作図しました。)
最後にそれぞれのsinθ、cosθをx、yとおけば座標が取得できるはず!
早速試してみました。今回matplotlibで描画してます。
結果:
左:SPIKEの通ったコース 右:Pythonでの出力結果
16075459072506.jpg

正直なところ想像以上の精度でした! まだまだ改善の余地はあると思うのですが、思いつきの簡単なアイデアでここまでの精度を出せたのはびっくりしました。
もう1コースあったので試してみました:
16075459072506.jpg

こちらもしっかりトレースできてますね!

最後に

Qiitaに何かしら投稿したいなと思って、今回書いてみました。以上、ひいらぎでした。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1