Choreonoid OpenRTMプラグインの利用方法

Choreonoidはオープンソースのロボット用シミュレーションソフトウェアです。 拡張性が高く、物理エンジン、通信機能、スクリプティング機能、制御アルゴリズム等をC++プラグインとして追加できます。

Choreonoid用OpenRTMプラグインはChoreonoid上でRTCを起動し、シミュレータ上のオブジェクトのトルクや速度、ビジョンセンサやレーザーレンジセンサ等の入出力をポートの入出力と関連付けたRTCを作成できます。 これにより外部のRTCとChoreonoidの入出力が連携し、RTCの再利用によるシミュレータ実行の効率化、シミュレータ環境から実機環境へシームレスに移行できます。

choreonoid1_1.png

このページではOpenRTMプラグインのインストール手順について説明します。

ビルド手順

OpenRTMプラグインは現在OpenRTM-aist 1.2.2以前のバージョンのサポートを終了しています。 OpenRTM-aist 2.0.0以上のバージョンのインストールが必要です。

Windows

OpenRTM-aistのビルドとインストール

OpenRTM-aist+omniORBを以下の手順でビルド、インストールしてください。 ※インストーラーでOpenRTM-aistをインストールしている場合は不要。

ただし、CMake実行時にOpenRTM-aistのインストールフォルダは指定してそこにインストールするようにしてください。

 set OPENRTM_INSTALL_DIR=C:/work/openrtm_install
 set OMNIORB_SOURCE_DIR=C:/workspace/omniORB-4.2.5-x64-vc14-py310
 cmake .. -DORB_ROOT=%OMNIORB_SOURCE_DIR% -DCMAKE_INSTALL_PREFIX=%OPENRTM_INSTALL_DIR%
 cmake --build . --config Release
 cmake --build . --config Release --target install

またOpenSSLのヘッダーファイル、ライブラリを適当な場所に展開してください。

Choreonoidのビルドとインストール

Choreonoidを以下の手順でビルド、インストールしてください。

CMake、Boost、Qtのバージョンには注意してください。

  • CMakeのバージョンが古い場合、Boostをライブラリを検出できない場合があります。できるだけ最新版をインストールしてください。
  • Boostはデフォルトの設定でC:\local\boost_1_77_0のようなフォルダにインストールされますが、CMakeはC:\local\boost_{バージョン番号}からBoostを探すため、古いバージョンがすでにC:\local\以下にインストールされている場合にそちらを検出する事があるので注意してください。

OpenRTMプラグインの使用のためにはCORBAプラグインのビルドに、ヘッダーファイルなどの各種ファイルをインストールが必要です。 また、OpenRTM Pythonプラグインの使用のためにはPythonプラグインのビルドが必要です。

設定項目 内容 設定例
ENABLE_CORBA CORBA通信機能の有効化、無効化 ON
BUILD_CORBA_PLUGIN CORBAプラグインのビルドの有無 ON
CHOREONOID_OMNIORB_DIR omniORBのインストールフォルダのパス C:/work/openrtm_install/2.0.0/omniORB/4.2.5_vc16
INSTALL_SDK ヘッダーファイルなどの各種ファイルをインストールするか ON
ENABLE_PYTHON Pythonスクリプティング機能、およびPythonプラグインのビルドの有無 ON
CMAKE_INSTALL_PREFIX Choreonoidのインストールフォルダ C:/work/choreonoid_install

CHOREONOID_OMNIORB_DIRについては環境変数OMNI_ROOTを設定していると自動でomniORBを検出しますが、Choreonoidが生成するCMakeコンフィグファイルの問題でOpenRTMプラグインのビルドでエラーが発生することがあるので必ず手動でパスを設定してください。 またPythonプラグインのビルドのため、Pythonをインストールしてください。

コマンドでは以下のように入力できます。

 set CHOREONOID_INSTALL_DIR=C:/work/choreonoid_install
 Invoke-WebRequest -Uri https://github.com/choreonoid/choreonoid/archive/refs/tags/v1.7.0.zip -OutFile choreonoid-1.7.0.zip
 Expand-Archive -Path choreonoid-1.7.0.zip -DestinationPath .
 Rename-Item choreonoid-1.7.0 choreonoid
 cd choreonoid
 mkdir build
 cd build
 cmake .. -DENABLE_CORBA=ON -DBUILD_CORBA_PLUGIN=ON -DINSTALL_SDK=ON -DCHOREONOID_OMNIORB_DIR=%OPENRTM_INSTALL_DIR%/2.0.0/omniORB/4.2.5_vc16 -DENABLE_PYTHON=ON -DCMAKE_INSTALL_PREFIX=%CHOREONOID_INSTALL_DIR%
 cmake --build . --config Release
 cmake --build . --config Release --target install

choreonoidのリポジトリのmasterブランチのソースコードに不具合があり、WindowsでのCorbaPluginのビルドでエラーが発生します。masterブランチのソースコードを使う場合、src/CorbaPlugin/CorbaPlugin.cppの以下の部分を修正してください。

 nameServerProcess.start(QString("\"") + command.c_str() + "\""); //修正前
 
 nameServerProcess.start(QString("\"") + command.c_str() + "\"", QStringList()); //修正後

※OpenRTM-aistをインストーラーでインストールした場合はCHOREONOID_OMNIORB_DIRオプションの設定は不要です。

OpenRTMプラグインのビルドとインストール

OpenRTMプラグインのソースコードは以下から入手できます。

Choreonoidと同様、CMake実行後にVisual Studioでビルドします。

CMakeでは以下の項目を設定します。

設定項目 内容 設定例
Choreonoid_DIR ChoreonoidのCMakeコンフィグファイルがインストールされたフォルダ C:/work/choreonoid_install/share/choreonoid/cmake
OpenRTM_DIR OpenRTM-aistのCMakeコンフィグファイルがインストールされたフォルダ C:/work/openrtm_install/2.0.0/cmake

以下のコマンドを実行することでビルド、インストールができます。 生成したOpenRTMプラグインはChoreonoidのインストールフォルダにコピーされます。

 git clone https://github.com/OpenRTM/choreonoid-openrtm
 cd choreonoid-openrtm
 mkdir build
 cd build
 cmake .. -DChoreonoid_DIR=%CHOREONOID_INSTALL_DIR%/share/choreonoid/cmake -DOpenRTM_DIR=%OPENRTM_INSTALL_DIR%/2.0.0/cmake
 cmake --build . --config Release
 cmake --build . --config Release --target install

※OpenRTM-aistをインストーラーでインストールした場合はOpenRTM_DIRオプションの設定は不要です。

OpenRTM Pythonプラグインのビルドとインストール

OpenRTMプラグインのソースコードは以下から入手できます。

CMakeの設定項目はOpenRTMプラグインと同じです。

以下のコマンドを実行することでビルド、インストールができます。

 git clone https://github.com/Nobu19800/OpenRTMPythonPlugin
 cd OpenRTMPythonPlugin
 mkdir build
 cd build
 cmake .. -DChoreonoid_DIR=%CHOREONOID_INSTALL_DIR%/share/choreonoid/cmake -DOpenRTM_DIR=%OPENRTM_INSTALL_DIR%/2.0.0/cmake
 cmake --build . --config Release
 cmake --build . --config Release --target install

※OpenRTM-aistをインストーラーでインストールした場合はOpenRTM_DIRオプションの設定は不要です。

必要なファイル一式をまとめる

Choreonoidをビルド、インストールすると、基本的には必要なファイルはインストール先にコピーされます。 ただし、Pythonプラグインをビルドする場合は、対応するバージョンのPythonがインストールされている必要があります。

このため、対応するバージョンのPythonがインストールされていない場合は、以下のページのように組み込み用Pythonを同梱する必要があります。

まずは、対応するバージョンのpython-3.x.y-embed-amd64をダウンロードしてください。

次に必要なライブラリをインストールします。 Choreonoidはnumpyが必要なためインストールします。

 python -m pip install numpy

また、Choreonoid Pythonプラグインのサンプルプログラムを実行するためにPySDL2が必要なためインストールします。

 python -m pip install pysdl2 pysdl2-dll

omniORB、OpenRTM-aistをインストールする必要があるため、以下のファイル、フォルダをpython-3.x.y-embed-amd64/Lib/site-packages以下のコピーしてください。

  • CosNaming
  • omniidl
  • omniidl_be
  • omniORB
  • OpenRTM_aist
  • OpenRTM-aist.pth
  • CORBA.py
  • CosNaming_idl.py
  • CosNamingPOA
  • PortableServer.py
  • PortableServerPOA.py
  • _omnicodesets.pyd
  • _omniConnMgmt.pyd
  • _omnihttpCrypto.pyd
  • _omnihttpTP.pyd
  • _omnipy.pyd
  • _omnisslTP.pyd

Ubuntu

OpenRTM-aistのビルドとインストール

OpenRTM-aist+omniORBを以下の手順でビルド、インストールしてください。

 export OPENRTM_INSTALL_PATH=~/work/openrtm_install
 git clone https://github.com/OpenRTM/OpenRTM-aist
 cd OpenRTM-aist/
 mkdir build
 cd build/
 git clone 
 cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$OPENRTM_INSTALL_PATH
 cmake --build . --config Release
 sudo cmake --build . --config Release --target install

Choreonoidのビルドとインストール

Choreonoidを以下の手順でビルド、インストールしてください。

CMake、Boost、Qtのバージョンには注意してください。

  • CMakeのバージョンが古い場合、Boostをライブラリを検出できない場合があります。できるだけ最新版をインストールしてください。
  • Boostはデフォルトの設定でC:\local\boost_1_77_0のようなフォルダにインストールされますが、CMakeはC:\local\boost_{バージョン番号}からBoostを探すため、古いバージョンがすでにC:\local\以下にインストールされている場合にそちらを検出する事があるので注意してください。

OpenRTMプラグインの使用のためにはCORBAプラグインのビルドに、ヘッダーファイルなどの各種ファイルをインストールが必要です。 また、OpenRTM Pythonプラグインの使用のためにはPythonプラグインのビルドが必要です。

設定項目 内容 設定例
ENABLE_CORBA CORBA通信機能の有効化、無効化 ON
BUILD_CORBA_PLUGIN CORBAプラグインのビルドの有無 ON
INSTALL_SDK ヘッダーファイルなどの各種ファイルをインストールするか ON
ENABLE_PYTHON Pythonスクリプティング機能、およびPythonプラグインのビルドの有無 ON
CMAKE_INSTALL_PREFIX Choreonoidのインストールフォルダ ~/work/choreonoid_install

 export CHOREONOID_INSTALL_DIR=~/work/choreonoid_install
 git clone https://github.com/choreonoid/choreonoid
 cd choreonoid
 mkdir build
 cd build
 cmake .. -DENABLE_CORBA=ON -DBUILD_CORBA_PLUGIN=ON -DINSTALL_SDK=ON  -DENABLE_PYTHON=ON -DCMAKE_INSTALL_PREFIX=$CHOREONOID_INSTALL_DIR
 cmake --build . --config Release
 cmake --build . --config Release --target install

OpenRTMプラグインのビルドとインストール

OpenRTMプラグインのソースコードは以下から入手できます。

CMakeでは以下の項目を設定します。

設定項目 内容 設定例
Choreonoid_DIR ChoreonoidのCMakeコンフィグファイルがインストールされたフォルダ ~/work/choreonoid_install/share/choreonoid/cmake
OpenRTM_DIR OpenRTM-aistのCMakeコンフィグファイルがインストールされたフォルダ ~/work/openrtm_install/lib/openrtm-2.0/cmake

以下のコマンドを実行することでビルド、インストールができます。 生成したOpenRTMプラグインはChoreonoidのインストールフォルダにコピーされます。

 git clone https://github.com/OpenRTM/choreonoid-openrtm
 cd choreonoid-openrtm
 mkdir build
 cd build
 cmake .. -DChoreonoid_DIR=$CHOREONOID_INSTALL_DIR/share/choreonoid/cmake -DOpenRTM_DIR=$OPENRTM_INSTALL_PATH/lib/openrtm-2.0/cmake
 cmake --build . --config Release
 cmake --build . --config Release --target install

OpenRTM Pythonプラグインのビルドとインストール

OpenRTMプラグインのソースコードは以下から入手できます。

CMakeの設定項目はOpenRTMプラグインと同じです。

以下のコマンドを実行することでビルド、インストールができます。

 git clone https://github.com/Nobu19800/OpenRTMPythonPlugin
 cd OpenRTMPythonPlugin
 mkdir build
 cd build
 cmake .. -DChoreonoid_DIR=$CHOREONOID_INSTALL_DIR/share/choreonoid/cmake -DOpenRTM_DIR=$OPENRTM_INSTALL_PATH/lib/openrtm-2.0/cmake
 cmake --build . --config Release
 cmake --build . --config Release --target install

使用方法

使用方法については以下のページを参考にしてください。

Choreonoid入門

はじめに

Choreonoidはオープンソースのロボット用シミュレーションソフトウェアです。 拡張性が高く、物理エンジン、通信機能、スクリプティング機能、制御アルゴリズム等をC++プラグインとして追加できます。

このページでは、Choreonoidシミュレータ上の移動ロボットの入出力を行うRTCの作成手順を説明します。

choreonoidtutorial1_1.png

Choreonoidの起動

講習会の実習の場合はUSBメモリ等で資料を配布しているため、USBメモリ内のchoreonoidフォルダ内のchoreonoid.batをダブルクリックして起動してください。

アイテムの追加

Choreonoid上で以下のアイテムを追加してシミュレーション環境を構築します。

 World(ワールドアイテム)
   |-AISTSimulator(AISTシミュレータ)
   |-Floor(model/misc/floor.body)
   |-RaspberryPiMouse(model/RaspberryPiMouse/RaspberryPiMouse.body)
       |-RaspberryPiMouseIo(PyRTC)
   |-RobotController(RTC)
   |-RTSystem

ワールド追加

Choreonoidで仮想世界を表現するワールドアイテムを追加します。 ボディモデル等の各アイテムはワールドアイテムと関連付けする必要があります。

「ファイル」->「新規」->「ワールド」をクリックしてWorldを追加してください。

choreonoidtutorial1_2.png

名前は変更せずに生成します。

ワールドアイテムが追加されると、アイテムビューにWorldが表示されます。

choreonoidtutorial1_3.png

シミュレータ追加

Choreonoidは複数のプラグインから使用する物理エンジンを選択することができます。 Choreonoid本体でサポートしているプラグインとしては、AISTシミュレータ、ODE, Bullet, PhysXが使用できます。

今回はAISTシミュレータを追加するため、「ファイル」->「新規」->「AISTシミュレータ」をクリックしてください。

choreonoidtutorial1_4.png

名前は変更せずに生成します。

AISTシミュレータアイテムが追加されると、アイテムビューにAISTSimulatorが表示されます。

地面追加

地面を表現するボディアイテムを追加します。 「ファイル」->「読み込み」->「ボディ」をクリックしてください。

choreonoidtutorial1_5.png

「ボディ読み込み」の画面でfloor.bodyを選択します。 左側のshareをクリックして、share/model/misc/floor.bodyのファイルを選択してください。

choreonoidtutorial1_6.png

アイテムが追加されると、アイテムビューにFloorが表示されます。

Raspberry Piマウス追加

Raspberry Piマウスを表現するボディアイテムを追加します。 先ほどと同じ手順で「ファイル」->「読み込み」->「ボディ」をクリックしてください。

「ボディ読み込み」の画面でRaspberryPiMouse.bodyを選択します。 左側のshareをクリックして、share/model/RaspberryPiMouse/RaspberryPiMouse.bodyのファイルを選択してください。

choreonoidtutorial1_7.png

アイテムが追加されると、アイテムビューにRaspberryPiMouseが表示されます。

また、シーンビューにRaspberryPiマウスの3Dモデルが表示されます。

choreonoidtutorial1_8.png

RTSystem追加

Choreonoid上でRTSystemEditorの一部機能を使用するためのRTSystemアイテムを追加します。 「ファイル」->「新規」->「RTSystem」をクリックしてください。名前の変更は不要です。

choreonoidtutorial1_9.png

アイテムが追加されると、アイテムビューにRTSystemが表示されます。

ネームサーバー、システムエディタ表示

この時点でChoreonoid上にネームサーバー、システムエディタは表示されていません。

まずネームサーバーを表示するには、「表示」->「ビューの表示」->「RTC List」をクリックします。

choreonoidtutorial1_10.png

これでプロパティ、リンクプロパティの右にRTC Listタブが表示されます。

choreonoidtutorial1_11.png

システムエディタを表示するには、「表示」->「ビューの表示」->「RTC Diagram」をクリックします。

choreonoidtutorial1_12.png

これでシーンの右にRTC Diagramタブが表示されます。

choreonoidtutorial1_13.png

RobotControllerコンポーネント追加

以下のページで作成したRobotControllerコンポーネントをシミュレータで利用可能にします。

RTCを表現するRTCアイテムを追加してください。

「ファイル」->「新規」->「RTC」をクリックします。

choreonoidtutorial1_14.png

名前をRobotControllerに変更します。

choreonoidtutorial1_15.png

アイテムが追加されると、アイテムビューにRobotControllerが表示されます。

RobotControllerコンポーネントの設定

次にRobotControllerComp.exeとRobotControllerアイテムを関連付けます。 アイテムビューからRobotControllerを選択して、プロパティからRTC moduleを設定します。

choreonoidtutorial1_16.png

「ファイルを選択」の画面でRobotControllerComp.exeを選択します。 初期の状態だと拡張子dllのファイルしか表示しないため、ファイルの種類を全てのファイル (*) に設定してからファイルを選択してください。

choreonoidtutorial1_17.png

RaspberryPiMouseIoコンポーネント追加

PythonのRTCをChoreonoid上で起動するため、PyRTCアイテムを追加します。

「ファイル」->「新規」->「PyRTC」をクリックします。

choreonoidtutorial1_18.png

名前をRaspberryPiMouseIoに変更します。

choreonoidtutorial1_19.png

アイテムが追加されると、アイテムビューにRaspberryPiMouseIoが表示されます。

RaspberryPiMouseIoコンポーネント作成

ここからはRTC Builderで作業します。

以下の仕様のRTCを作成してください。

基本
コンポーネント名 RaspberryPiMouseIo
アクティビティ
なし
データポート(OutPort)
なし
データポート(InPort)
ポート名 velocity
データ型 RTC::TimedVelocity2D
コンフィギュレーション
なし
言語・環境
言語 Python

RaspberryPiMouseIo.pyの編集

コード生成すると、RaspberryPiMouseIo.pyが作成されるのでこのファイルをVisual Studio CodeやIDLEなどで編集します。

RaspberryPiMouseIoクラスにsetBodyoutputToSimulatorinputFromSimulatorのメンバ関数を追加します。

setBody関数はRTC側でChoreonoidのボディオブジェクトを取得する関数です。 取得したBodyオブジェクトからLinkオブジェクトを取得することで、対象のJointの入出力ができます。

outputToSimulator関数は、シミュレータ上のオブジェクトから取得したデータをOutPortから出力する処理を行う関数です。

inputFromSimulator関数は、InPortの入力データをシミュレータ上のオブジェクトに入力する処理を行う関数です。

各関数は、シミュレーション実行時に以下の図のような順序で呼ばれます。

choreonoidtutorial1_20_2.png

RaspberryPiMouseIo.pyに以下のコードを追加してください。 Pythonなので、インデントには注意してください。「def ~」を「# def onRateChanged~」のインデントに合わせる必要があります。

    # def onRateChanged(self, ec_id):
    #
    #    return RTC.RTC_OK
    
    def setBody(self, body):
        self.ioBody = body
        self.wheelR = self.ioBody.link("RIGHT_WHEEL")
        self.wheelL = self.ioBody.link("LEFT_WHEEL")
    
    def outputToSimulator(self):
        pass
    
    def inputFromSimulator(self):
        if self._velocityIn.isNew():
            data = self._velocityIn.read()
            
            vx = data.data.vx
            va = data.data.va
            
            wheel_distance = 0.0425
            wheel_radius = 0.04
            rms = (vx + va*wheel_distance)/wheel_radius
            lms = (vx - va*wheel_distance)/wheel_radius
            
            self.wheelR.dq = rms
            self.wheelL.dq = lms

RaspberryPiMouseIoコンポーネントの設定

Choreonoidでの作業に戻ります。 アイテムビューからRaspberryPiMouseIoを選択して、プロパティからRTC Moduleを設定します。

choreonoidtutorial1_21.png

「ファイルを選択」の画面で先ほど編集したRaspberryPiMouseIo.pyを選択します。

choreonoidtutorial1_22.png

※RaspberryPiMouseIo.pyを更新した場合は、再度この作業を行う事で再読み込みしてください。

アイテムの位置関係を確認

アイテムビューで、全てのアイテムはワールドアイテムの子アイテムとして配置する必要があります。 また、RaspberryPiMouseIoRaspberryPiMouseの子アイテムとして配置します。

 World
     |- AISTSimulator
     |- Floor
     |- RaspberryPiMouse
     |     |- RaspberryPiMouseIo
     |- RobotController
     |- RTSystem

位置関係が違う場合はドラッグアンドドロップして移動してください。

choreonoidtutorial1_23.png

ポート接続

起動したRTCのポートを接続します。

この時点でRobotController0RaspberryPiMouseIo0が起動していますが、RTC Listに表示が無い場合は「Update」ボタンを押してください。

RTC ListからRTCをRTC Diagramにドラッグアンドドロップして、以下のポートを接続してください。

InPort OutPort
RobotController0 out RaspberryPiMouseIo0 velocity

choreonoidtutorial1_24.png

RobotControllerコンポーネントのアクティブ化

RTCアイテムにexeファイルを設定した場合はRTCを自動でアクティブ化しないため、RTC Diagram上でRobotController0を右クリックして「Activate」を選択してください。 ※RaspberryPiMouseIo0はシミュレーションを開始すると自動的にアクティブ状態になるため操作の必要はありません。

choreonoidtutorial1_25.png

シミュレーション開始

「初期位置からのシミュレーション開始」ボタンを押すとシミュレーションを開始します。

choreonoidtutorial1_26.png

シーンタブに切り替えるとシミュレーションを3DCGで表示します。

choreonoidtutorial1_27.png

コンフィギュレーションパラメータの編集

Choreonoid OpenRTMプラグインにはコンフィギュレーションパラメータ編集機能がないため、RTSystemEditorで作業します。

ネームサービスビューでRobotControllerを選択して、コンフィギュレーションビューから「編集」ボタンを押して、コンフィギュレーションパラメータを変更してみてください。

choreonoidtutorial1_28.png

Choreonoidで表示したRaspberry Piマウスが移動しているか確認すれば完了です。

ネームサービスビューにlocalhostと表示されていない場合については、以下のようにネームサービス接続ボタンを押して、localhostのネームサーバーに接続してください。

/ja/node/6550
choreonoidtutorial1_30.png