-
-
Save ronrest/08abaf42930473f9e3e2dbadad5c92fb to your computer and use it in GitHub Desktop.
| """ | |
| VISUALISE THE LIDAR DATA FROM THE KITTI DATASET | |
| Based on the sample code from | |
| https://github.com/utiasSTARS/pykitti/blob/master/demos/demo_raw.py | |
| And: | |
| http://stackoverflow.com/a/37863912 | |
| Contains two methods of visualizing lidar data interactively. | |
| - Matplotlib - very slow, and likely to crash, so only 1 out of every 100 | |
| points are plotted. | |
| - Also, data looks VERY distorted due to auto scaling along | |
| each axis. (this could potentially be edited) | |
| - Mayavi - Much faster, and looks nicer. | |
| - Preserves actual scale along each axes so items look | |
| recognizable | |
| """ | |
| import pykitti # install using pip install pykitti | |
| import os | |
| import numpy as np | |
| # Chose which visualization library to use: "mayavi" or "matplotlib" | |
| # VISLIB = "mayavi" | |
| VISLIB = "matplotlib" | |
| # Raw Data directory information | |
| basedir = '/home/dodo_brain/kitti_data/' | |
| date = '2011_09_26' | |
| drive = '0005' | |
| # Optionally, specify the frame range to load | |
| # since we are only visualizing one frame, we will restrict what we load | |
| # Set to None to use all the data | |
| frame_range = range(150, 151, 1) | |
| # Load the data | |
| dataset = pykitti.raw(basedir, date, drive, frame_range) | |
| # Load Lidar Data | |
| dataset.load_velo() # Each scan is a Nx4 array of [x,y,z,reflectance] | |
| # Plot only the ith frame (out of what has been loaded) | |
| i = 0 | |
| velo = dataset.velo[i] | |
| if VISLIB == "mayavi": | |
| # Plot using mayavi -Much faster and smoother than matplotlib | |
| import mayavi.mlab | |
| fig = mayavi.mlab.figure(bgcolor=(0, 0, 0), size=(640, 360)) | |
| mayavi.mlab.points3d( | |
| velo[:, 0], # x | |
| velo[:, 1], # y | |
| velo[:, 2], # z | |
| velo[:, 2], # Height data used for shading | |
| mode="point", # How to render each point {'point', 'sphere' , 'cube' } | |
| colormap='spectral', # 'bone', 'copper', | |
| #color=(0, 1, 0), # Used a fixed (r,g,b) color instead of colormap | |
| scale_factor=100, # scale of the points | |
| line_width=10, # Scale of the line, if any | |
| figure=fig, | |
| ) | |
| # velo[:, 3], # reflectance values | |
| mayavi.mlab.show() | |
| else: | |
| # Plot Using Matplotlib - Much slower than mayavi. | |
| # NOTE: Only 1 out of every 100 points are plotted using the matplotlib | |
| # version to prevent crashing the computer | |
| import matplotlib.pyplot as plt | |
| from mpl_toolkits.mplot3d import Axes3D | |
| skip = 100 # plot one in every `skip` points | |
| fig = plt.figure() | |
| ax = fig.add_subplot(111, projection='3d') | |
| velo_range = range(0, velo.shape[0], skip) # skip points to prevent crash | |
| ax.scatter(velo[velo_range, 0], # x | |
| velo[velo_range, 1], # y | |
| velo[velo_range, 2], # z | |
| c=velo[velo_range, 3], # reflectance | |
| cmap='gray') | |
| ax.set_title('Lidar scan (subsampled)') | |
| plt.show() | |
I also had the same error pykitti has changed at least the version which I have and u probably have as well.
Use this will work:
dataset = pykitti.raw(basedir, date, drive)
Also no function for load_velo() so remove line 40.
And dataset.velo is a generator now u can iterate on it:
for velo in dataset.velo:
do whatever u want with the velo pts...
Hi, How do you set up the folder for dataset downloaded from KITTI website? Because when I try to load the velodyne point using method dataset.get_velo(0), it has error:
Traceback (most recent call last):
File "D:/Documents/Python Projects/kitti velodyne/kitti5.py", line 26, in
print(data.get_cam0(0))
File "C:\Users\Welly\Anaconda3\envs\py36\lib\site-packages\pykitti\raw.py", line 48, in get_cam0
return utils.load_image(self.cam0_files[idx], mode='L')
IndexError: list index out of range
my configuration is like this:
basedir = 'data'
date = '2011_09_26'
drive = '0005'
I have the same issue as @liemwellys, and while using dataset.velo[i] like in the original code, I got the error on the generator object not being suscriptable.
Change like below and work fine for me.
dataset = pykitti.raw(basedir, date, drive, frames=frame_range)
velo = dataset.get_velo(0) # Each scan is a Nx4 array of [x,y,z,reflectance]
What is the range for reflectance value in kitti dataset?
I mean what the range of values it varies between?
Change like below and work fine for me.
dataset = pykitti.raw(basedir, date, drive, frames=frame_range)
velo = dataset.get_velo(0) # Each scan is a Nx4 array of [x,y,z,reflectance]
Even with the above change, I get the eror as follows.
File "kitti_lidar.py", line 41, in
velo = dataset.get_velo(0) # Each scan is a Nx4 array of [x,y,z,reflectance]
File "/home/lng/.local/lib/python3.5/site-packages/pykitti/raw.py", line 107, in get_velo
return utils.load_velo_scan(self.velo_files[idx])
IndexError: list index out of range
When I run this, the error occurs:
File "kitti_lidar.py", line 37, in
dataset = pykitti.raw(basedir, date, drive, frame_range)
TypeError: init() takes 4 positional arguments but 5 were given
How do I fix it?