2025年7月31日
026-1.SPIKEプライム Python入門(SPIKE App3)-第2回「モーターを動かす」
この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」と専用アプリ(SPIKEアプリ)を使った、Pythonのプログラミング方法について紹介します。原稿執筆時点のSPIKEアプリの最新バージョンは3.5.1です。(文/松原拓也)
◆ モーターの動きを見える化する
モーターを回すプログラムです(motor1.llsp3)。「ナレッジベース(ヘルプ)」の内容をコピペしてから手直しただけです。 「motor.run_for_degree」がモーターを回す関数です。 この関数にはモーターの角速度(回転速度)を調整する機能があります。
プログラムを実行すると、モーターの軸が360度回転します。角速度は360度/秒に設定しています。
「main」がメインの関数です。それを「runloop.run」という関数から呼び出しています。これは非同期処理として命令を実行させているためです。「await」は処理が終わるまで待つ関数です。 プログラムの構造が複雑に感じるかもしれませんが、ここは頑張って慣れるしかありません。
出力結果をコピペして、 表計算ソフト(OpenOffice Calc)でグラフを描いてみました。
グラフの横軸が時間(単位は秒)。縦軸が角速度です。ヘルプによると、角速度の単位は「度/秒」だと書かれていますが、なぜか実際の値よりも少ないです。本当だとピーク時に値が360度/秒となるべきですが、1ケタくらい少なく感じます。原因がわからないのですが、このまま進めます。
加速度&減速度が500の場合、回転が停止するまでの時間は1.8秒です。一方、加速度&減速度が1000の場合、回転が停止するまでの時間は1.5秒です。回転時間が0.3秒も違います。モーターの角速度を360度/秒と設定しているので、1秒で360度回転が終わるのかと思ったら、そうではありません。実際には加速と減速に時間がかかるので、1秒よりも確実に遅くなります。
◆ 平坦と坂道の実験
プログラムは先ほどのmotor3.llsp3をそのまま使います。加速度&減速度は1000に設定しました。 プログラムを実行して、測定結果を表計算ソフトに入力して、作成したグラフがこちらです。
グラフの青色が「平坦な道」での角速度です。赤色が「坂道」での角速度です。どちらも1.4秒でモーターの回転を終えています。 坂道の場合は回転に負荷がかかっていますので、平坦な道の場合に比べて、速度の立ち上がりが遅れています。ロボット側は「回転が遅れている」ということを回転センサーで入力していますので、その遅れているぶんだけモーターのパワーを増やしています。結果として、「平坦な道」でも「坂道」でも同じ速度でロボットが進むことができます。
加速度と減速度は大きければ良いというわけではありません。たとえば地面が滑りやすい場合には、加速度と減速度を少なめに設定するとスリップを防ぐことができるかもしれません。ロボット作りに活用してみましょう。
非同期処理のプログラムを実行中の様子
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。