忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[49]  [50]  [51]  [52]  [53]  [54]  [55]  [56]  [57]  [58]  [59
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

もしもコンテストに参加している人が見ているのであれば、僕のマニュアル、プロジェクトページ、ソースコードは参考にはしない事をお勧めします。
もっといい手本はいくらでもあります。
マニュアルはRTC-scilabのものが参考になると思います。
プロジェクトページはATDE for OpenRTM-aistが面白いです。
ソースコードは言語もいろいろあるので正直どれがというのはありません。
OpenRTM-aistのソースコードが一番参考になるかもしれません。



そういえば10月31日以降に投稿すると減点とからしいけど、賞によって審査基準は違うと思うので何を減点するのかよくわかりません。
むしろ他の参加者よりかなり早く投稿したのだから大幅に加点してほしいです。
100点満点で80点ぐらい加点するぐらいでちょうどいいハンデです。




とりあえずマニュアルを見直してみます。
はじめにのページですが何かどれをダウンロードすれば良いのか分かりづらいような感じもしなくもないです。
とりあえずOpenRTM-aist-Pythonのインストールの手間を考えるとApache OpenOffice 3.4.1対応版のインストールを推奨したいですし、Ubuntuの場合は全部入りセットをダウンロードしてほしいのですが何か分かりづらいかもしれないです。
申し訳程度に補足はしておきましたのでこれで勘弁してください。

次に概要のページですが、何か見づらい。
特に改善案もないので保留しておきます。

動作環境のページは・・・枠とかで区切った方が良いのですかね?

Windowsでの依存ソフトウェアのインストールのページはどうしましょうね?
Ubuntuでの依存ソフトウェアのインストールのページはやや投げやりなので何とかする必要がありそうです。

一括インストールのページはWindowsUbuntuに分けました。
これで多少ましかもしれません。

Apache OpenOffice 4系でのインストールのページはとにかくOmnioRBpyとOpenRTM-aist-Pythonのインストールが最大の難関なのですが、その辺の説明が雑な感じがします。
僕もインストールの過程でどんなトラブルが起こるかわからないので、それがわかればいろいろ書けるので何か不具合のあった人はコメント欄に書いていただけるとありがたいです。

このページ等の個別のインストール方法の説明のページは、他のページ同様見づらいですね。

仕様のページはどれも説明不足なので少し補足しておきました。

使い方のページは、何というかどれも雑多な感じになっているなあとは思いました。
小学生並みの感想ですけど。

チュートリアルはとにかくもう少し数を増やしたいとは思います。


なんだかいろいろ言った割にはあまり改善できてません。
もう少し考えてみます。


今ちょっと気になったのですが、どうにもアプローチの方法が間違っていたような感じがしてきました。
RTMユーザーに対して便利なツールを作ろうと思っていたのですが、OpenOfficeユーザーにOpenRTM-aistを導入させるような方向性で行ければ良かったかもしれません。相当難しいですけど。
RTMのメーリングリストの参加者が454人らしいので、この人数の中でコメントをくれる人を探すのは難しいですね。相当魅力的な作品を作らないといけません。
Apache OpenOfficeのユーザー数は5800万人とからしいのでそれだけいれば誰かコメントしてくれるかもしれません。
とは言っても多分ダウンロード数なので実際にはそんなにはいないでしょうけど。






メーリングリストと言えば、以前書いたことをメーリングリストで質問してくれた親切な人がいたみたいです。
まあ、このブログを読んだとは一言もいってないので無関係かもしれないですけど。
そういえば前にも動作がおかしいとか書いたらメーリングリストで質問してくれた人がいて結局バグだったということがありました。今回はさすがに何らかの理由があるとは思いますが。









にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
今回はOmniORBpyの簡単なプログラムを作ってみます。
ここから簡単な例をダウンロードできます。
とは言ってもこのページのコードをパクッただけですが。
以前C++で作ったもののPython版なのでやっていることはほぼ同じです。

まず、IDLファイルのコンパイルを行います。
example_echo.idlと同じフォルダに移動して以下のコマンドを入力してください。


omniidl -bpython -Wba -nf example_echo.idl


するとExampleフォルダ、Example__POAフォルダ、example_echo_idl.pyが生成されます。


まずはクライアントから見ていきます。


#!/usr/bin/env python
import sys
from omniORB import CORBA
import CosNaming, Example
# ORBの生成と初期化
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
# RootPOA(ツリー構造のルート)への参照を取得
obj         = orb.resolve_initial_references("NameService")

#ルートコンテキストを取得
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
    print "Failed to narrow the root naming context"
    sys.exit(1)
name = [CosNaming.NameComponent("test", "my_context"),
        CosNaming.NameComponent("ExampleEcho", "Object")]
try:
   #指定した名前のオブジェクトリファレンスを取得
    obj = rootContext.resolve(name)
except CosNaming.NamingContext.NotFound, ex:
    print "Name not found"
    sys.exit(1)
#サーバントのオブジェクトリファレンス取得
eo = obj._narrow(Example.Echo)
if (eo is None):
    print "Object reference is not an Example::Echo"
    sys.exit(1)
message = "Hello from Python"

#サーバーに処理を要求
result  = eo.echoString(message)
print "I said '%s'. The object said '%s'." % (message,result)



こんな感じです。
次にサーバーです。




#!/usr/bin/env python
import sys
from omniORB import CORBA, PortableServer
import CosNaming, Example, Example__POA
class Echo_i (Example__POA.Echo):
    def echoString(self, mesg):
        print "echoString() called with message:", mesg
        return mesg
# ORBの生成と初期化
orb = CORBA.ORB_init(sys.argv, CORBA.ORB_ID)
poa = orb.resolve_initial_references("RootPOA")
ei = Echo_i()
eo = ei._this()
# RootPOA(ツリー構造のルート)への参照を取得
obj         = orb.resolve_initial_references("NameService")
#ルートコンテキストを取得
rootContext = obj._narrow(CosNaming.NamingContext)
if rootContext is None:
    print "Failed to narrow the root naming context"
    sys.exit(1)
name = [CosNaming.NameComponent("test", "my_context")]
try:
    #ネーミングコンテキストの作成
    testContext = rootContext.bind_new_context(name)
    print "New test context bound"
    
except CosNaming.NamingContext.AlreadyBound, ex:
    print "Test context already exists"
    obj = rootContext.resolve(name)
    testContext = obj._narrow(CosNaming.NamingContext)
    if testContext is None:
        print "test.mycontext exists but is not a NamingContext"
        sys.exit(1)
name = [CosNaming.NameComponent("ExampleEcho", "Object")]
try:
   #オブジェクトを登録
    testContext.bind(name, eo)
    print "New ExampleEcho object bound"
except CosNaming.NamingContext.AlreadyBound:
    testContext.rebind(name, eo)
    print "ExampleEcho binding already existed -- rebound"
#POAManagerオブジェクトの取得とアクティブ状態への遷移
poaManager = poa._get_the_POAManager()
poaManager.activate()
#ORBの破棄
orb.run()




と言う感じです。
では動作確認をしてみます。
ネームサーバーを立ち上げるには以下のコマンドを入力します。


omniNames -start -logdir tmp





次にサーバーを起動します。

pythonTestCORBAserver.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService

と入力してください。


最後にクライアントを起動します。


python TestCORBAclient.py -ORBInitRef NameService=corbaloc:iiop:1.0@localhost:2809/NameService


と入力してサーバー側のコンソールで文字列が表示されたら成功です。
今日はこれぐらいにしておきます。


次回と言いたいのですがネタがありません。
とりあえずRTCのプログラミングの話はやめてマニュアルの書き方でも考えてみるか。
というか本来そういうことを書きたいはずなのですが、何故か方向性が狂ってしまいました。
しばらくはRTCのプログラミングに関する話はやめます。あまり人の役にも立っていないみたいですし、特にやる意味も感じません。












にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
今日でプロジェクトページを作ってから一か月が経ちました。
予想通りコメントはありませんでした。そろそろ、なりすまし用の別アカウントを作りたいと思います。
まあそれは嘘ですけど。何の意味もないですから。
前の目標変更の記事を見てまさか本気でやると思った人はいないよなあとちょっと不安になってきました。



今回はとりあえず適当にWebブラウザでボタンを押すとRTCのサービスポートのサービスを実行するようなプログラムを作ってみます。
実装方法は違いますが、RTMコンテスト2013の作品のRobotControlBrowser RTCの劣化版ぐらいな感じで思ってくれていいです。
今回のプログラムはここからダウンロードできます。
使用方法は、
  1. testserver.pyを実行して簡易サーバーを起動する
  2. CGITest\CGITestProvider.pyを実行してRTCを起動する
  3. RTCをアクティブにする
  4. WebブラウザでURLにhttp://localhost:8000と入力する
  5. CGITest.set関数を呼び出す場合、テキストボックスに文字列を入力して入力ボタンを押す
  6. CGITest.get関数を呼び出す場合、取得ボタンを押す
とりあえず、JavaScriptからXMLHTTPRequestによりPythonのCGIを呼び出すところまでは以前の記事で書いたことなので省略します。


CGITestProvider.pyもサービスポートがあるだけで特に変わった所はないので説明は省略します。
cgi-bin\CGICompConsumer.pyだけを説明します。
まず、
form = cgi.FieldStorage()
cmd = form['cmd'].value
・・・
value = form['value'].value

はCGIRTC\CGIRTC.jsのobj.send(str);で入力したデータを取得しています。

まず、以下のコードでサービスポートを作成しています。
_mycon = OpenRTM_aist.CorbaConsumer(interfaceType=CGITest.mCGITest)
        
_cpCon = OpenRTM_aist.CorbaPort("CGITest")
_cpCon.registerConsumer("mCGITest", "CGITest::mCGITest", _mycon)
そして、起動したCGITestProvider0.rtcをrtctreeにより取得しています。
tree = rtctree.tree.RTCTree(servers='localhost', orb=orb)
rtc = tree.get_node(['/', 'localhost','CGITestProvider0.rtc'])
さらにサービスポートを接続しています。
e_port = rtc.get_port_by_name("CGITest")._obj
conprof = RTC.ConnectorProfile("connector0", "", [e_port,_cpCon.getPortRef()], [])
ret = e_port.connect(conprof)
最後に以下のようにサービスを呼び出しています。
if cmd == "set":
      value = form['value'].value
      _mycon._ptr().set(value)
elif cmd == "get":
       value = _mycon._ptr().get()

適当な説明ですが今日はこれぐらいにしておきます。
RobotControlBrowser RTCの実装方法に比べて特に利点はないので、余程の理由がない限りはあちらの実装方法を参考にしてください。


次はOmniORB関連の事をやると思います。





にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
関係ないけど大洲市出身の中村氏がノーベル賞を受賞しました。
地元から偉人が出るというの嬉しいものですね。
ちなみに大洲市には冨士山という山があります。
知らない人が見ると何の事やらわからないと思いますが、富士山と名前だけ酷似しています。
Google等で検索するともしかして富士山と以前は検索結果に表示されたと言う影の薄さです。




今回も特に書くことがなさそうなのでRTCのプログラミングについて書きます。

とりあえずmanagerを使っていろいろやってみます。

今回のプログラムはここからダウンロードできます。

今回配布するプログラムには実行順序を設定できる実行コンテキストを付属させてあります。
詳しくはリンク先に書いてありますが、使いづらかったので使用方法を多少変更してあります。

まず、付属のMultipleOrderedEC-1.0.0.win32.exeを実行してMultipleOrderedECをインストールしてください。
Ubuntu等の場合は解凍したフォルダに移動して、

python setup.py install

でインストールできます。
あと、PyQtのインストールが必要なのでここからインストーラをダウンロードするか、Ubuntuの場合はsynapticパッケージマネージャでインストールできます。

そして、rtc.confに


exec_cxt.periodic.type: MultipleOrderedEC
manager.modules.preload: MultipleOrderedEC.py

と記述してさらに解凍したフォルダのMultipleOrderedEC.pyをmanager.modules.load_pathでフォルダを指定するか、RTCと同じフォルダにコピーしてください。


それが通常の使用方法なのですが、今回はrtc.confではなくサンプルプログラムの中で実行コンテキストを指定するようにコードを書いてみます。

ManagerTest2.pyを見てみます。
ポイントは、


MultipleOrderedEC.MultipleOrderedECInit(mgr)


・・・
ec = OpenRTM_aist.Manager.instance().createContext(ec_args)
・・・


EC.bindComponent(self.comp)
EC.start()



です。
まずMultipleOrderedECInitでECをファクトリに登録します。
そしてcreateContextでECを生成します。
最後にbindComponentでRTCとECを関連付けています。
RTシステムエディタで確認してみてください。




あと、ManagerTest.pyでは以下のコードで動的にMultipleOrderedECのモジュールを読み込んでいます。

MultipleOrderedECInit = self.GetFunc("MultipleOrderedEC",[".\\"]).MultipleOrderedECInit

・・・
def GetFunc(self, filename, filepath):
    (file, pathname, description) = imp.find_module(filename, filepath)
    return imp.load_module(filename, file, pathname, description)
さらにRTCも動的に読み込むようにしています。

ECTestInit = self.GetFunc("ECTest",[".\\"]).ECTestInit
ECTestInit(manager)


今日はこれぐらいにしておきます。
次はrtctreeについて少し書きます。



にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
動作できなかったとかいうコメントがないのはそもそもインストールしてもらうところまで行きつかないのか、それとも動作ができてないけどコメントするのが面倒なのか、どちらなのかがよくわかりません。
アンケートを作成したのでコメントしづらい人はこれの好きな選択肢を選んでください。


今回はコンフィギュレーションコールバックをやります。
以前書いたのですが、その時とは仕様が変わったためもう一度書いておきます。

とりあえず簡単なプログラムを作ってみました。

ポイントはonInitializeの、
  1. self.addConfigurationSetListener(OpenRTM_aist.ConfigurationSetListenerType.ON_SET_CONFIG_SET, MyConfigurationSetListener("ON_SET_CONFIG_SET"))
  2. self.addConfigurationSetListener(OpenRTM_aist.ConfigurationSetListenerType.ON_ADD_CONFIG_SET , MyConfigurationSetListener("ON_ADD_CONFIG_SET"))
  3. self.addConfigurationParamListener(OpenRTM_aist.ConfigurationParamListenerType.ON_UPDATE_CONFIG_PARAM, MyConfigurationParamListener("ON_UPDATE_CONFIG_PARAM"))
  4. self.addConfigurationSetNameListener(OpenRTM_aist.ConfigurationSetNameListenerType.ON_UPDATE_CONFIG_SET, MyConfigurationSetNameListener("ON_UPDATE_CONFIG_SET"))
  5. self.addConfigurationSetNameListener(OpenRTM_aist.ConfigurationSetNameListenerType.ON_REMOVE_CONFIG_SET, MyConfigurationSetNameListener("ON_REMOVE_CONFIG_SET"))
  6. self.addConfigurationSetNameListener(OpenRTM_aist.ConfigurationSetNameListenerType.ON_ACTIVATE_CONFIG_SET, MyConfigurationSetNameListener("ON_ACTIVATE_CONFIG_SET"))
の6つです。
1ではコンフィギュレーションが設定された時のリスナの設定だとは思います。
コンフィギュレーションパラメータを変更したとき等に呼び出されることがわかると思います。
2はコンフィギュレーションセットが追加されたときのリスナを設定しています。
4はコンフィギュレーションセットがアップデートされたときぼリスナの設定です。
RT System Editorでコンフィギュレーションセットの追加、パラメータの変更をした後にRTCをアクティブにすると呼び出されたのがわかると思います。
5はコンフィギュレーションセットが削除されたときのリスナの設定みたいです。
コンフィギュレーションセットの名前を変更したときにも呼び出されるので、名前変更時に一旦削除しているみたいです。
6はコンフィギュレーションセットがアクティブにしたときのリスナの設定みたいです。
少し分かりづらいので、このプログラムを使うと多少動作がわかりやすいかもしれません。

conf.activate_configuration_set("default")

でコンフィギュレーションセットをアクティブにして変更を反映しています。
このときに6のリスナが呼び出されています。


よくわからないのが3でパラメータの変更時に呼び出されるのかなと思っていたのですが呼び出されている様子はありません。
このページで配布しているプログラムがおかしいのかもしれませんが、どういうタイミングで呼び出されるのか詳しい人は教えて頂けると助かります。





にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
<< 前のページ 次のページ >>
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]