/*!
  \mainpage 「走行制御ライブラリ (RunCtrl C++) について」

  RunCtrl C++ は、走行制御モジュールの制御ライブラリである。\n

  このライブラリの配布ライセンスは
  <a href="http://www.gnu.org/copyleft/lesser.html">
  GNU Lesser General Public License</a>
  に準拠する。\n
  また、このライブラリの開発者達は、このライブラリの使用に伴う一切の損害責任を負わない。

  <hr>

  \b 目次
  - \subpage runCtrl_what_page
  - \b コマンド \b API
    - \ref system_grp
    - \ref position_grp
    - \ref move_grp
    - \ref judge_grp
    - \ref parameter_grp
    - \ref direct_grp
  - \subpage runCtrl_follow_page
  - \subpage spur_convert_page
  - バグ報告先
    - バグ報告・要望等は vxv_tools の連絡先まで
*/


/*!
  \page runCtrl_what_page 何ができるのか

  教育、研究用の小型移動ロボット「ビーゴ」用の走行制御ライブラリとして利用されています。

  \image html beego_body.jpg 小型移動ロボット「ビーゴ」

  このライブラリでは、走るべき経路を仮想的に定義した座標系に対して発行します。また、駆動系であるモータを直接制御するためのコマンドも用意されています。
*/


/*!
  \page runCtrl_follow_page 走行制御プログラムについての考え方

  \section runCtrl_abst_section 移動ロボットと座標系

  この走行制御モジュールは、座標系を用いて走行経路を指示することで、ロボットの走行経路を制御します。\n
  つまり、電源投入時にロボットは以下のような座標系の上に存在していると言えます。

  \image html abst_crd.png 電源投入後のロボット位置と座標系

  座標系の再設定コマンドを発行しなければ、ロボットが移動してもこの座標系の原点は移動しません。従って、ロボットの移動経路を１枚の方眼紙に定義し、それをプログラムに変換する、といったイメージでプログラムをすることになります。

  例えば、1[m]直進して停止し、Y軸の方を向いてからさらに 1[m]進む、といったタスクは次のプログラムで実現できます。

  \dontinclude turnLeft.cpp
  \skip //
  \until VXV::Delay(1000);

  もちろん、転回後の処理は target の値が異なる以外は最初の直線追従と同じなので、関数化することができます。

  \n
  \subsection runCtrl_abst_FS 移動ロボットを中心とする座標系

  ただし、ロボットに対して「現在の位置から、90度の直線に追従しろ」という命令は、原点が固定化された座標系でコマンドを与える方法では、記述が面倒になります。

  従って、このような現在のロボット位置相対のコマンドを発行するために、FS(Front Size)座標系が用意されています。この座標系を用いることで、先の要求は

  \code
  run.followLine(VXV::Position(0, 0, deg(-90)));
  \endcode

  と記述することができます。
*/

