備忘録:Velodyne & Raspberry Pi3

先週はデスマーチだったので,今朝半日はちょっと息抜き研究.

DSC_1031.JPG
VelodyneとRasPiだけで点群データの自動バックアップを目指して

Velodyne VLP-16, 32は100BASE-TのLANでイケるので,Raspberry Pi3 で記録だけならできるんじゃないかと.

やりたいこと

データ記録の問題,手間を解消したい.

Velodyneを使って実験することが多いけども,記録用PCが一つだと不具合時にデータが残らなかったり,学生さんはデータを保存し忘れたり,そもそも記録用PCを起動していなかったり,と.なので,補助用に安くデータを自動で保存したい.(まぁ,Velodyneのコストに比べたらPCだろうがRasPiだろうが大して変わらないけども.)

rasp.png
これもやりたい.

結論

ほぼいけた.ポイントは軽いtcpdumpを使うこと.再生は,Raspberry PiをそのままホストのPCにLAN接続して,tcpreplayする.あたかもVelodyneが繋がっているかのように動く.

 tcpdump -i (interface_name) -n -B 524288 -w (filename) -C 2048

(interface_name) から入って来るパケットを名前解決なし,バッファサイズ524288で (filename)というファイルに書き込む.大きくなりすぎると不便なのでとりあえず2048MBごとに分割.

DSC_1068.JPG
液晶とボタンもつけて,Velodyne Packets の記録,再生がポチポチでできる!

これをやっていくつか気付いたこと

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]程度.

tcpdump.png

1分に1回くらいでロスが出る.これを許容できる環境では非常に便利だけれども.なんとか対策したいところ.そこで,tcpdump時に-nオプションをつける.

-n   Don’t convert addresses (i.e., host addresses, port numbers, etc.) to names.

名前解決をしないことで処理速度を上げる.これでロスがほとんどなくなる

testcap.png
-n なし(名前解決しようとする場合)ロスが1分に1回くらい発生
testcap-onboard.png
-n -B 524288を入れると2GB, オンボードのLAN IFでも漏れなし.ファイル分割時に若干ロス.

ちなみにIntel NUC (Core i7, 1000BASE-T)はオプションなしでも抜けがない.

testdump_intel.png
Intel NUC (w/ gigabit ethernet)

ちなみにVelodyne HDL-64でも取れた.

c20170227_111712.png
2.2M point(HDL-64). around 5790 packets/sec

2. Scan gap & noise in RViZ

pcap ファイルをそのままrosで再生すると謎のgapが出る.おそらくパケットレートがうまく処理されていない.

で,_npacketオプションで _npacket:=90と指定するとgapが消えるが,動画をよく見るとわかるけど,謎のノイズが出る.これがまだ謎.

結局tcpreplayでpcapファイルをRaspberry Pi3で再生して,LANで処理系につなぐのが一番楽だし,データのコピーもいらない.ノイズもでない(ROS的にはvelodyneが繋がってると思ってる)

結局ノイズは謎のままだった.

Advertisements

4 Comments Add yours

  1. Rohan R Paleja says:

    Hi,
    I was wondering if you could give me some more information on how you did this. I am trying to impliment this so I can put my lidar vlp-16 on a drone and then at a later point attach an rtk gps and have accurate environment mapping. I have having a little trouble following your setup on how you connected the pi and lidar and what programs you used to accomplish this. Could you offer some more information.

    1. ishi96440 says:

      Hi

      I just connected an Ethernet cable between vlp-16 controller and Pi3.
      Ubuntu Mate is installed Pi3, and I used tcpdump command to capture velodyne packets.

      After field recording, I used tcpreplay command for stream recorded packet data. In this time, Pi3 is connected to a computer using Ethernet cable.

      1. Rohan R Paleja says:

        Oh okay, Thank you
        Have you tried implementing a GPS along with this setup.

      2. ishi96440 says:

        No, I just used a Velodyne without GPS.
        If you couldn’t record velodyne packets, please check IP (or network interface) setup.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s