2025年1月14日

018-1.SPIKEプライムPython入門-第11回「三角関数の使い方(その3)」

この連載では「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」を使ったPython(SPIKEアプリ)によるプログラミングの方法を紹介します。 Python(パイソン)はプログラミング言語の一つです。Pythonは教育や人工知能の研究など様々な分野で使われていて、人気があります。 Pythonの主な特徴はオブジェクト指向を採用していることです。オブジェクト指向というのはプログラムの機能をオブジェクトという単位で切り分けて扱う手法のことです。オブジェクト指向は複雑なプログラムを作る場合に効果を発揮します。(文/松原拓也)

◆ ロボットアームを動かす

前回は三角関数の1つ、asin(アークサイン)関数を使って、狙いどおりの高さにアームの先端を動かすことに成功しました。

今回はモータの数を1個→2個に増やして、より複雑な動きを行います。 関節が2つに増えたので、腕のような見た目になりました。名付けて「ロボットアーム」です。
ポートAに接続するモータを「モータA」、ポートBに接続するモータを「モータB」と呼ぶことにします。

横から見ると、こうなります。

ロボットアームの構造を図にしてみました。
モータは角度が「0度」の時でまっすぐになるように作ります。そして、「モータAの関節からモータBの関節まで」と「モータBの関節から先端まで」を同じ長さ(9ポッチ=72mm)にします。これは角度の計算をしやすくするためです。

アームの先端を目的に動かしたい場合、2つのモータをどう動かしたらいいでしょうか。
これは非常に手間のかかる計算をしないといけないのですが、図のような動きならば、シンプルな処理で済ませることができます。
これはモータAの関節とアームの先端が同じX軸に位置する場合です。モータAから見て、アームの先端がぴったり90度の向きに位置しています。モータAの角度aは「degrees(asin(height/arm))」という計算で求めることができます。これは前回のモータ制御のしくみと全く同じです。変数heightにはyの半分の値を格納します。変数armにはアームの長さ「72」を格納します。
角度bの値は「180-(角度a×2)」を計算すると求めることができます。

出来上がったプログラムがこちらです。

プログラムを実行した様子です。
実行すると、アームがまっすぐになり、それから二つ折りの状態になります。
それからアームが「くの字」の形になり、先端が3cmずつ遠ざかっていきます。 0cmのきょりからスタートして、最終的に12cmのきょりを保って停止します。 狙いどおりに動かすことができました。

いかがでしょうか? 思ったよりもシンプルなプログラムにおさめることができました。
しかし、アームの先端を横方向に動かしたいという場合、プログラムは難しくなります。おそらく、atan(アークタンジェント)関数を使う必要が出てくると思います。腕に自信のある人は挑戦してみましょう。

今回作成したプログラム(SPIKEアプリ用)

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