valgur / velodyne_decoder

Fully-featured C++/Python Velodyne packet decoder
BSD 3-Clause "New" or "Revised" License
40 stars 13 forks source link

Decoding Velodyne data from a PCAP file have wrong number of pcd frames for VLP-32C #5

Closed dandric closed 1 year ago

dandric commented 1 year ago

I'm using our PCAP file, on Linux and MacOS, in duration of 20 sec, created by Velodyne VLP-32C, with 600 rpm, 10Hz. In VeloView I get as expected 200 pcd frames with this configuration, but out of velodyne_decoder I get 400 frames.

By testing velodyne_decoder on Velodyne HDL32E with 600 rpm, 10 Hz on following dataset I get 843 pcd frames, in VeloView I get 2013? Kitaware dataset: 2014-11-10-10-36-54_Velodyne-VLP_10Hz-County Fair.pcap, from https://data.kitware.com/api/v1/item/5b7fff608d777f06857cb53a/download

Is it possible that the calculation of frames per rotation and second is not right?

pchundi commented 1 year ago

+1

valgur commented 1 year ago

I'm looking into it.

The linked .pcap file contains VLP-16 data, which seems to be working fine (more or less).

import velodyne_decoder as vd

config = vd.Config(model='VLP-16', rpm=600)
pcap_file = '2014-11-10-10-36-54_Velodyne-VLP_10Hz-County Fair.pcap'
stamps = []
for stamp, points in vd.read_pcap(pcap_file, config):
    stamps.append(stamp)
print(len(stamps))

Which reports 2008 decoded scans. In VeloView I'm seeing 2024. That's fairly close and not off by a factor of 2, although the slight discrepancy is a bit concerning.

I'm seeing the same for one of the sample HDL-32E .pcap files (HDL32-V2_R into Butterfield into Digital Drive.pcap): 520 in velodyne_decoder (with 700 rpm) and 531 in VeloView.

valgur commented 1 year ago

Also, just to be sure - the data you are looking at was recorded in a single-return mode not dual-return, right?

dandric commented 1 year ago

Data was recorded in dual mode.

valgur commented 1 year ago

Ok, that's a more or less expected behavior for the latest version of velodyne_decoder then - dual-return mode is not really supported.

You can try the experimental version of velodyne_decoder the develop branch. I have added support for dual-return mode data among other improvements there. Notably, you no longer need to specify the model and rpm config parameters in that version anymore.

sparshtelus commented 1 year ago

In the master branch, packet_decoder.cpp has dual_mode set to False for VLPC-32. Does setting it to True in a downloaded copy solve the problem? Thanks for creating this library, really helps.

valgur commented 1 year ago

In the master branch, packet_decoder.cpp has dual_mode set to False for VLPC-32. Does setting it to True in a downloaded copy solve the problem? Thanks for creating this library, really helps.

That parameter has no effect. Use the version in the develop branch - it has a full support for dual return mode out of the box.