ダウンロード
最新バージョン : 2.1.0-RELESE
| 2.1.0-RELESE | ダウンロードページ |
OpenRTM@Github
OpenRTM-aist GitHubサイト
ROS
Robot Operating System
Choreonoid
モーションエディタ/シミュレータ
DAQ-Middleware
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
産総研が提供するRTC集
東京オープンソースロボティクス協会
| 2.1.0-RELESE | ダウンロードページ |
OpenRTM-aist GitHubサイト
Robot Operating System
モーションエディタ/シミュレータ
ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク
産総研が提供するRTC集
東京オープンソースロボティクス協会
RTコンポーネントのクロスコンパイル
ここでは、Armadillo上で実行するRTコンポーネントのビルド方法をについて説明します。 コンポーネントのビルドは、旧式 (RTCBuilder-1.0) のMakefileベースの方法と、新式 (RTCBuilder-1.1以降) のCMakeベースの方法の2通りがあります。
Makefile がすでにある場合(旧式)
古いRTCBuilderで生成したコンポーネントには、UNIX系システム用のMakefileが付属していました。この場合は、非常に簡単で、環境変数CXXにarm用コンパイラ /usr/bin/arm-linux-gnu-g++ を指定するだけでも可能です。
ただし、ATDE2 for OpenRTM-aist に付属の rtc-make-cross を使用すると、Armadillo-400シリーズでRTコンポーネントをビルドするときなども、同じ方法でビルドが可能です。 ここでは、rtc-make-cross を使用した方法について説明します。
OpenRTM-aistに付属のサンプルコンポーネント SeqOutComp を例に、ソースからクロスコンパイルしてみます。
ソース (SeqOutComp) のコピー
OpenRTM-aistをインストールすると ${prefix}/share/openrtm-x.y/example/src 以下にサンプルコンポーネントのソースコードがインストールされます。 ATDE2 for OpenRTM-aist では、/usr/arm-linux-gnu/share/openrtm-1.1/example/src/ 以下にソースコードがインストールされています。これをコピーします。
ディレクトリにはSeqInComopとSeqOutCompのソースコードが含まれています。
rtc-make-crossによるビルド
ここで、コンポーネントをビルド剃るには rtc-make-cross を使用します。 ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
-h オプションで rtc-make-cross のヘルプを見てみます。
atmark@atde:~/tmp/SeqIO$ rtc-make-cross -h Usage: rtc-make-cross -a <arch_name> [make options] -a target architecture name -h print this help Available architectures: arm powerpc-a オプションでターゲットのアーキテクチャを指定して、makeコマンドの代わりに使用します。利用できるアーキテクチャのキーワードはここでは、arm と powerpc の2種類のようです。 rtc-make-cross は環境にインストールされているクロス開発環境を調べて、どのアーキテクチャのクロスコンパイルが可能かをヘルプで表示します。 ATDE2はデフォルトで arm と powerpc 用のクロス開発がインストールされているので、このように表示されます。Armadillo-200シリーズ用の実行ファイルは arm アーキテクチャとしてコンパイルする必要がありますので -a arm というオプションを指定します。
また、SeqOutComp をコンパイルするには Makefile.SeqOut という Makefile を使用します。makeコマンドでは特定のMakefileを指定するには -f オプションを使用しますので、-f Makefile.SeqOutを指定します。
作成された SeqOutComp というファイルがSeqOutCompコンポーネントの実行ファイルです。
USBメモリファイルセットの作成
作成されたコンポーネントをUSBメモリへコピーします。USBメモリへのコピーには、ATDE2 for OpenRTM-aist に付属の rtc2usbmem コマンドを使用します。
ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
rtc2usbmemコマンドは、指定したRTコンポーネントとその依存ライブラリを探して、指定したディレクトリへコピーします。また、Armadilloに挿入した際にRTCを自動起動するためのブートスクリプトとrtc.confも指定ディレクトリへコピーします。 RTCが依存するライブラリを調べ、一つ一つコピーする必要が無いので、非常に簡単にArmadilloに挿入するUSBメモリファイルセットを作成することができます。
-hオプションを指定してヘルプを見てます。
atmark@atde:~/tmp/SeqIO$ rtc2usbmem -h Usage: rtc2usbmem -d <dir> -r <rtc> -l <libdir> This script creates a directory to be copied to USB memory for Armadillo execution environment. One or more RTCs can be specified by -r and are copied to rtc directory. Dependent libraries are automatically analyzed and copied to lib directory. boot.sh to launch RTCs and rtc.conf for RTCs are also created. -a Target architecture name -d <dir> Target directory -r <rtc> Target RTC binary -l <libdir> Library search path -x Do not copy RTM related libraries -h Print this help Available architectures: arm powerpc EXAMPLE $ cd my_component_dir $ ls mycomponent mycomponent.so $ rtc2usbmem -d /tmp/usbmem -r mycomponent -l . -l ../deplibdirオプションの意味は以下のとおりです。
必須なのは、RTCを指定する -r オプションです。ここでは、ホームディレクトリに seqout というディレクトリを作成しそこに必要なファイルセットをコピーすることにします。 実行結果は以下のようになります。
コピーされたファイルを見てみます。
libディレクトリに依存ライブラリ、rtcディレクトリにRTコンポーネントがコピーされています。
このディレクトリをUSBメモリにコピーしてArmadilloに挿入すると、コンポーネントが自動的に起動します。
CMakeList.txt がある場合 (新式)
コンポーネントのトップディレクトリにCMakeList.txtがある場合は、RTCBuilder-1.1以降で作成されたコンポーネントになります。 ビルドにはCMakeを使用します。CMakeはMakefileやVisual C++用のプロジェクトファイル等様々なプラットフォームで様々なビルドシステムのためのファイルを生成するためのツールです。
Linux上では主にMakefileを生成するために使用されます。ビルド環境の様々な設定を判別し、最適なMakefileを生成します。コマンドは、バッチ的に処理するcmakeと、(テキストベースの)GUIで対話的に処理するccmakeの2つがあります。 RTコンポーネントのクロス開発には rtc-cmake-cross/rtc-ccmake-crossを利用します。
ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
なお、rtc-cmake-cross/rtc-ccmake-cross は中身はrtc-make-crossと同一です。名前を変えると、それぞれの名前どおりの動作を刷るようになっています。ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
-hオプションを与えてヘルプを見てみます。
Usage: rtc-cmake-cross -a <arch_name> [cmake options] -a target architecture name -h print this help Available architectures: arm powerpcターゲットアーキテクチャをしていする -a オプションを使用するところ以外は、使い方はcmakeとほとんど同じです。 rtc-make-cross同様、サポートしているアーキテクチャが arm と powerpc の2種類あることがわかります。
ソース (rtchokuyoaist) のダウンロード
ここでは、Geofrey Biggs氏作の rtchokusyoaist コンポーネントのビルドを例に取り説明します。 rtchokuyoaistコンポーネントは北陽電機製レーザ測域センサ URG シリーズ用のRTコンポーネントです。URGセンサとArmadilloを組み合わせることで、分散センサコンポーネントを容易に実現することができます。
rtchokuyoaistコンポーネントは次の3つのパッケージをコンパイルする必要があります。
上記のURLから、ZIPボタンを押してダウンロードしてください。
tmark@atde:~/tmp/rtchokuyoaist$ ls gbiggs-flexiport-7ff727e.zip gbiggs-hokuyoaist-3.0.1-0-g69df78b.zip gbiggs-rtchokuyoaist-2.0.0-12-g43f93c7.zip atmark@atde:~/tmp/rtchokuyoaist$ find ./ -name '*zip' -exec unzip {} \; atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-flexiport-7ff727e flexiport atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-hokuyoaist-69df78b hokuyoaist atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-rtchokuyoaist-43f93c7 rtchokuyoaistflexiportのビルド
まず、flexiport からビルドします。cmakeの習慣として build ディレクトリを作成し、その中でビルドします。
どうやらSphinxが足りないようです。ドキュメントは不要なので、BUILD_DOCUMENTATION 変数を OFFに設定してみましょう。
atmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ rtc-cmake-cross -a arm -DBUILD_DOCUMENTATION=OFF ../ Target architecture is arm (arm-linux-gnu) : 中略 -- Configuring done -- Generating done CMake Warning: Manually-specified variables were not used by the project: CMAKE_TOOLCHAIN_FILE -- Build files have been written to: /home/atmark/tmp/rtchokuyoaist/flexiport/build-cross Configure done. Type 'make' and build program.今度はうまくいったようです。Makefileができたのでmakeします。
これで、libflexiport.so というライブラリファイルが出来ました。 これをシステムのクロス開発環境にインストールします。
hokuyoaistのビルド
flexiport同様にrtc-cmake-crossを実行、ライブラリをビルドします。
これもライブラリなので、インストールします。
rtchokuyoaistのビルド
最後にRTコンポーネントであるrtchokuyoaistをビルドします。
おや、エラーが出ました。missing OPENRTM_INCLUDE_DIR COIL_INCLUDE_DIR とあるので、これらの変数が上手くセット出来なかったようです。 それぞれOpenRTMとcoilのインクルードディレクトリなので場所は以下のとおりになります。
ですので、以下のように変数を指定します。
あるいは、ccmake を利用して対話的にこれらの変数を与えることもできて、
のように rtc-ccmake-crossを実行して、ccmakeを起動します。
OPENRTM_INCLUDE_DIR、COIL_INCLUDE_DIRそれぞれの場所でReturnキーを押して、パスを入力します。 cを押しconfigureをします。cを再度押し、次にgを押してMakefileを生成 (generate) します。最後にeを押して対話画面を抜けます。 これで、Makefileが生成されているはずですので、makeします。
USBメモリファイルセットの作成
上述の SeqOutComp と同様 rtc2usbmem コマンドを使って、USBメモリにコピーするためのファイルセットを作成します。ターゲットディレクトリは ~/rtchokuyo とします。
ご覧のように、rtchokuyoaist コンポーネントの依存ライブラリである、libflexiport.soやlibhokuyoaist.soなどもコピーされています。
~/rtchokuyo ディレクトリ以下のファイルをUSBメモリにコピーし、rtc.confを編集してからArmadilloに挿入するとコンポーネントが起動します。
次章では、USBメモリファイルセットを実際にUSBメモリにコピーしコンポーネントを起動してみます。