Download
latest Releases : 2.0.0-RELESE
2.0.0-RELESE | Download page |
Number of Projects
RT-Component | 154 |
RT-Middleware | 35 |
Tools | 23 |
Documentation | 2 |
Choreonoid
Motion editor/Dynamics simulator
OpenHRP3
Dynamics simulator
OpenRTP
Integrated Development Platform
AIST RTC collection
RT-Components collection by AIST
TORK
Tokyo Opensource Robotics Association
DAQ-Middleware
Middleware for DAQ (Data Aquisition) by KEK
初心者用課題
ひな形コードの作成
新規作成した RTC を EducatorVehicle と接続して制御するまでの手順を説明します。
まずは Windows、Ubuntu上で このページ の手順に従って RTC を作成してください。 RTC の仕様は以下のように入力します。
この RTC ではコンフィギュレーションパラメーター forward_velocity、rotate_velocity に入力した速度を target_velocity から EducatorVehicle に送信します。 さらに touch でタッチセンサーのオンオフを取得して、オンになった場合は停止して sound から発声する音を指令します。
※RTC は EV3上で動作させることを前提にしていますが、動作確認や講習会での利用には Windows や Ubuntu上で動作させても問題はないので、その場合はコードの編集をする前に CMake で Visual Studio、もしくは Code::Blocks のプロジェクトを生成しておくことをお勧めします。 CMake でプロジェクト生成からビルドまでの手順は以下のページに記載してあります。
コードの編集
まずは onExecute 関数を編集します。
以下はforward_velocity、rotate_velocityの 値を target_velocity から送信するコードです。
C++(src/EV3SampleCPP.cpp)
Python(EV3SamplePy.py)
一応、非アクティブ状態の時は停止するように onDeactivated で速度0を送信するようにします。
C++(src/EV3SampleCPP.cpp)
Python(EV3SamplePy.py)
共通インターフェース仕様書では進行方向をX軸正方向にしているため、Velocity2D型のvxに直進速度、vaに回転速度を入力します。
Pythonではさらにコンストラクタの以下の部分を修正してください。
Python(EV3SamplePy.py)
※ここまでの作業だけでも Educator Vehicle の動作は可能なので、面倒ならば以下の手順は飛ばしてもらっても大丈夫です。
次にタッチセンサーが ON になった時に停止する処理を書きます。 ここで touch に onExecute が呼び出された時に新規に受信したデータが必ず存在するとは限らないので、タッチセンサーのデータを一時的に格納しておく変数を宣言しておきます。
C++(include/EV3SampleCPP/EV3SampleCPP.h)
Python(EV3SamplePy.py)
次に onExecute にタッチセンサーがオンの場合に停止、音声を出力する処理を追加します。
C++(src/EV3SampleCPP.cpp)
Python(EV3SamplePy.py)
ビルド
ソースコードの編集が終了したらC++の場合はビルドを行います。 EV3上で動作させる場合はクロスコンパイル環境でビルドを行ってください。 ソースコードのあるディレクトリに移動して以下のコマンドを入力すればビルドできます。
※Visual Studio、もしくは Code::Blocks で編集している場合は GUI上の操作でビルドを行ってください。
生成された src/EV3SampleCPPComp を EV3 に転送してください。 ※Windows、Ubuntu で動作させる場合は転送しないでください。
Python版もEV3SamplePy.py を転送してください。
cmake がインストールされていない場合は以下のコマンドを入力してください。
RTC 起動
ビルドが完了したら RTC を起動します。 以下のコマンドで起動できます。C++
Python
※Windows上で RTC を起動する場合は EV3SampleCPPComp.exe (EV3SamplePy.py) をダブルクリックしてください。
次に EducatorVehicle を起動させます。 以下のコマンドで起動してください。
動作確認
まずは動作確認のためにデータポートの接続を行います。 Windows側で RTシステムエディタを起動してください。 最初に EV3 で起動しているネームサーバーを RTシステムエディタのビューに追加します。 ネームサーバー追加ボタンを押下して EV3 の IPアドレスを入力してください。
ネームサーバーを追加したらデータポートを以下のように接続してください。
そして RTC をアクティブ化すると動作を開始します。
まずは EV3SampleCPP(EV3SamplePy) のコンフィギュレーションパラメーターを変更する事で Educator Vehicle を操作してみます。
RTシステムエディタで EV3SampleCPP0(EV3SamplePy0) を選択して、Configuration View の編集を選択してください。
すると以下のウインドウが起動します。
forward_velocity と rotate_velocity のスライダーによりEV3を操作できます。
次にタッチセンサーがオンになった場合に停止するかを確認してみます。 タッチセンサーに物体を接触させて停止するかを確認してください。 停止した時に音が鳴るかも確認してください。
応用(中級者用課題)
ここからはさらにタッチセンサーがオンになった場合に後退→回転のより障害物を回避する動作を実装します。 タッチセンサーのデータが入力された時に以下の処理を実行することで回避運動を行います。
コンフィギュレーションパラメーター
新たに以下のコンフィギュレーションパラメーターを設定します。
関数の実装
新たに以下の関数を実装します。
stop_robot 関数
stop_robot関数は以下のようになっています。 目標速度を0に設定して送信します。
back_move 関数
back_move 関数は以下のようになっています。 後退するための速度を出力後、sleep 関数で指定時間だけ待つことによりコンフィギュレーションパラメータ back_speed の 速度でback_time の時間だけ後退する運動を実現しています。
※onExecute 関数内で sleep 関数などで待機すると、その間は RTシステムエディタ等による操作ができなくなるためあまり望ましい実装の方法ではありません。 ただ今回の場合は実行コンテキストを止めずに処理を実装すると処理が複雑化するためこのように実装しています。
stop_robot 関数
rotate_move 関数は以下のようになっています。 後退運動と同じく、コンフィギュレーションパラメーター rotate_speed の速度で rotate_time の時間だけ回転運動する処理を実装しています。
onExecute 関数の実装
最後にフローチャートのように、タッチセンサーのデータ入力時に回避運動を行う処理を実装すれば完成です。
発展(上級者用課題)
ここでは超音波センサーにより地面までの距離を検知して滑落を回避する RTC を作成します。
超音波センサーで検知した地面までの高さが一定以上の場合に、以下の処理を実行します。
データポート、コンフィギュレーションパラメーター
以下のデータポート、コンフィギュレーションパラメーターを追加してください。
関数の実装
接地可能な地面を超音波センサーで調べる search_ground 関数と、ロボットを指定した角度だけ回転させる turn_move 関数を実装します。
onExecute 関数
最後に onExecute 関数を以下のように実装します。
RTシステムの保存について
RTシステムの保存については RTシステムエディタ上でもできるのですが、rtshell により RTシステムの復元を自動化することができます。 RTシステムエディタでポートの接続、コンフィギュレーションパラメーターを設定後、rtcryo コマンドを実行してください。
これで、testSystem.rtsys というファイルにRTシステムの情報が保存されます。
ただし今回の課題のように複数のネームサーバーに登録された RTC を使用する場合、以下のように複数のネームサーバーを指定する必要があります。
保存した RTシステムを復元するためには rtresurrect コマンドを使用します。
RTCをアクティブ化するには rtstart コマンドを使用します。
RTCの非アクティブ化はrtstopコマンドを使用します。
ポートを切断する場合は rtteardownコマンドを使用します。
注意点として、RTC はデフォルトの設定だとネームサーバーにはホスト名 .host_cxt 以下に登録されます。 ホスト名は環境によって違うので、この手順で RTシステムを保存しても他の環境では再現できないという事になります。 このため、rtc.conf を編集してネームサーバーの Root 直下に登録するようにすると、他の環境でも RTシステムの復元ができるようになります。