openRTM


FrontPage

ubuntuでOpenRTM-aist-0.4.xを使用する

このページではRT-Componentは以下RTCと呼ぶことにします.
RTMの使用方法はOpenRTM-aist Official Web Siteを参照してください.


知りたいこと・気がついたことを何でも書いてください.

アナタのはてな『?』をここへ書いてください

アクションの関数と役割

onInitialize初期化処理 (一度だけ実行される)
onActivatedアクティブ化されるとき1度だけ呼ばれる
onExecuteアクティブ状態時に周期的に呼ばれる
onDeactivated非アクティブ化の時に1度だけ呼ばれる
onAbortingERROR状態に入る前に1度だけ呼ばれる
onResetエラー状態からリセットされ,非アクティブ状態に移行する時に1度だけ呼ばれる
onErrorERROR状態のときに周期的に呼ばれる
onFinalize終了時に1度だけ呼ばれる


データポートについて

OpenRTM-aist-0.2.0のときのデータポートについて記載しておく.
OpenRTM-aist-0.4.*ではデータポートについての詳細情報がないため同様と思われる.
(よく読んでないだけかもしれない・・・)

OpenRTM-aist-0.2.0のデータポート

TimedShort?タイムスタンプつき符号付Short Int 型
TimedLong?タイムスタンプつき符号付Long Int 型
TimedUShortタイムスタンプつき符号なしShort Int 型
TimedULongタイムスタンプつき符号なしLong Int 型
TimedFloat?タイムスタンプつきFloat 型
TimedDouble?タイムスタンプつきDouble 型
TimedChar?タイムスタンプつきChar 型
TimedBoolean?タイムスタンプつきBoolean 型
TimedOctet?タイムスタンプつきOctet 型
TimedString?タイムスタンプつきString 型
TimedShortSeq?タイムスタンプつき符号付Short Int シーケンス型
TimedLongSeq?タイムスタンプつき符号付Long Int シーケンス型
TimedUShortSeq?タイムスタンプつき符号なしShort Int シーケンス型
TimedULongSeq?タイムスタンプつき符号なしLong Int シーケンス型
TimedFloatSeq?タイムスタンプつきFloat シーケンス型
TimedDoubleSeq?タイムスタンプつきDouble シーケンス型
TimedCharSeq?タイムスタンプつきChar シーケンス型
TimedBooleanSeq?タイムスタンプつきBoolean シーケンス型
TimedOctetSeq?タイムスタンプつきOctet シーケンス型
TimedStringSeq?タイムスタンプつきString シーケンス型


rtc-templateによるコンポーネントの雛形作成

問題内容:OpenRTM0.4.2をソースからインストールした場合に、公式サイトに載っている「コンポーネントのスケルトンの作成」ができない。

CUIを用いてコンポーネントの雛形が作成されない場合,OpenRTMのインストールが失敗している可能性があります.
特に,ソースコードからインストールされたとのことなので,OpenRTMを使用するために必要なパッケージはインストール済みでしょうか?
buildのディレクトリの中にあるシェルスクリプトからもう一度必要なパッケージを入れて,再度コンパイルをしてみてください.
サンプルが実行できる状態でこの問題に当たっているということであれば別途対処が必要になりますが...


データポートのデータ型について

質問内容:データポートってのは、RTMにおける変数の型みたいなものと解釈してよいのでしょうか?

OpenRTM-aistはCORBAで実装されており,CORBA経由で変換可能な型として上記のものを定義しているそうです.
データポートの型としては上記のものを使用することができると思います.
ソースコードを記述する際には一般的な変数型を使用することができますが,データポートに値を格納する際には型の一致を意識する必要はあると思います.
rtc-templateではデータポートに必要な宣言は既に記述された状態で雛形を生成します.
データポートは複数持つことができ,各々名前をつけることができます.
外部のコンポーネントはその名前によりデータポートを特定します.
一応ユーザ独自の型も作ることは可能だそうです.

データポートのタイムスタンプについて

質問内容:データポートはみんなタイムスタンプが付いているようですが、 タイムスタンプが付いている意味はなにかあるんですか?

現在のOpenRTMではリアルタイム性が保証されていないと聞いています.
タイムスタンプはデータの生成時刻が記述されるそうで,データの鮮度を見ることができるようです.
明確な使用方法は記載されていないので,わかり次第お伝えしていきたいと思います.
※リアルタイム性:定められた時間要件を満たして動作する性質

OpenRTM-aist-0.4.1

omniORBのバージョンについて

  • omniORB4.0.7に対応(omniORB-4.1.xは未対応)
  • omniORB4.0.7はubuntu7.1.0で標準になっている.
  • ubuntu8.04にアップグレードする際は注意が必要.

RtcLink?について

  • OpenHRP3.0.0-RC3ではBridgeを介してRTCと接続するが, その際にRtcLink0.4.0ではエラーダイアログが複数表示される.
    RtcLink0.4.1では対応済み.
  • OpenRTM-aist-0.4 Javaを使う場合には,必ずRtcLink0.4.1を使用すること.


OpenRTM-aist-0.4.2

  • 2008年5月21日リリース(C++).
  • omniORB-4.1.x (CORBA C++ mapping 1.1)への対応
    omniORB-4.0.7でも使えるハズ.
  • 対応しているUbuntuのバージョン
    Ubuntu 6.10
    Ubuntu 7.04
    Ubuntu 7.10
    Ubuntu 8.04
  • omniORB4.1.2はubuntu8.0.4の標準になっている.

    ROBOMEC2008講習会でwindows版(C++)が使用される.

OpenRTM 0.4.2をデフォルトの場所以外にインストールした場合の問題

スケルトン作成スクリプトgen.sh

#!/bin/sh
rtc-template -bcxx \
   --module-name=SamplePD --module-desc='SamplePD component' \
   --module-version=0.1 --module-vendor=AIST --module-category=Generic  \
   --module-comp-type=DataFlowComponent --module-act-type=SPORADIC  \
   --module-max-inst=1 \
   --inport=angle:TimedDoubleSeq --outport=torque:TimedDoubleSeq

を実行するとエラーが出る。

解決策1
rtc-templateの中でrtc-configを呼んでいる部分があるので、
そこの部分でrtc-configのパスを書いて追加してあげればよい。
例えばこのように書く。

rtm_path_root="OPENRTMのホームディレクトリ"
libdir_path = os.popen(rtm_path_root + "/bin/" + "rtm-config --libdir", "r").read()


解決策2
rtc-templateの存在するディレクトリにパスを通す
そうすればrtc-templateを書き換える必要は無い

FedoraCore6

真っ当な方法

buildディレクトリの下のfedora用スクリプトでインストールすれば問題ない。

Ubuntu用OpenRTMパッケージからFedora用OpenRTMパッケージを無理矢理作る方法

Fedora6用のRTMのパッケージを落としてインストールしようとしたら、
aceの依存関係ではじかれた。
その上aceのFedora用パッケージが見つからない。

1, ubuntuのaceパッケージlibace.devを落とす
2, ubuntuのrtmパッケージをおとす
3, alienコマンドでrpmパッケージに変換する
4, インストール

# rpm -ivh パッケージ名

5, 理由は不明だが~ シンボリックリンクlibace.soのリンク先が見当たらないので
Ubuntuの入っているPCからコピーする。
6, その他エラーがでる場合には、それぞれ潰していく
エラー文を読めばきっと分かる

やってみた感想:きっとソースでやる方がお利口、でも為せばなるんだなあ


RTCを開発するコツ

  • まず,普通に.cppと.hを作り,コアロジックにあたる部分を作成する.
  • 作成した.cppと.hの動作チェック
  • 完成した.cppと.hをコンポーネント内で呼び出して使用する.

CORBA通信でRTCのポートにアクセスする方法

RTCのPortにconnectをする際に,
そのポート自身のオブジェクトリファレンスのみ をConnectorProfile?にセットしてconnectする.

そうすると、戻ってきたConnectorProfile?::propertiesの中に、
port.[Service Type].[Service Name]
というキーでCORBA::Any型でオブジェクトリファレンスが入っている.
それを、使用したいサービスの型にnarrowすればいいらしい.

サンプルの掲載はもうしばらくお待ちください.

OpenRTM-aistのバグ

OpenRTM-aist-0.4.1

データポートのバグ

  • 一つのOutPort?から複数のInPort?へ接続すると適切なデータが送られない.

OpenRTM-aist-0.4.2

Windows版のバグ

  • コードジェネレータ等バグあり.
    修正版は公開されていません.
    OpenRTMのMLに入っていない方で,修正版が欲しければJRLの学生へ問い合わせてください.
    修正版が公開されました.

デフォルトの場所以外にインストールした場合のバグ

OpenRTM 0.4.2をデフォルトの場所以外にインストールした場合の問題点
解決例

OpenRTM-aist-1.0.0へ向けて

リリース予定時期

12月初め頃


データポートについて

TimedChar?型およびTimedCharSeq?型を廃止する方向で動いているらしい.
使用している場合は注意.
ちなみに,使用できなくなるわけではなく,自分で記述すれば使用可能.

最新の20件

2020-11-14 2009-06-06 2009-05-11 2009-03-25 2009-03-24 2009-02-27 2008-12-03 2008-11-03 2008-10-29 2008-08-17 2008-08-13

今日の7件

  • counter: 411
  • today: 1
  • yesterday: 0
  • online: 1