備忘録:Velodyne & Raspberry Pi3

先週はデスマーチだったので,今朝半日はちょっと息抜き研究. Velodyne VLP-16, 32は100BASE-TのLANでイケるので,Raspberry Pi3 で記録だけならできるんじゃないかと. やりたいこと データ記録の問題,手間を解消したい. Velodyneを使って実験することが多いけども,記録用PCが一つだと不具合時にデータが残らなかったり,学生さんはデータを保存し忘れたり,そもそも記録用PCを起動していなかったり,と.なので,補助用に安くデータを自動で保存したい.(まぁ,Velodyneのコストに比べたらPCだろうがRasPiだろうが大して変わらないけども.) 結論 ほぼいけた.ポイントは軽いtcpdumpを使うこと.再生は,Raspberry PiをそのままホストのPCにLAN接続して,tcpreplayする.あたかもVelodyneが繋がっているかのように動く.  tcpdump -i (interface_name) -n -B 524288 -w (filename) -C 2048 (interface_name) から入って来るパケットを名前解決なし,バッファサイズ524288で (filename)というファイルに書き込む.大きくなりすぎると不便なのでとりあえず2048MBごとに分割. これをやっていくつか気付いたこと 1.Ubuntu MateでWiresharkだと,イケそうだけど,たまにロスしたり,データレートが若干低い(おそらくどこかでロスしてる).tcpdumpでも時々ロスが出る. 2.pcapデータをrosで再生すると,rpmやパケットレートの設定で一部欠けたり謎のノイズが発生することがある.一部欠ける問題は,_npackets:=90で突破できたがノイズが消えない.rosのvelodyne_driverのバグか? 3.上記2の問題は,tcpreplayだと発生しない. 1.Raspi 上でtcpdump Raspberry Pi3 (Ubuntu Mate)にtcpdumpを入れてパケットを記録.大体900[p/s]程度. 1分に1回くらいでロスが出る.これを許容できる環境では非常に便利だけれども.なんとか対策したいところ.そこで,tcpdump時に-nオプションをつける. -n   Don’t convert addresses (i.e., host addresses, port numbers, etc.) to names. 名前解決をしないことで処理速度を上げる.これでロスがほとんどなくなる ちなみにIntel NUC (Core i7, 1000BASE-T)はオプションなしでも抜けがない.…