RTM-Lua

View the Project on GitHub Nobu19800/RTM-Lua

V-REP上で動作するRTCの作成方法

このページでは物理シミュレータV-REP上で動作する上で動作するRTCを作成して、以下のようにPython版サンプルコンポーネントのジョイスティックコンポーネントと接続して車体を操作するシステムの作成を行います。

V-REPのインストール

以下からV-REPのインストーラーを入手してインストールしてください。

V-REPにOpenRTM Lua版をインストール

V-REPをインストールしたフォルダ(C:\Program Files\V-REP3、もしくは任意ディレクトリのV-REP_PRO_EDU_V3_5_0_Linux)にOpenRTM Lua版の各ファイルをコピーします。

以下から64bit用のOpenRTM Lua版ファイル一式(OpenRTM Lua x.y.z Lua5.1 64bit)をダウンロードしてください。

OpenRTM Lua版からV-REPにファイルをコピーします。

openrtm-lua-x.y.z-x64-lua5.1\lua\以下のファイルを全てC:\Program Files\V-REP3\V-REP_PRO_EDU\lua\以下にコピーしてください。 Ubuntuの場合は任意ディレクトリのV-REP_PRO_EDU_V3_5_0_Linux以下にコピーします。

openrtmlua340

以下、WindowsとUbuntuでコピーするファイルが違います。Ubuntuで使いたいという奇特な人は注意してください。

Windowsの場合

openrtm-lua-x.y.z-x64-lua5.1\clibs\以下のファイルを全てC:\Program Files\V-REP3\V-REP_PRO_EDU\以下にコピーしてください。

openrtmlua360

Ubuntuの場合

以下からluamodule_linuxを入手してください。

中身のファイルを全てV-REP3\V-REP_PRO_EDU\以下にコピーしてください。

vrep200

RTC作成

RTC BuilderによるRTCの基本的な作成手順は以下のページを参考にしてください。

上のページの作成手順に従って、以下の仕様のRTCを作成してください。

基本プロファイル

   
モジュール名 VRepSample

アクティビティ

onExecuteを有効にしてください。

インポート

   
ポート名 in
データ型 RTC::TimedFloatSeq

VRepSample.luaの編集

ソースコードの先頭付近に以下の行を追加して、シミュレーションのスレッドと自動的に切り替える機能をオフにしてください。 機能をオフにした場合、simSwitchThread関数によりシミュレーションを進める必要があります。

simSetThreadAutomaticSwitch(false)

onExecute関数を以下のように編集してください。

	function obj:onExecute(ec_id)
            simSwitchThread()
            if self._inIn:isNew() then
                local data = self._inIn:read()
                local joint_front_left_wheel=simGetObjectHandle('joint_front_left_wheel')
                local joint_front_right_wheel=simGetObjectHandle('joint_front_right_wheel')
                local joint_back_right_wheel=simGetObjectHandle('joint_back_right_wheel')
                local joint_back_left_wheel=simGetObjectHandle('joint_back_left_wheel')

                simSetJointTargetVelocity(joint_front_left_wheel, data.data[2]/50+data.data[1]/50)
                simSetJointTargetVelocity(joint_front_right_wheel, -data.data[2]/50+data.data[1]/50)
                simSetJointTargetVelocity(joint_back_right_wheel, -data.data[2]/50+data.data[1]/50)
                simSetJointTargetVelocity(joint_back_left_wheel, data.data[2]/50+data.data[1]/50)
            end
            return self._ReturnCode_t.RTC_OK
	end

simSwitchThread関数によりシミュレーションを1ステップ進めています。

InPortで読み込んだデータを車輪の速度に入力しています。

V-REPの関数については以下のページが参考になります。

動作確認

ネームサーバー起動

事前にネームサーバーの起動が必要です。

※OpenRTM-aist 1.2以降ではRT System Editorにネームサーバー起動ボタンがあるため、手順が簡単になっています。

TkJoyStickコンポーネントの起動

TkJoyStickコンポーネントを入手して、TkJoyStickComp.exeを実行してください。

ロボット配置

robots->mobile->Robotnik_Summit_XL140701.ttmをドラックアンドドロップして配置します。 openrtmlua380 new scene(scene1)のツリーからRobotnik_Summit_XLの名前の右にあるアイコンをクリックするとLuaスクリプトの編集ウインドウが起動します。 openrtmlua390 その上に先ほど作成したVRepSample.luaのソースコードを全て上書きしてください。 openrtmlua420

RTC起動

V-REP上で以下のボタンを押すとシミュレーションが開始してRTCが起動します。 openrtmlua430

RTSystem作成

まずRTCの起動に成功している場合は、以下のようにネームサービスビューにRTCが表示されます。

openrtmlua550

Open New System Editorボタンを押してシステムダイアグラムを表示してください。

openrtmlua560

ネームサービスビューからシステムダイアグラムにRTCをドラックアンドドロップしてください。

openrtmlua570

TkJoyStick0posのOutPortを、VRepSample0のinのInPortにドラックアンドドロップしてください。 これで通信ができるようになります。

openrtmlua580

All Activateボタンを押すとTkJoyStick0からデータが送信されるため操作ができるようになります。

openrtmlua590

コネクタ接続、RTCのアクティブ化の自動化

VRepSample.luaのmanager:init関数の引数を以下のように変更してください。

manager:init({"-o", "manager.components.preconnect:VRepSample0.in?port=rtcname://localhost/TkJoyStick0.pos", "-o", "manager.components.preactivation:VRepSample0,rtcname://localhost/TkJoyStick0"})

-oオプションでパラメータの設定ができます。

起動時に接続するポートを指定します。 この場合はVRepSample0というRTCのinというデータポートを、TkJoyStick0というRTCのposというポートに接続します。

ただし、TkJoyStick0は別プロセスで起動しているため、rtcname形式による指定が必要になります。 rtcname形式はネームサーバーからRTCを取得する方法です。rtcname://アドレス/RTC名.ポート名で指定します。

起動時にアクティブ化するRTCを指定します。