-------------------------------------------------
-------------------------------------------------
name:　　rtc-controller
brief:　　RTC制御ツール for OpenRTM-aist
Date$:　　2009/12/12
author:　　eno
mail:　　enoreplies@gmail.com
WebPage: http://www15.atpages.jp/~technotes/wiki/
Id$ 
-------------------------------------------------
-------------------------------------------------

◎概略

　rtc-controllerは外部からOpenRTM-aist上のRTコンポーネントを制御するソフトウェアです．
　シェル・コマンドラインでのRTC操作を行う環境を提供します．
　逐次コンソールへ一問一答しコマンドを入力するConsoleMode・引数入力でコマンドを入力するArgumentModeを備えています．


◎動作環境
　rtc-controllerはLinux・Windowsにて，OpenRTM-1.0RC・OpenRTM-0.4.2上で動作します．
　以下の環境で動作検証済です．

　・Ubuntu9.04 & OpenRTM-1.0RC
　・Ubuntu9.04 & OpenRTM-0.4.2
　・WindowsXP SP2 & VC2008Express & OpenRTM-1.0RC
　・WindowsXP SP2 & VC2008Express & OpenRTM-0.4.2


◎特徴

　rtc-controllerにより，シェルスクリプト・バッチスクリプトでRTシステムを記述する事が可能となります．

　rtc-controllerを利用すれば，例えば，
・eclipseを立ち上げない事でCPUリソースを節約する，
・外部端末からSSHでログインしRTシステムを制御する，
・RTC-Builderでは見えない二重接続を確認する，
・100個のRTCから成るRTシステムを構築する，
・Linuxであればシェル・Windowsであればバッチスクリプトで自動起動・自動接続スクリプトを書く，スクリプトをダブルクリックすればRTシステムが出来上がる，
・Configurationの値を少しずつ変えながらログを取るスクリプトを作り，RTシステムの最適なパラメータ探索を自動で行う，
・起動スクリプトに組み込み，電源を入れれば自動でRTシステムが構築される，
等々のことを容易に実現することができます．

　rtc-controllerのみではなく，RTC-Link・RTC-Builderと連携して動作させることも可能です．
RTC-BuilderでRTコンポーネントを接続しRTシステムを構築した後，rtc-controllerのsaveコマンドで接続を保存し，次からはrtc-controllerでloadコマンドを実行すれば自動的にコネクションが復元されます．


○Ubuntu環境でのインストール
①.libreadlineをインストールします．
　# sudo apt-get install libreadline-dev

②．rtc-controllerをインストールします．
　　(/usr/local/bin/にrtc-controllerがインストールされます)
　# cd rtc-controller/src
　# make
　# make install


○Ubuntu環境でのアンインストール
①．下記コマンドを実行し，/usr/local/bin/rtc-controllerを削除します．
　# make uninstall
②．rtc-controllerフォルダを削除します．


○Windows環境でのインストール
①．copyprops.batをダブルクリックして，rtm_config.vspropsをカレントフォルダにコピーします．
②．rtc-controller.slnを開き，rtc-controller.exeをビルドします．
③．rtc-controller.exeをパスの通っているディレクトリ("C:\Program Files\OpenRTM-aist\1.0\bin"等)にコピーします．


○Windows環境でのアンインストール
①．パスの通っているディレクトリ("C:\Program Files\OpenRTM-aist\1.0\bin"等)に置いたrtc-controller.exeを削除します．
②．rtc-controllerフォルダを削除します．


◎使用方法
○ConsoleMode
下記コマンドをコンソールに入力すると，単体動作を行います．
　　# rtc-controller
①．下記のように表示され，NamingServerのIPアドレスを入力します．なにも入力せずにエンターを押すと，127.0.0.1:9876に接続します．
　　# Input IPAdress:Port(Default=127.0.0.1:9876)
　　# input >>>
②．下記のようにコマンドリスト表示され，コマンドを入力します．表示されているコマンド・もしくは()の中のショートカットコマンドを入力します．各コマンドの機能は後述します．
　　#Input Commond
　　quit(q),connect(c),list(l),state(s),portlist(pl),
　　portshow(ps),portinfo(pi),connectinfo(ci),rtcinfo(ri),disconnect(dc),
　　disconnectall(dca),active(a),deactive(d),allgetrate(agr),allactive(aa),
　　alldeactive(ad),allshow(as),alldisconnect(adc),confget(cg),confgetdefault(cgd
　　confsetdefault(csd),confset(cs),confsetnew(csn),destory(des),getrate(gr)
　　setrate(sr),save,load
　　#input >>>
③．下記のように表示された時，RTCの名前，又はRTCのネームサーバに登録された順番のどちらかを入力します．
　　Input RTC-Name or Number
　　input >>>
　　下記のように表示された時，Portの名前，又はPort番号のどちらかを入力します．
　　Input Port Name or Number
　　input >>>


○ArgumentMode
下記のように，引数でコマンドを指定します．RTC名・ポート名は名前・登録順番のどちらを入力しても構いません．
　　# rtc-controller "IPアドレス:ポート番号" --"コマンド" 
　　# rtc-controller "IPアドレス:ポート番号" --"コマンド" "RTC名"
　　# rtc-controller "IPアドレス:ポート番号" --"コマンド" "RTC名" "ポート名"

　以下のサンプルのようにシェル・バッチスクリプトで接続・アクティブ化を記述することができます．
　　サンプルシェルスクリプト(Linux環境)
　　rtc-controller/Sample_AutoRun/linux/linux_sample_autorun.sh
　　サンプルバッチスクリプト(Windows環境)
　　rtc-controller/Sample_AutoRun/linux/win_sample_autorun.bat


○◎コマンドリスト

-connect
　　RTComponent同士の接続を行います．
　　　# rtc-controller "IPアドレス:ポート番号" --connect "RTC名1" "ポート名1" "RTC名2" "ポート名1"

-list
　　NameServerに登録されているRTCリストを出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --list

-state
　　RTCの状態(active/deactive)を出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --state "RTC名"

-portlist
　　RTCのポート名一覧を出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --portlist "RTC名"

-portshow
　　RTCのポート名一覧を出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --portshow "RTC名"

-portinfo
　　RTCのポート名接続情報を出力します．

　　　# rtc-controller "IPアドレス:ポート番号" --portinfo "RTC名"

-connectinfo
　　RTCと接続されているコネクタのプロパティ情報を出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --connectinfo "RTC名"

-rtcinfo
　　RTCのプロパティ情報を出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --rtcinfo "RTC名"

-disconnect
　　RTCのポートに接続されているコネクタを切断します．
　　　# rtc-controller "IPアドレス:ポート番号" --disconnect "RTC名" "ポート名"

-disconnectall
　　RTCに接続されているコネクタを全て切断します．
　　　# rtc-controller "IPアドレス:ポート番号" --disconnectall "RTC名"

-active
　　RTCをアクティブ化します．
　　　# rtc-controller "IPアドレス:ポート番号" --active "RTC名"

-deactive
　　RTCを非アクティブ化します．
　　　# rtc-controller "IPアドレス:ポート番号" --deactive "RTC名"

-reset
　　RTCをリセットします．
　　　# rtc-controller "IPアドレス:ポート番号" --reset "RTC名"

-confget
　　RTCの特定ConfigSetのConfigration情報を取得します
　　　# rtc-controller "IPアドレス:ポート番号" --confget "RTC名" "Config名" "ConfigSet名"

-confgetdefault
　　RTCのdefaultのConfigration情報を取得します
　　　# rtc-controller "IPアドレス:ポート番号" --confgetdefault "RTC名" "Config名"

-confsetdefault
　　RTCのdefaultのConfigrationを設定します．
　　　# rtc-controller "IPアドレス:ポート番号" --confgetdefault "RTC名" "Config名" "Config値"

-confset
　　RTCの特定ConfigSetのConfigrationを設定します．
　　　# rtc-controller "IPアドレス:ポート番号" --confset "RTC名" "Config名" "Config値" "ConfigSet名"

-confsetnew
　　RTCの特定ConfigSetのConfigrationを新規に設定します．
　　　# rtc-controller "IPアドレス:ポート番号" --confsetnew "RTC名" "Config名" "Config値" "ConfigSet名"

-save
　　NameServerに登録されているRTC全ての接続をシェルスクリプト(Linux)・バッチファイル(Win)形式で出力します．
　　　# rtc-controller "IPアドレス:ポート番号" --save "ファイル名"

-load
　　saveコマンドで出力されたファイルを読み出し，接続を復元します．
　　　# rtc-controller "IPアドレス:ポート番号" --load "ファイル名"

-destory
　　NameServerに登録されているRTCを全てクリアします．
　　　# rtc-controller "IPアドレス:ポート番号" --destory "RTC名"

-getrate
　　RTCの周期を取得する．
　　ただし，RTC内にonRateChangedが定義されている必要あり．
　　　# rtc-controller "IPアドレス:ポート番号" --getrate "RTC名"

-setrate
　　RTCの周期を変更する．
　　ただし，RTC内にonRateChangedが定義されている必要あり．
　　　# rtc-controller "IPアドレス:ポート番号" --setrate "RTC名" "rate値[Hz]"

-allgetrate
　　NameServerに登録されている全てのRTCの周期を取得する．
　　ただし，RTC内にonRateChangedが定義されている必要あり．
　　　# rtc-controller "IPアドレス:ポート番号" --allgetrate

-allactive
　　NameServerに登録されている全てのRTCをアクティブ化する．
　　　# rtc-controller "IPアドレス:ポート番号" --allactive

-alldeactive
　　NameServerに登録されている全てのRTCを非アクティブ化する．
　　　# rtc-controller "IPアドレス:ポート番号" --alldeactive

-allshow
　　NameServerに登録されている全てのRTCの状態を出力する．
　　　# rtc-controller "IPアドレス:ポート番号" --allshow

-alldisconnect
　　NameServerに登録されている全てのRTCの接続を全て切断する．
　　　# rtc-controller "IPアドレス:ポート番号" --alldisconnect 





◎Bug
・OpenRTM-0.4.2で１つのポートから複数ポートへ接続したコネクタを切断すると強制終了する
　→OpenRTM-0.4.2固有の問題．OpenRTM-aist-1.0では解決済．

・死んでいるRTCがある時，rtc-controllerが強制終了する．
　→rtc-controllerでdestoryコマンドを行い，ネームサーバをクリアした上でRTCを起動し直して下さい．

・Portの名前が数字のみだと，Port名で選択できない．
　→Port名・Port番号を文字数字判定処理を行っている為．Port番号で指定して下さい．

・同じ名前のPortがあると，Port名で選択できない．
　→Port番号で指定して下さい．

・ConnectCompで接続されたConnectionがrtc-controllerでsaveできない．
　→ConnectionのIDの値が入力されていない為．ConnectionのID値を入力して下さい．


◎ライセンス規約
　rtc-controllerはMIT ライセンスに準じます．

----------------------------------------------------------------------------------

The MIT License

Copyright (c) 2009 eno<enoreplies@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.


以下に定める条件に従い、本ソフトウェアおよび関連文書のファイル（以下「ソフトウェア」）の複製を取得するすべての人に対し、ソフトウェアを無制限に扱うことを無償で許可します。これには、ソフトウェアの複製を使用、複写、変更、結合、掲載、頒布、サブライセンス、および/または販売する権利、およびソフトウェアを提供する相手に同じことを許可する権利も無制限に含まれます。

上記の著作権表示および本許諾表示を、ソフトウェアのすべての複製または重要な部分に記載するものとします。
ソフトウェアは「現状のまま」で、明示であるか暗黙であるかを問わず、何らの保証もなく提供されます。ここでいう保証とは、商品性、特定の目的への適合性、および権利非侵害についての保証も含みますが、それに限定されるものではありません。作者または著作権者は、契約行為、不法行為、またはそれ以外であろうと、ソフトウェアに起因または関連し、あるいはソフトウェアの使用またはその他の扱いによって生じる一切の請求、損害、その他の義務について何らの責任も負わないものとします。 

----------------------------------------------------------------------------------


