忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[658]  [656]  [655]  [652]  [654]  [653]  [651]  [650]  [649]  [648]  [647
以前の記事でUSBラズパイとかいう製品の存在価値が分からないと言いましたが、案の定叩かれているようです。そりゃそうだよなあ。買うことを検討している人は考え直したほうがいいと思う。


それはさておき。OiLのマーシャリング、アンマーシャリングの動作がどうにも不可解なので調べてみます。
CDRの先頭に1,255,255,255という謎の値がくっついているのは以前言った通りなのですが、TimedVelocity2D型、CameraImage型等で調べたところ、他の部分にも謎の値が挿入されてしまいます。

まずTimedVelocity2D型をマーシャリングすると以下のようになります。
格納されている値は全て0に設定してあるため、全て0になるはずですが、13~16にかけて255という値が挿入されています。


位置  値
1       1
2       255
3       255
4       255
5       0
6       0
7       0
8       0
9       0
10      0
11      0
12      0
13      255
14      255
15      255
16      255
17      0
18      0
19      0
20      0
21      0
22      0
23      0
24      0
25      0
26      0
27      0
28      0
29      0
30      0
31      0
32      0
33      0
34      0
35      0
36      0
37      0
38      0
39      0
40      0



CameraImage型は以下のようになります。
これも全て0になるはずですが、255が挿入されています。

位置  値
1       1
2       255
3       255
4       255
5       0
6       0
7       0
8       0
9       0
10      0
11      0
12      0
13      0
14      0
15      0
16      0
17      0
18      0
19      255
20      255
21      1
22      0
23      0
24      0
25      0
26      255
27      255
28      255
29      255
30      255
31      255
32      255
33      0
34      0
35      0
36      0
37      0
38      0
39      0
40      0
41      0
42      0
43      0
44      0

TimedVelocity2D型について推測すると、structの変数の前に255が挿入されると推測されます。

位置  値
------------------------
1       1
2       255
3       255
4       255
------------------------
Time(sec):unsigned long
5       0
6       0
7       0
8       0
------------------------
Time(nsec):unsigned long
9       0
10      0
11      0
12      0
------------------------
13      255
14      255
15      255
16      255
------------------------
Velocity2D(vx):double
17      0
18      0
19      0
20      0
21      0
22      0
23      0
24      0
------------------------
Velocity2D(vy):double
25      0
26      0
27      0
28      0
29      0
30      0
31      0
32      0
------------------------
Velocity2D(va):double
33      0
34      0
35      0
36      0
37      0
38      0
39      0
40      0
------------------------


CameraImage型は以下のようになります。
位置  値
------------------------
1       1
2       255
3       255
4       255
------------------------
Time(sec):unsigned long
5       0
6       0
7       0
8       0
------------------------
Time(nsec):unsigned long
9       0
10      0
11      0
12      0
------------------------
width:unsigned short
13      0
14      0
------------------------
height:unsigned short
15      0
16      0
------------------------
bpp:unsigned short
17      0
18      0
------------------------
19      255
20      255
------------------------
format:string
21      1
22      0
23      0
24      0
25      0
------------------------
26      255
27      255
28      255
29      255
30      255
31      255
32      255
------------------------
fDiv::double
33      0
34      0
35      0
36      0
37      0
38      0
39      0
40      0
------------------------
pixels:sequence<octet>
41      0
42      0
43      0
44      0



なるほど。全く分かりません。アラインメントの問題なのでしょうか?

というわけで、OiLのalign関数をただ0を返す関数に置き換えました。



encoder.align = function(...)return 0 end







これで上記の255が消えて全て上手くいく・・・と思ったのですが、CameraImage型はomniORB等でマーシャリングするとアラインメントのためかbppとformatの間に0が2個入るため上手くいきません。この問題を解決するのは容易ではありません。


まあでも、これでとりあえずほとんどのデータ型で通信できるようになったはずなので、修正版0.2.1をリリースしました









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

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
08 2018/09 10
S M T W T F S
1
2 3 4 5 6 7 8
9 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
フリーエリア
最新CM
[08/24 Nobu]
[08/24 puku]
[08/22 Nobu]
[08/22 puku]
[04/17 Nobu]
プロフィール
HN:
Nobu
年齢:
30
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]