Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add #g read macro for reading binary encoding float/integer array #139

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

YoheiKakiuchi
Copy link
Member

バイナリエンコードされたfloat/integer-vector/matrixのリーダーを追加しました。
形式は以下です。
#g( array-dimensions element-type バイナリ文字列 ) の書式です。
#g((4 4) :float "xxx")

@snozawa
Copy link
Contributor

snozawa commented Sep 17, 2015

+1
EUslispのfloat/integer-vector/matrixをバイナリでファイルにダンプする関数はあるんでしたっけ?

@garaemon
Copy link
Contributor

これはテストあったほうがいい気がします。

@garaemon
Copy link
Contributor

""の中はバイナリ文字列ということはエディタで見ると"@@@@@@@"みたいになるという事でしょうか?

@YoheiKakiuchi
Copy link
Member Author

ダンプはeuslibにあります、移行する予定ですが書き直したいですね。

テストは以下です。
euslisp/jskeus#271

""の中はバイナリ文字列ということはエディタで見ると"@@@@@@@"みたいになるという事でしょうか?
これはそうです。読める方がいいかな?

@garaemon
Copy link
Contributor

これはそうです。読める方がいいかな?

読めたほうがいいです、が高速化のために導入したいという事だと思うので、読める形(asciiに無理やり収める)にした時にパフォーマンスがどこまで落ちてしまうかがキーな気がします。

euslisp/jskeus#271
を見ると空白の文字列から突如としてベクトルが生成されていて、なんとも言えない感じを受けます。

@garaemon
Copy link
Contributor

機能的には賛成です 👍

そのうちvectorだけじゃなくて#sで表現してる構造体もこっちで表現したほうが効率がいい、とかになりそうですね。

@snozawa
Copy link
Contributor

snozawa commented Sep 17, 2015

そのうちvectorだけじゃなくて#sで表現してる構造体もこっちで表現したほうが効率がいい、とかになりそうですね。

+1
せめてcoordinatesはあるとありがたいですね。

@garaemon
Copy link
Contributor

ASCIIでうまく表示できるのは32~127なので、パフォーマンスは最悪半分位になってしまうかもしれません。

@YoheiKakiuchi
Copy link
Member Author

https://ja.wikipedia.org/wiki/Base64
データ量的にはそれほどでも無いけど、変換が手間だなあ

@garaemon
Copy link
Contributor

これでできませんか?
https://github.com/euslisp/EusLisp/blob/master/lib/llib/base64.l

@garaemon
Copy link
Contributor

Cでやるにしても、そこまで大変じゃなさそうです

http://tororo7.jimdo.com/2014/01/09/base64-c/

@YoheiKakiuchi
Copy link
Member Author

Cで書くなら、松井さんコードをCにするのがいい気がする

@YoheiKakiuchi
Copy link
Member Author

base64にしてみました。

@k-okada
Copy link
Member

k-okada commented Sep 18, 2015

これってcommon-lispにある表記?

2015年9月18日金曜日、Yohei [email protected]さんは書きました:

base64にしてみました。


Reply to this email directly or view it on GitHub
#139 (comment).

◉ Kei Okada

@YoheiKakiuchi
Copy link
Member Author

@garaemon
Copy link
Contributor

ここまでくると、#.でも実装できそうな気はしてきました

@garaemon
Copy link
Contributor

#.(instance-array-from-base64 (2 2) integer "892ue92ue3")
みたいなイメージです

@garaemon
Copy link
Contributor

肝心のパフォーマンスが大きく違うかもしれません。

@k-okada
Copy link
Member

k-okada commented Sep 25, 2015

よくわかっていないですが,array-entity して出てきたバイナリをwrite-byte して書き出すのではダメなんだろうか?

バイナリ文字列,というのは結局プログラムで書き出すとすると,同じことな気がするんですが,

@k-okada
Copy link
Member

k-okada commented Apr 22, 2022

@YoheiKakiuchi 先生.7年遅れでようやくこの問題にたどり着きました.
1)YoheiKakiuchi/jsk_model_tools@504cb1e を見ていますが,このバージョン(直接バイナリを"@@@"みたいに書き出す)だと,バイナリの中に偶然 \"=0x22 が入ってきた場合に上手く扱えない,という理解は正しいですか?
2)このPRだとbase64で書き出していますが,それに対応する jsk_model_tools のブランチはありますか?
3) collada2eusに--simple_geometry オプションがありますが,これを機能させたものはありますか? ( jsk-ros-pkg/jsk_model_tools#244 )
4)hrp2/jaxon は結構重そうだけどどうしているのでしょうか?元のモデルのメッシュをへらしているんでしょうか? @kindsenior @Naoki-Hiraoka

@Naoki-Hiraoka
Copy link
Contributor

hrp2/jaxon は結構重そうだけどどうしているのでしょうか?元のモデルのメッシュをへらしているんでしょうか?

hrp2/jaxonはVRMLモデルに対してopenhrp-export-colladaとcollada2eusを(特にメッシュ削減に関するオプションはつけずに)作用させてeusモデルを生成しています。

HRP2のVRMLモデルは元のモデルのメッシュをそのまま使っています。元のモデルのメッシュが十分削減されているのか、ロード時間はそこまで気になりません

$ roseus ./hrp2jsk.l
$ (bench (hrp2jsk))
;; time -> 0.276349[s]
#<hrp2jsk-robot #X5653bfc33f90 HRP2JSK  0.0 0.0 0.0 / 0.0 0.0 0.0>

JAXONやTABLISはのVRMLモデルは、CADのモデルのメッシュを削減したものを使っています。

参考

全身のリンクのメッシュを削減している場合

$roseus ./tablis.l
$ (bench (tablis))
;; time -> 0.596054[s]
#<tablis-robot #X559384801640 TABLIS  0.0 0.0 0.0 / 0.0 0.0 0.0>

BASE_LINKCHEST_LINK0だけCADのモデルのメッシュをそのまま使った場合

$ roseus ./tablis.l
$ (bench (tablis))
;; time -> 1.82508[s]
#<tablis-robot #X5652b119ddf0 TABLIS  0.0 0.0 0.0 / 0.0 0.0 0.0>

TABLIS全身のリンクをCADのメッシュをそのまま使った場合

;;openhrp-export-collada時に128Gのメモリを使い切ってしまってeusモデルを生成できず計測不能

@k-okada
Copy link
Member

k-okada commented Apr 22, 2022

モデル作成時ではなくて,ファイルロードの時間が問題になっているのかな,という理解なんだけど,jsk-ros-pkg/jsk_model_tools#244 (comment) の以下のような結果を知りたいです.

$ ls -al unitreeeus/go1.l
-rw-rw-r-- 1 k-okada k-okada 57518932 Apr  1 14:40 unitreeeus/go1.l
$ time irteusgl unitreeeus/go1.l '(exit)'

real	0m3.116s
user	0m3.038s
sys	0m0.072s

@Naoki-Hiraoka
Copy link
Contributor

Naoki-Hiraoka commented Apr 22, 2022

すみません。誤解していました。以下のようになります。

HRP2の場合

$ ls -al hrp2jsk.l 
-rw-rw-r-- 1 hiraoka hiraoka 2106005  4月 22 16:48 hrp2jsk.l
$ time irteusgl hrp2jsk.l '(exit)'
real	0m0.216s
user	0m0.199s
sys	0m0.004s

全身のメッシュを削減しているTABLISの場合

$ ls -al tablis.l 
-rw-rw-r-- 1 hiraoka hiraoka 6123785  4月 22 18:15 tablis.l
$ time irteusgl tablis.l '(exit)'
real	0m0.385s
user	0m0.348s
sys	0m0.024s

BASE_LINKとCHEST_LINK0だけCADのモデルのメッシュをそのまま使ったTABLISの場合

$  ls -al tablis.l 
-rw-rw-r-- 1 hiraoka hiraoka 25093510  4月 22 16:49 tablis.l
$ time irteusgl tablis.l '(exit)'
real	0m1.135s
user	0m1.122s
sys	0m0.008s

@k-okada
Copy link
Member

k-okada commented Apr 22, 2022

@Naoki-Hiraoka このときのファイルサイズはどれぐらいなんだろう...

@Naoki-Hiraoka
Copy link
Contributor

追記しました。

@YoheiKakiuchi
Copy link
Member Author

1)YoheiKakiuchi/jsk_model_tools@504cb1e を見ていますが,このバージョン(直接バイナリを"@@@"みたいに書き出す)だと,バイナリの中に偶然 "=0x22 が入ってきた場合に上手く扱えない,という理解は正しいですか?

はい、そのままのバイナリダンプは、バグの可能性があると思います。

2)このPRだとbase64で書き出していますが,それに対応する jsk_model_tools のブランチはありますか?

ないです。

3) collada2eusに--simple_geometry オプションがありますが,これを機能させたものはありますか? ( jsk-ros-pkg/jsk_model_tools#244 )

ないように思います。

4)hrp2/jaxon は結構重そうだけどどうしているのでしょうか?元のモデルのメッシュをへらしているんでしょうか? @kindsenior @Naoki-Hiraoka

#g の件が jaxonかjaxon_redの読み込みが遅いための解決策だったと思うのですが、
jsk-ros-pkg/jsk_model_tools#148 こちらのhotfixで、
我慢できる程度の時間になって今に至っています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants