突然ですが、ロボットのその場せん回(超信地旋回)について考えてみました。その場せん回はロボット競技の世界では必須の技術です。できるだけ誤差のないせん回が求められています。

▲用意したロボットはこちら。モーター2個のシンプルなロボットです。

▲プログラム1。最もオーソドックスな方法がこちら。1秒おきに90度せん回します。
モーターの回転角度はトレッドとタイヤの直径から計算しています。この計算式が面白いのは、円周率を使っていないというところです。
見た目が90度になるまでパラメータを上げ下げ修正する、、、っていう方法は原始的すぎるので止めましょう。

▲トレッドっていうのは、タイヤ間の距離のことです。このように分厚いタイヤだと、正確なトレッドが求まりません。ここでは12cmとしました。
プログラム1を実行してみました。NXTソフトウェアの時代はモーターがきれいに止まれなくて、オーバランして回転が戻っていたのですが、EV3ソフトウェアはファームが優秀なので、きれいに停止します。到着前に正確に減速しています。
だいたいうまくせん回できましたが、角度のズレが気になります。ただ、一生懸命角度を調整しても、あとで実行すると、不確定な要素(バッテリ残量やタイヤの摩擦)で動きが違ってしまいます。

▲プログラム2です。プログラム1はモーターの回転の立ち上がりが急すぎるように見えたので、台形駆動にしてみました。 こうすると回転の加減速レートを自由に設定できます。急激な回転を減らして不確定要素を減らそうという発想です。
実行してみた結果ですが、今度はブレーキができなくて、オーバーランしてしまいます。しかたないので、オーバーランを見越して回転角度を減らしてみました。ここがカッコ悪いです。プログラム3では加減速レートを減らしてみましたが、効果のほどが良く分かりませんでした。

▲プログラム4.ジャイロを使って90度旋回させてみました。
実行結果ですが、うまく止まれません。ジャイロ自体は正確だと思うのですが、タイミングがシビアすぎるのと、モーターがオーバーランするので、誤差が生まれてしまいます。

▲プログラム5。最初に作ったプログラムとジャイロの合わせ技です。止まっている時にジャイロを読んで、タイミングのシビアさを回避しています。
90度せん回を8回実行してからジャイロで補正してみましたが、意外にもうまくいきました。
ただし、ジャイロは頻繁に暴走するので、扱いにはコツが必要です。コツについてはあとで紹介します。
実行した様子を動画にしてみました。
これ以外にも。床面のラインを読んで補正したり、別の方法があると思います。研究してみましょう。
プログラム1~5はこちら。
Turn90degreeをダウンロード
◆(以下おまけ)ジャイロセンサーの暴走について

ジャイロセンサーを使っていると暴走することがあります。ジャイロが暴走しているかどうかは、PortViewで確認します。ジャイロセンサーが静止した状態で、値が勝手に増えたり減ったりする。これが暴走です。
暴走の原因はジャイロセンサーの原点がズレてしまうからです。この現象をドリフトといいます。温度変化や振動によってドリフトは発生します。経験的に、一晩置いたジャイロセンサーを初めて使ったりするとドリフトは起きます。ジャイロセンサーは慣らし運転しないとうまく測定できません。
暴走を止めるには、ジャイロセンサーのキャリブレーションをやり直します。キャリブレーションをやり直す方法は2つあります。
- インテリジェントブロックを再起動する
- ジャイロセンサーをポートに接続し直す
ちなみに、ジャイロセンサーのブロックにある「リセット」という項目は角度をリセットするだけなので暴走は止まりません。ソフト的にキャリリブレーションをやり直せると良かったのですが、、、。
インテリジェントブロックの再起動は時間がかかりすぎるので、オススメしません。
残る方法はジャイロセンサーの接続し直しです。ようするにケーブルを一度抜いて、差し込むだけです。接続するさいには、ジャイロ自体が完全に静止した状態で行います。少しでも揺れがあると、原点がズレますので、暴走してしまいます。
あと、ジャイロセンサーは回転軸の中心に取り付けましょう。回転軸から位置がずれていると誤差になってしまいます。
ちなみにジャイロセンサーにはInvenSenseという会社の「ISZ-655」というセンサーが搭載されています。圧電ジャイロよりも高級なMEMSを使ったジャイロです。