大会参加者へ配布されるサンプルプログラム “sample_c/sample.c” で安定して倒立させるために、個々に変更が必要なジャイロセンサーのオフセット値の取得方法を載せます。
まず最初にロボット(NXTway-ET)が倒立する簡単な仕組みですが、ロボットが静止した状態に対して、「前後どちらの方向」に「どのくらいの速さ(角速度)」で、転倒(回転)しつつあるかを検出することで制御を行っています。その転倒検出の原点となるのがロボットが静止した状態でのジャイロセンサーの出力電圧(=オフセット値)となります。したがって、このオフセット値が不正確であると、ロボットが安定して静止(倒立)しているにもかかわらず、無用な車体の引き起こし動作が生じて結果として転んでしまいます。
ところがこの肝心のジャイロセンサーのオフセット値が製品一つ一つで個体差を持っています。ジャイロセンサーの中には精密な振動子が封入されているのですが、その振動子の製作精度のばらつきがオフセット値のばらつきの一因となっています。また、同一のジャイロセンサーであっても温度変化や単なる時間経過でオフセット値が変化(ドリフト)します。
(振動型)ジャイロセンサーはなんとも悩ましい特性(欠点)をもっているのですが、それをなんとかするのが、組込みソフトウェアの腕の見せ所です。
ちなみに “sample_cpp/sample.cpp” では、「プログラム開始直後はロボット(ジャイロセンサー)が静止しているだろう」という前提で、このときの値をプログラムで取得して、オフセット値として使っています。こういう処理を自動キャリブレーション(自動校正)と呼びます。
電子式台ハカリでスイッチを入れた直後、もしくは精肉コーナーの店員さんが経木(包み紙)をはかり台に載せた直後 😉 に0グラムにリセットするのと同じ効用です。
そこで本題の手動によるオフセット値の取得(確認)方法ですが、 “nxtOSEK_v213.zip” の中に含まれるサンプルプログラム “nxtOSEK/sample_c/helloworld/helloworld.c” を動作させれば、ジャイロセンサーを含む各センサーのリアルタイムの測定値をLCDモニタで確認することができます。
静止状態でジャイロセンサーの値を読み取り、これをプログラムのオフセット値にセットすれば、ひとまず安定した倒立動作を実現できるはずです。
ジャイロセンサーを接続するポート(コネクタ)の位置によってLCDの表示位置は変わりますが、適宜読み替えて下さい。また、ロボットを振り回せば、リアルタイムでジャイロセンサーの値は変化しますので、「これだ!」とおおよそ推測が付くと思います。