ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
Lua for WindowsのインストーラーでLuaをインストールするとOilというライブラリが付いてきます。
これはLuaのCORBA実装なので、C++、PythonのomniORB等の他のCORBA実装とも通信できます。
このOilを使う事で、RTミドルウェアのLua実装を開発する事もできます。
これはネームサーバー、RTシステムエディタと通信してRTCを活性化したときにアクティブ状態に遷移して、非活性化したときに非アクティブ状態に遷移するだけの実装なので、中身はほとんど実装できていません。
一応ソースコードはここにあります。
Oilの使い方に関する資料が極めて少なく調べるのに苦労したので、今後のためにいくつかメモを書いておきます。
ORBの初期化の引数なのですが、以下のようにludoを入れるとLuDOという謎機能で通信をするようなので入れないようにしてください。
orb = oil.init{ flavor = "ludo;cooperative;base", port = 2810 }
とりあえず、以下のように初期化します。
local orb = oil.init{ flavor = "intercepted;corba;typed;cooperative;base", port=2810 }
次にIDLファイルを読み込みます。
orb:loadidlfile("CosNaming.idl")
このとき読み込むIDLファイルですが、IDL読み込みの機能が完全ではないらしく原因不明のエラーが発生することがあるので、Oilのexampleに入っているものを使用してください。
次にネームサーバーに接続します。
インターフェースの名称には注意してください。
ns = orb:newproxy("corbaloc:iiop:localhost:2809/NameService","IDL:omg.org/CosNaming/NamingContext:1.0")
最後にオブジェクトをネームサーバーにバインドします。
obj = orb:newservant(Hello, nil, "IDL:Hello:1.0")
ns:rebind({{id="testComp",kind="rtc"}},testComp)
次にRTCプロファイルのような複数のデータを含む構造体を返すオペレーションを実行した際に、どのようにその構造体を表現するかについてメモします。
これは実は簡単で、テーブルに同じ名前の変数を追加して、そのテーブルを返すだけです。
さっきも言ったのですが、IDLの読み込み機能が不完全らしく、特にSDOPackage.idlの読み込みには苦労しました。読み込めるように改変したものは、先ほどのソースコードと一緒に置いてあります。
何故かconst修飾子が全く使えないらしく、CosNotification.idlからconst定数は全て削除しました。それ以外にもエラーが多数発生したので大幅に変更してあります。
多分これの開発は滞る、というか先が長すぎてあまりやる気がでないので、しばらく放置します。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
これはLuaのCORBA実装なので、C++、PythonのomniORB等の他のCORBA実装とも通信できます。
このOilを使う事で、RTミドルウェアのLua実装を開発する事もできます。
これはネームサーバー、RTシステムエディタと通信してRTCを活性化したときにアクティブ状態に遷移して、非活性化したときに非アクティブ状態に遷移するだけの実装なので、中身はほとんど実装できていません。
一応ソースコードはここにあります。
Oilの使い方に関する資料が極めて少なく調べるのに苦労したので、今後のためにいくつかメモを書いておきます。
ORBの初期化の引数なのですが、以下のようにludoを入れるとLuDOという謎機能で通信をするようなので入れないようにしてください。
orb = oil.init{ flavor = "ludo;cooperative;base", port = 2810 }
とりあえず、以下のように初期化します。
local orb = oil.init{ flavor = "intercepted;corba;typed;cooperative;base", port=2810 }
次にIDLファイルを読み込みます。
orb:loadidlfile("CosNaming.idl")
このとき読み込むIDLファイルですが、IDL読み込みの機能が完全ではないらしく原因不明のエラーが発生することがあるので、Oilのexampleに入っているものを使用してください。
次にネームサーバーに接続します。
インターフェースの名称には注意してください。
ns = orb:newproxy("corbaloc:iiop:localhost:2809/NameService","IDL:omg.org/CosNaming/NamingContext:1.0")
最後にオブジェクトをネームサーバーにバインドします。
obj = orb:newservant(Hello, nil, "IDL:Hello:1.0")
ns:rebind({{id="testComp",kind="rtc"}},testComp)
次にRTCプロファイルのような複数のデータを含む構造体を返すオペレーションを実行した際に、どのようにその構造体を表現するかについてメモします。
これは実は簡単で、テーブルに同じ名前の変数を追加して、そのテーブルを返すだけです。
local testComp = {}
function testComp:get_component_profile()
print("get_component_profile")
return {instance_name="testComp",type_name="testComp",
description="description",version="0", vendor="sample",
category="test",port_profiles={},
parent=testComp,properties={
{name="implementation_id",value="testComp"}, {name="type_name",value="testComp"},
{name="description",value="description"},{name="version",value="0"},
{name="vendor",value="sample"},{name="category",value="test"},
{name="activity_type",value="STATIC"},{name="max_instance",value="1"},
{name="language",value="Lua"},{name="lang_type",value="SCRIPT"},
{name="instance_name",value="testComp0"}
}
}
end
さっきも言ったのですが、IDLの読み込み機能が不完全らしく、特にSDOPackage.idlの読み込みには苦労しました。読み込めるように改変したものは、先ほどのソースコードと一緒に置いてあります。
何故かconst修飾子が全く使えないらしく、CosNotification.idlからconst定数は全て削除しました。それ以外にもエラーが多数発生したので大幅に変更してあります。
多分これの開発は滞る、というか先が長すぎてあまりやる気がでないので、しばらく放置します。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする