[openrtm-users 02525] JVM系言語によるRTコンポーネントの実装について

openrtm-users メーリングリストのみなさま

エスエフシーの朝日通晴と申します。

すでに、graspPlugin for Choreonoid のサイトに下の記事

RTコンポーネントを Jython で動かす
http://choreonoid.org/GraspPlugin/i/ja/node/45

を上げていますが、これを改良した方法と、Jython 同様に JVM上で動作する言語 JRuby と Scala による方法をブログにまとめています。
お役に立てば幸いです。

* Jython
[RTC][Jython]RTC Builder を使って Jython で動くRTコンポーネントを作る
http://d.hatena.ne.jp/thegoodbadugly/20111104/1320401280

* JRuby
[RTC][JRuby]JRubyで動くRTコンポーネントを作る
http://d.hatena.ne.jp/thegoodbadugly/20120423/1335170735

[RTC][JRuby]JRuby で動くRTコンポーネントを作り直す
http://d.hatena.ne.jp/thegoodbadugly/20120426/1335438698

* Scala
[RTC][Scala]Scala で動くRTコンポーネントを作る?
http://d.hatena.ne.jp/thegoodbadugly/20120426/1335436719

(Scala と JRuby の作り直し編ではまだ MyServiceProvider を実装していませんが、
近いうちに追加します)

基本的に、JVM上で動く言語ならOpenRTM-aist-Java を使ってRTコンポーネントを
書けるのではないかと思います。
ただし、目下のところ Scala で RtcDeleteFunc の実装クラスで rtcBase を解放する方法が
不明です。
良い方法があればご教授ください。

---
朝日通晴
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Undefined

Comments

[openrtm-users 02526] JVM系言語によるRTコンポーネントの実装について

朝日様

セックの池添と申します。
私も以前ScalaでRTコンポーネントを作ったことがあります。

> ただし、目下のところ Scala で RtcDeleteFunc の実装クラスで rtcBase を解放する方法が
> 不明です。
> 良い方法があればご教授ください。

JVMの場合、オブジェクトへの参照がなくなればGCによって自動的に
メモリが回収されるので、RtcDeleteFuncの中で特に解放処理を行う必要は
ないかと思います。

ちなみにrtcBaseは、RtcDeleteFuncメソッドの中だけのローカルなスコープの
変数なので、nullを代入しても呼び出し元には反映されません。
(Java版のサンプルでもnullを代入してますね)

> ExceptionCatcher トレイトは、onInitialize や onExecute で発生したエラーをコンソールに表示するためのものです。
>
> そもそも、RTコンポーネント内のエラーは捕捉しづらい。気がつくとRTシステムエディタ上でRTコンポーネントが
> 真っ赤になって、原因究明にえらい苦労します。

このtraitの使い方は面白いですね。

Python版ではonExecuteなどで例外が発生した場合、スタックトレースをログに
出してくれるので、Java版も同じようになるとうれしいですね。

以上です。

(2012/04/26 21:57), ASAHI, Michiharu wrote:
> openrtm-users メーリングリストのみなさま
>
> エスエフシーの朝日通晴と申します。
>
> すでに、graspPlugin for Choreonoid のサイトに下の記事
>
> RTコンポーネントを Jython で動かす
> http://choreonoid.org/GraspPlugin/i/ja/node/45
>
> を上げていますが、これを改良した方法と、Jython 同様に JVM上で動作する言語 JRuby と Scala による方法をブログにまとめています。
> お役に立てば幸いです。
>
> * Jython
> [RTC][Jython]RTC Builder を使って Jython で動くRTコンポーネントを作る
> http://d.hatena.ne.jp/thegoodbadugly/20111104/1320401280
>
> * JRuby
> [RTC][JRuby]JRubyで動くRTコンポーネントを作る
> http://d.hatena.ne.jp/thegoodbadugly/20120423/1335170735
>
> [RTC][JRuby]JRuby で動くRTコンポーネントを作り直す
> http://d.hatena.ne.jp/thegoodbadugly/20120426/1335438698
>
> * Scala
> [RTC][Scala]Scala で動くRTコンポーネントを作る?
> http://d.hatena.ne.jp/thegoodbadugly/20120426/1335436719
>
> (Scala と JRuby の作り直し編ではまだ MyServiceProvider を実装していませんが、
> 近いうちに追加します)
>
> 基本的に、JVM上で動く言語ならOpenRTM-aist-Java を使ってRTコンポーネントを
> 書けるのではないかと思います。
> ただし、目下のところ Scala で RtcDeleteFunc の実装クラスで rtcBase を解放する方法が
> 不明です。
> 良い方法があればご教授ください。
>
> ---
> 朝日通晴
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>

_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

[openrtm-users 02530] JVM系言語によるRTコンポーネントの実装について

池添さま

エスエフシーの朝日です。

お返事が遅くなりましたが、解説ありがとうございました。

>JVMの場合、オブジェクトへの参照がなくなればGCによって自動的に
>メモリが回収されるので、RtcDeleteFuncの中で特に解放処理を行う必要は
ないかと思います。
すると、deleteRtcメソッドは空で問題ないということですね。

>ちなみにrtcBaseは、RtcDeleteFuncメソッドの中だけのローカルなスコープの
>変数なので、nullを代入しても呼び出し元には反映されません。
おっしゃる通りですね。
C++なら、数は (RTObject_impl * rtcBase)などとなって、*rtcBase=NULL;
でオブジェクト参照を切れますが、Java で引数にnullを代入しても呼び出し元には何の変化もないですね。

これをもとに、ブログの方も修正します。
あらためて、ありがとうございました。

>このtraitの使い方は面白いですね。
>Python版ではonExecuteなどで例外が発生した場合、スタックトレースをログに
>出してくれるので、Java版も同じようになるとうれしいですね。
Jythonで作ったRTCがtry 〜 except 地獄に落ちて、いまいちな感じになったので、trait の使い方を見てこれだ!
と思いました。Better Javaとはこういうことかと。
Java ではさしあたり AspectJ などを使うんでしょうか?

---
朝日通晴
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Download

latest Releases : 2.0.0-RELESE

2.1.0-RELESE Download page
2.0.1-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK