2025年8月29日

026-1.SPIKEプライム Python入門(SPIKE App3)-第3回「モーターをペアで動かす」

この記事では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」と専用アプリ(SPIKEアプリ)を使った、Pythonのプログラミング方法について紹介します。原稿執筆時点のSPIKEアプリの最新バージョンは3.5.1です。(文/松原拓也)

◆ ロボットを前進させる

前回はモーターを1個だけ動かしましたが、今回はモーターを2個同時に動かします。
まずはモーター2個とラージハブを組み合わせてロボットを作ります。モーターはポートEとポートFに接続することにします。

SPIKEアプリには2個のモーターをまとめて制御できる機能があります。この機能を「モーターペア」と呼びます。
たとえば、ポートEとポートFをモータペアに登録した場合、前進時にはポートFは正方向に回転するのに対して、ポートEは逆方向に回転します。タイヤを取り付けた時の都合を考えて、あえてモーターが逆に回ります。

モーターペアを実験するプログラムです(motorpair1.llsp3)。
モーターペアを制御するには「motor_pair」というライブラリを使います。 「move_for_degree」は指定した角度を回転させる関数です。ロボットに付いているタイヤは直径約5.6cmです。そのため、タイヤの円周は5.6×3.1415=約17.59cmとなります。ロボットを15cm移動させたい場合は、360×15÷17.59=約306.95度モーターを回します。 move_for_degree関数の引数はペアスロット、角度、ステアリング、角速度です。角速度は省略可能です。ペアスロットはモーターペアの登録先のことです。ペアスロットは全部で3つあります。ここでは1番を使います。

プログラムを実行すると、ロボットが15cm前進して止まります。モーターの角速度を180度/秒と設定したので、1秒あたりの移動速度は約8.8cmとなる計算です。
当たり前のように動いていますが、ここでロボットがまっすぐ走るのはモーターペアのおかげです。モーターを単体で制御する関数だけだと、同期が取れないのでロボットはまっすぐ走りません。


◆ その場旋回

続いて、その場旋回(超信地旋回)をするためのプログラムです(motorpair2.llsp3)。
ロボットの「トレッド幅」とタイヤの直径がわかれば、モーターに必要な回転角度を計算することができます。90度その場旋回をさせたい場合、トレッド幅を7.9cm、タイヤの直径を5.6cmとすると、モーターの回転角度は90×7.9÷5.6=約126.96度となります。

プログラムを実行すると、90度その場旋回します。 4回繰り返すので、最終的には360度旋回します。


◆ ロボットの向きを見える化

今回もロボットの動きを「見える化」してみましょう。 ここではラージハブに搭載されているジャイロセンサーを使って、ロボットの向きを検出して、ライトマトリクスに表示したいと思います。SPIKEアプリではジャイロセンサーと加速度センサーをまとめて「モーションセンサー」と呼んでいます。
先ほどのプログラムに向きを改造してみました(motorpair3.llsp3)。 「gyro」が新しく追加した関数です。gyro関数はmain関数と並行して非同期処理で動きます。 ラージハブの向きを検出するには「motion_sensor.tilt_angles」関数を呼び出すだけです。関数の戻り値はヨー、ロール、ピッチの3軸がありますが、ここではヨー軸だけを使います。ヨー軸は0.1度を1として扱いますので、10で割って1度単位に変換します。 ライトマトリクスに描く際に、三角関数を使って座標を計算します。三角関数で計算するには「math」ライブラリを使います。「math.cos」がコサイン関数、「math.sin」がサイン関数です。

プログラムを実行すると、先ほどと同じく、90度その場旋回します。ライトマトリクスに点が描かれます。 この点は方位磁石のように働いて、同じ方向に追従し続けます。ロボットを手で動かしても、点の向きが追従します
これで、ロボットの動きを見える化することができました。ライトマトリクスは5×5ピクセルしかないので、。 複雑な情報を表示できないのが難点です。

プログラムを実行中の様子

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。