ETロボコンで使われている倒立振子APIについて

  • 3
    Like
  • 0
    Comment

本記事はETロボコンAdvent Calendar 2016のエントリです。
自分は2008年からETロボコンに関わっています。初年度は業務多忙でメンバーリストに名前が載っていただけでしたが、2009年から本格参戦をしました。
2009年はETロボコンに2輪倒立走行体NXTwayがデビューした年になります。
以来、結果的に2輪倒立走行体一筋で毎年開発を行っています。(2012年以降はダミーカー)
131120_0920_IMAG1451.jpg

ETロボコンで使われている倒立振子APIの歴史

古くはMindstorms RCXの光センサーを用いて地面との距離を測ることで2輪倒立を実現させるなどさまざまな試みがなされてきましたが、ETロボコンではNXTway-GS 2輪型倒立振子ロボット C APIを使用しています。

  • 2009年 NXTwayデビュー ナロウトレッド
  • 2010年 ワイドトレッド化 木板を使用した難所登場 板厚14mm
    この年からワイドトレッド化に合わせて旋回角度係数が変更されています。
    float K_PHIDOT = 25.0F*2.5F;

  • 2011年 尻尾追加 2016年も使用されている倒立走行体の形が完成
    倒立APIを使用しない尻尾走行が誕生 競技上位チームは倒立走行を行わなくなりました。

  • 2012年 尻尾走行全盛

  • 2013年 倒立義務化 タイム計測区間の尻尾走行が禁止されました。

  • 2014年 アドバンストクラスがスタートし、NXTwayはプライマリークラス用走行体となりました。

  • 2015年 EV3wayデビュー
    EV3wayに合わせて車輪平均回転角速度係数が変更されています。
    float K_F[4] = {-0.870303F, -31.9978F, -1.1566F*0.6, -2.78873F};

  • 2016年 木板難所の板厚が9mmに変更されました。

ここまで走行体の形状変更、NXTからEV3への変更などハードの大きな変更を経ていますが、パラメーターに係数を掛けるだけで済ませています。

倒立が不安定になったら

開発を進めていくと倒立が安定しなくなったりすることがありますが、電池の出力低下や処理の増加により倒立振子APIを実行する間隔4[msec]を維持できなくなることが原因であることが多いです。まずはサンプルプログラムに戻して挙動を確認してください。処理時間の問題はリアルタイムOSの機能を活用することによりある程度改善する手段があります。そもそもの設計に問題がある場合はモデルの再検討を行ってください。

バランス制御実行周期が5[msec]になっている!?

サンプルプログラムbalancer.hで実行周期が5[msec]に設定されてしまっています。
#define EXEC_PERIOD 0.00500000000F /* バランス制御実行周期(秒) *//* forEV3 20141102koji */
これはEV3wayで倒立が実現できるのか?とあれもこれもいじりながら試行錯誤していた頃の痕跡が残ってしまっています。戻すのを忘れてファイルを展開してしまいました。
よく質問に出てくる内容で大変申し訳ないのですが、上で紹介した車輪平均回転角速度係数の調整がこの状態で行われおりサンプルプログラムの多言語展開までされていますので、このままでご利用いただければ幸いです。