MacOSX + OpenRTM-aist

MacでOpenRTM-aistを入れるためのバイナリを作ってみた.

最新版は僕の会社のページに移動させたのでそっちを見て欲しい

1.Xcode入れる

これは避けられない.AppStoreからXcode 5.1を入れてください.

2.XcodeのCommand Line Toolsをインストールする.

ここからインストールできます.Apple Developerの登録が必要になりますが.Gitとか,GCCとか入るから入れてください.

参考:
MavericksでCommand Line Tools for Xcodeをインストールする

3.以下のファイルをダウンロード

http://www.cmake.org/files/v2.8/cmake-2.8.11.2-Darwin64-universal.dmg
http://sugarsweetrobotics.com/pub/Darwin/doxygen/Doxygen-1.8.3.1.dmg
http://sugarsweetrobotics.com/pub/Darwin/pkgconfig/PkgConfig.dmg
http://sugarsweetrobotics.com/pub/Darwin/OpenRTM-aist-C++-1.1.1RELEASE-OSX10.9.dmg

4.がんがんインストール

cmakeはRTCのビルドに必要.インストールの途中でコマンドラインから実行できるよう,インストールしますか?と訪ねられるので,このときは必ずコマンドラインのツールをインストールする.でないと不便.

PkgConfigは,cmakeするのにインストールする必要がある.

Doxygenはおまけだけど,インストールした方が絶対便利.

OpenRTM-aistは,バイナリを/usr/local/にインストールする.Python用のバイナリも入れてくれる.

んで,ホームディレクトリに移動して,.bash_profileというファイルを作成して,これに以下のスクリプトを書く

export RTM_ROOT=/usr/local/include/openrtm-1.1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages
export CMAKE_PREFIX_PATH=/usr/local/lib/openrtm-1.1/cmake:$CMAKE_PREFIX_PATH

すぐに反映させたいときは,source ~/.bash_profileと打つ.

5.ツール入れる

あとは,EclipseをOpenRTM.orgからダウンロードすればいい.
初めてEclipseを実行するときは,Javaのインストールを要求されるので入れる.

Eclipseはコマンドラインから起動しないと,RTM_ROOTの環境変数が適用されないので上手く行かない.
OSX10.9からは,~/.launchd.confを使う.
このファイルを作成して,
export RTM_ROOT=/usr/local/include/openrtm-1.1
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

と書いておけば良い.もちろん再ログインが必要.

6.Python版入れる

Python版は,Python版のソースコードをダウンロードして,sudo python setup.py installすればいい.
svnが入ってなければ,ググって入れてください.たぶんデフォルトで入ってる.
んで,

適当なディレクトリで・・・

svn co http://svn.openrtm.org/OpenRTM-aist-Python/trunk/OpenRTM-aist-Python
cd OpenRTM-aist-Python
python setup.py build
sudo python setup.py install

omniORBpyのバイナリはC++版をインストールした時に入る.バイナリへのPATHは.bash_profileを変更した時に反映されてる.

omniORBが見つからないというエラーになった場合は,omniORBのバイナリとかPythonライブラリを,Pythonの元のライブラリパスに入れてやる.

sudo cp -R /usr/local/lib/python2.7/site-packages/ /Library/Python/2.7/site-packages/

portsを使ってると,もうよくわかんなくなる.Pythonが3つとか入ってるのは面倒すぎます.

7.Java版入れる

Java版はここからダウンロード.
http://sugarsweetrobotics.com/pub/OpenRTM-aist/OpenRTM-aist-Java-1.1RC1.zip
RTM_JAVA_ROOTを展開したディレクトリ内のOpenRTM-aist-1.1.jarファイルをさすように.bash_profile設定する.
実行時やビルド時にclasspathの設定が必要になる.
Java版は,結構,Javaの知識がないと苦しいが,Javaに強い人は山ほどいるので,ここではあんまり説明しないよん.
エラーコードとかググればすぐ出てきます.経験してください.

8.rtshell入れる.Python版は必須.

pyyamlを入れる.
http://pyyaml.orgからソースコードをダウンロードして,sudo python setup.py installでおしまい.
pipやeasy_installから入れるのはおすすめしない.現状でpipとXcodeの相性がよくない.

このあとrtshellを入れる.gitがあるのでそれで入れてくことにしよう.

git clone https://github.com/gbiggs/rtctree.git
cd rtctree; sudo python setup.py install

git clone https://github.com/gbiggs/rtsprofile.git
cd rtsprofile; sudo python setup.py install

git clone https://github.com/gbiggs/rtshell.git
cd rtshell; sudo python setup.py install

ドキュメントをビルドするか?という問いにはyesの方がいいだろう.
んで,.bash_profileに以下のコードを追記.

source /System/Library/Frameworks/Python.framework/Versions/2.7/share/rtshell/shell_support

もちろん,portsが入ってるとよくわからなくなる.

shell_supportというファイルが無いと,rtcwdコマンドが動作しないので注意.この設定は外せない.
git cloneしたディレクトリ内にあるので,それをさすように設定するのも次善の策として知っておくと良い.

9.RTCの作り方

オフィシャルのドキュメントを書いてますんでこちらへ.
http://openrtm.org/openrtm/en/node/5125

10.Mac版でのトラブル

A. ネットワーク系のトラブルが多い.

まず,どのネットワークにも繋がっていない状態だと,localhostすら見つけられないことがある.
この場合,rtm-namingは起動するが,RT System Editorを起動しようとすると,localhostのネームサービスにつなげようとしてブロックされる.
できれば,RTSEの方でタイムアウトとかして欲しかった.
これはcorba.endpointを変更しても無理っぽい.

これについては,omniNamesを止めてからRT System Editorを起動する他なさそう.
うまくいくときもある.原因がわかったらメーリスに投げてほしい.

また,無線につなぎ直したりするとブロックする.
この場合は,killしまくるしか方法がない.

B. インターフェースが複数あるMacでは,当然のようにcorba.endpointの設定が必要になる.

これもやらなくても上手く行くときは上手く行く.

rtc.confに,

corba.endpoint : localhost

のような記述が必要になる.他のPCと連携する場合は,endpointを外側のIPアドレスにする必要がある.
ネームサーバーにもエンドポイントを教える必要がある.

C. GUIはメインスレッドで

tkinterとか,opencvのUSBカメラとか,GUI系のライブラリとか,は,メインスレッドで動いていないと上手く行かない.
つまり,onActivatedでファイルとGUIを開いてー,なんてやるとハマる.
ここはかっこうわるいけど,**Comp.cppのmain関数の中で初期化したりするしか無いし,更新もここでやるようにする.
参考になるコードはここに置いとく.
共通カメラインターフェースのImageViewer
共通カメラインターフェースのWebCamera

D. ccがclangになってるので,厳しい

これはかなり厳しい.いろんなエラーがでるが,問題になるのは,生成されたRTコンポーネントのコード.
ModuleName.cppの最初の部分のヘッダーのインクルード順序を以下のようにする.

#include <rtm/idl/BasicDataTypeSkel.h> << 変更
#include <rtm/idl/ExtendedDataTypesSkel.h> << 変更
#include <rtm/idl/InterfaceDataTypesSkel.h> << 変更
#include <rtm/Manager.h>
#include <rtm/DataFlowComponentBase.h>
#include <rtm/CorbaPort.h>
#include <rtm/DataInPort.h>
#include <rtm/DataOutPort.h>

とにかく,データ型を定義しているヘッダーを先に置く.
もしIDL使って独自コードを置く場合も最初に生成された独自データ型.hを先にインクルードするように変更した方がいい.
上にあるWebCameraなんかも参考になる.

E. idl/CMakeLists.txt

RTCBが生成するこのファイルはエラーがある.
最後の4行を#でコメントアウトしたらなおる.

ただ,RTCBに関しては,EclipseからCheck for UpdatesでRTCBをアップデートするとなおるものもある.

Help > Install new softwareで選択して,「Add」ボタン押して,http://openrtm.org/pub/openrtp/releases/updates/を追加してOpenRTPをインストールすると最新版が入手しやすくなる.
これはやった方が良い.