Mac OSX + OpenRTM-aistパッケージ

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

当然ですが,このパッケージやドキュメントで起きた不具合や損失等について,当社と当社の技術者は一切の責任を負いかねます.ご自身の責任でご利用いただける方のみお使いください.

1.Xcode入れる

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

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.2-OSX10.9.dmg

RTM1.1.2にアップグレードするときの注意

古いバージョンから新しいOSX版をインストールする場合は,まず/usr/localを掃除する必要がある.特に/usr/local/lib/python2.7/site-packagesのomniORB関連ファイルはすべて消すこと.
古いファイルがあるとバッティングする.
さらに,このバージョンにアップデートすると,Python版OpenRTM-aist, rtctree, rtsprofile, rtshellはインストールし直す必要がある.

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すればいい.
Python版の最新コードは,svnでダウンロードする.以下のような流れになるとおもう.

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

source /Library/Python/2.7/site-packages/rtshell/data/shell_support

pipからも入るらしいが,一時期,何度も失敗したのであまり信用してない.
あと,rtctreeのバグとりは随時進んでるので,その意味でも最新のコードを使ったほうがいい.Macならそれほど苦じゃないからね.

もちろん,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を変更しても無理っぽい.とにかく,外部ネットに繋がっているMacでしかRTMは使えない.

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

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

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

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

rtc.confに,

corba.endpoint : localhost:

のような記述が必要になる.他のPCと連携する場合は,endpointを外側のPCと繋がる側のインターフェースのIPアドレスにする必要がある.
ネームサーバーにもエンドポイントを教える必要がある.
こういうのを自動的に,という人は,気持ちはわからない.逆に自動的にやっちゃってることが不自然だと思わないのか・・・

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

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

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をインストールすると最新版が入手しやすくなる.
これはやった方が良い.

One thought on “Mac OSX + OpenRTM-aistパッケージ

Leave a Reply

Your email address will not be published. Required fields are marked *