2024年11月21日
008-1.EV3ソフトウェア入門-第8回「三角関数の使い方3」
新シリーズのレゴマインドストームである「教育用レゴマインドストームEV3」を使ったプログラミング環境「EV3ソフトウェア」について紹介していきたいと思います。(文/松原拓也)
◆ オムニホイール・モーター3個で移動する
オムニホイールを使って全方向に動けるというロボットを作ります。
前回、製作したロボットはオムニホイール3個+モーター2個を使って、X方向・Y方向に移動していました。オムニホイールが90度に向き合う構造です。
この方法だと、プログラムは作りやすいのですが、どうにも移動時に向きが傾きやすいです。その原因は重心がしっかり中心にないことと、タイヤの空すべりの量が多いからだと思います。

対策として、今度はオムニホイール3個+モーター3個を使って、120度ずつに向きを変えて設置してみました。これだと、重心が中心にありますし、空すべりの量も減らせると思います。骨組みが正三角形になりました。内角の一つが60度ですね。

裏側です。ちょっと強度が足りないのですが、、、丈夫に作るのは、経験がいりますね。

オムニホイールも見直しました。前回はNexus Robot製の「14113(14108)」を使ってましたが、今回はHiTechnic製の「HRC2148」を使っています。直径は両方とも48mmです。
HiTechnic製はNexus Robot製よりも二倍以上の値段がしますが、ローラー部分がまったく別物というくらい、軽快にすべります。さすが高級品という感じです。

インテリジェントブロックEV3をのせてみました。インテリジェントブロックは重たいのでオムニホイールに結構な負担がかかります。
出力ポートは写真のように接続しました。

3つのモータはそれぞれ取り付け向きが違います。
では、このロボットが0度方向(紫の矢印の方向)に1回転ぶんだけ進みたい場合、A、B、Cのモータをどうやって回したらいいのでしょうか?

そこで、三角関数を使います。モータの向きのズレを関数に当てはめて、ズレたぶんを補正して回転量を求めます。BはAに対して-120度向きがズレていまので、+120度の向きで補正します。CはAに対して-240度向きがズレていますので、+240度の向きで補正します。
次のような式になります
Aモータの回転量:COS( 0) = +1回転
Bモータの回転量:COS(120) = -0.5回転
Cモータの回転量:COS(240) = -0.5回転
これで0度方向に進むはずです。0度方向だと、Aモータにとってはプラス方向ですが、BとCモータにとってはマイナス方向です。ここでは、COS関数を使いましたが、SIN関数も使えます(そのかわり進行方向が90度ズレます)。

計算結果をモータブロックの「回転数」に接続してみました。
一見、うまくできたようですが、これには問題があります。モータの回転速度が3つともほぼ同じだからです。3つのモータが同時に回転が終わってくれないので、まっすぐ進んでくれません。
解決策として、モータの速度をそれぞれ変更することですが、速度が0に近づいてしまうと、回転が終わってくれないかもしれませんので、プログラムが少し長くなりそうです。

別の解決策として、回転数ではなくて、「パワー」に変えてみました。数式も変更しています。

実行すると、うまく0度方向に進みました。

前回、あまりうまくいかなった「8角形の移動」をリベンジしてみましょう。
図のように45度ずつ進行方向を変えながら、あたりを一周します。

プログラムがこちらです。 分散しないで、一本のプログラムにしてみました。横に長くなってしまいましたので、加工しています。変数kakudoが進む方向の値です(0~360度)。
プログラムは問題なく動きました。傾きも前回よりは抑えられました。ただし、パワーで制御していますので、進んだ距離がよく分かりません。ここだけちょっと今後の課題です。
[DOWNLOAD]今回作成したプログラム(教育用EV3ソフトウェア用)
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。