ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
今、OpenRTM Lua版の実装をしているのですが、それなりに苦戦しています。
C++版やPython版の機能が多くなりすぎて、どこから手を付けていいのかよくわかりません。
仕様通りに実装すれば、ほかの実装と相互通信できるはずなので、C++版やPython版を参考にして作るのはやめたほうがいいかもしれません。不可解な処理も多いし。例えばポートを切断する箇所でdisconnect関数内でコネクタプロファイルに格納したすべてのポートのnotify_disconnect関数を呼び出しているにも関わらず、notify_disconnect関数内でコネクタプロファイルの次のポートのnotify_disconnect関数を呼び出そうとしている箇所は意図がよくわかりません。
CORBAのLua実装のoilにはwchar型やwstring型が存在しないらしく、BasicDataType.idlに修正が必要です。
あとoilは同一プロセス内でオペレーションを呼び出すと、引数のオブジェクトリファレンスを自動的に実体で渡してくれる有難迷惑な動作をするらしく、_is_equivalentで比較する部分など大幅な修正が必要です。
それから2つのIDLファイルで異なる#pragma prefix、同じモジュール名を設定した場合にエラーが出るため、OpenRTM-aistのIDLファイルに変更が必要です。
それからマーシャリングしたデータのサイズが何故か違います。long型が8、short型が4、TimedLong型が16と滅茶苦茶です。
とりあえずマーシャリング後のバイナリデータの中身を調べてみました。
long
これらの変更を施した結果、以下のようにOpenRTM-aist Python版とOpenRTM Lua版で通信ができるようになりました。
炎上するかもしれないので一応言っておきますが、ROMイメージはこのサイトの著作権フリーのものを使っているため、問題はないはずです。嫌がらせはやめてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
C++版やPython版の機能が多くなりすぎて、どこから手を付けていいのかよくわかりません。
仕様通りに実装すれば、ほかの実装と相互通信できるはずなので、C++版やPython版を参考にして作るのはやめたほうがいいかもしれません。不可解な処理も多いし。例えばポートを切断する箇所でdisconnect関数内でコネクタプロファイルに格納したすべてのポートのnotify_disconnect関数を呼び出しているにも関わらず、notify_disconnect関数内でコネクタプロファイルの次のポートのnotify_disconnect関数を呼び出そうとしている箇所は意図がよくわかりません。
CORBAのLua実装のoilにはwchar型やwstring型が存在しないらしく、BasicDataType.idlに修正が必要です。
あとoilは同一プロセス内でオペレーションを呼び出すと、引数のオブジェクトリファレンスを自動的に実体で渡してくれる有難迷惑な動作をするらしく、_is_equivalentで比較する部分など大幅な修正が必要です。
それから2つのIDLファイルで異なる#pragma prefix、同じモジュール名を設定した場合にエラーが出るため、OpenRTM-aistのIDLファイルに変更が必要です。
それからマーシャリングしたデータのサイズが何故か違います。long型が8、short型が4、TimedLong型が16と滅茶苦茶です。
とりあえずマーシャリング後のバイナリデータの中身を調べてみました。
long
1 1
2 255
3 255
4 255
5 230
6 0
7 0
8 0
short
short
1 1
2 255
3 230
4 0
octet
octet
1 1
2 230
sequence<long>(配列数2)
sequence<long>(配列数2)
1 1
2 255
3 255
4 255
5 2
6 0
7 0
8 0
9 123
10 0
11 0
12 0
13 234
14 0
15 0
16 0
Time
1 1
2 255
3 255
4 255
5 35
6 0
7 0
8 0
9 234
10 0
11 0
12 0
TimedLong
1 1
2 255
3 255
4 255
5 35
6 0
7 0
8 0
9 234
10 0
11 0
12 0
13 23
14 0
15 0
16 0
先頭の1が何の意味があるのかがよく分からないので、他のRTM実装と通信する場合は削除します。そのあとに255が0~3個並んでいます。確かではありませんが、本来のデータサイズが1の時は255が0個、2の時は255が1個、4以上の時は3個となっているようなので、適宜変更するようにします。これらの変更を施した結果、以下のようにOpenRTM-aist Python版とOpenRTM Lua版で通信ができるようになりました。
炎上するかもしれないので一応言っておきますが、ROMイメージはこのサイトの著作権フリーのものを使っているため、問題はないはずです。嫌がらせはやめてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする