/*!
  \mainpage 「座標系制御ライブラリ (CoordinateCtrl C++) について」

  CoordinateCtrl とは、ロボットシステムにおける座標系の制御ライブラリである。\n
  
  このライブラリの配布ライセンスは
  <a href="http://www.gnu.org/copyleft/lesser.html">
  Lesser General Public License</a>
  に準拠する。\n
  また、このライブラリの開発者達は、このライブラリの使用に伴う一切の損害責任を負わない。

  <hr>
  
  - \subpage crd_introduction_page
  - \subpage crd_fundamental_page
  - \subpage crd_tree_page
  - \subpage crd_class_page
  - \subpage crd_report_page
*/


/*!
  \page crd_introduction_page 座標系で何を表すか

  座標系においてロボットシステムのモジュールにおける移動体、及び測定したデータの位置を表現する。
  
  移動体の位置を表現するモジュール例としては、走行制御モジュールがある。
  
  \image html crd_intro_run.png 推定自己位置を座標系管理

  測定したデータの位置を表現する例としては、測域センサモジュールがある。

  \image html crd_intro_urg.png センサからの距離データを座標系に展開

  ロボットシステムのモジュールが具象データ扱う、又は次元が２以上のデータを扱うのであれば、モジュールは何らかの座標系を持ちうる。
  本ライブラリの目的は座標系の基本的な処理機能を提供し、各モジュールで共通な方法で座標系の操作を行うことにある。

  \n
  \n
  Prev : <a href="index.html">Topへ</a> | Next : \ref crd_fundamental_page
*/


/*!
  \page crd_fundamental_page 座標系の重ね合わせ

  座標系で管理する情報は、基本的には実空間を表現したデータであるので、モジュール毎の座標系は重ね合わせることができる。

  \image html crd_fundamental_bigo.png 走行とセンサの座標系を重ね合わせ

  \n
  \section crd_fundamental_crds グローバル座標系とローカル座標系

  ２つの座標系の重ね合わせると、片方の座標系の情報はもう１つの座標系において表現できる。つまり、管理している情報は最終的に１つの座標系で表現できる。
  この最終的に基準として用いたい座標系をグローバル座標系とよび、それ以外の座標系をローカル座標系と呼ぶ。

  \n
  \section crd_fundamental_set 座標系に対する座標系の定義

  座標系を重ね合わせる際には、基準として残す座標系のどこに、重ね合わせる座標系の原点を配置するかを定義すればよい。
  重ね合わせた座標系において、基準となる方の座標系を「親」、もう１方の座標系を「子」と定義する。

  \image html crd_fundamental_multi.png 座標系の重ね合わせ

  \n
  \section crd_fundamental_obj 制御対象に対する座標系の定義

  座標系に対して座標系の原点を定義する他に、モジュールで管理している位置そのものに座標系を定義できると便利な場合がある。
  例えば、ロボットに搭載したセンサ位置を取得する場合である。走行制御モジュールが返す推定自己位置に座標系を定義できれば、センサ位置はロボットの移動に伴って更新されることになり、結果としてセンサ値を座標系で取得した場合の位置も更新されることになる。

  \image html crd_fundamental_fs.png 推定自己位置に座標系を定義

  \n
  \n
  Prev : \ref crd_introduction_page | Next : \ref crd_tree_page
*/


/*!
  \page crd_tree_page 座標系管理のデータ構造

  \section crd_tree_abst 座標系のツリー管理
  
  座標系はツリー構造で管理する。各ノード毎に親座標系のどこに自座標系の原点位置があるかを管理する。

  ※ !!! 座標系ツリーの図

  １つのロボットシステムに座標系のツリー構造が複数あったとしても、データ構造的には矛盾はない。これは、管理している情報の種類が異なっている場合に言える。

  \n
  \section crd_tree_ctrl 座標系ツリーに対する操作

  座標系ツリーに対する操作は以下の通り。
  - \ref crd_tree_ctrl_add
  - \ref crd_tree_ctrl_del
  - \ref crd_tree_ctrl_set
  - \ref crd_tree_ctrl_update
  
  また、運用上あると便利な機能として、以下の操作を定義する。  
  - \ref crd_tree_ctrl_adjust
  - \ref crd_tree_ctrl_position

  \n
  \subsection crd_tree_ctrl_add 座標系ツリーのノードに座標系を追加

  !!! 文章

  \n
  \subsection crd_tree_ctrl_del 座標系ツリーから座標系を削除
  
  !!! 削除したら、その座標系以下の座標系は、親座標系の管理下に入る

  で、そのときには、setParentCoordinate が呼ばれる
  基本的に、子座標系を持つ座標系を削除したときに、その子座標系の原点位置については保証できない

  \n
  \subsection crd_tree_ctrl_set 座標系ツリーのノードを別のノードの子として定義

  張り替えの意味を説明
  
  !!! ループ状態になる張り付けは禁止
  保証できないから、つか、なんか変だから

  \n
  \subsection crd_tree_ctrl_update 親座標系との相対位置を再定義

  !!! 文章

  \n
  \subsection crd_tree_ctrl_adjust 座標系の原点が他座標系の指定位置になるように親との相対位置を更新

  !!! 文章

  \n
  \subsection crd_tree_ctrl_position 座標系の指定位置が、指定座標系のどの位置に存在するかを返す

  !!! 文章

  \n
  \n
  Prev : \ref crd_fundamental_page | Next : \ref crd_class_page
*/


/*!
  \page crd_class_page 座標系クラス

  \section crd_class_normal 基本座標系クラス

  !!! 意味について

  \n
  \section crd_class_object 制御対象に座標系を定義できる座標系クラス

  上記の \ref crd_class_normal を継承する。
  制御対象が位置を持つモジュールは、このクラスを継承して実装すべき。

  !!! 意味、使い方について
  サンプルコードなど

  \n
  \n
  Prev : \ref crd_tree_page | Next : \ref crd_report_page
*/


/*!
  \page crd_report_page バグ報告先

  バグ報告・要望等はかみむらまで

  \n
  \n
  Prev : \ref crd_class_page | <a href="index.html">Topへ</a>
*/
