pykv package¶
Submodules¶
pykv.geo module¶
Geo¶
Functions for general geometric problems
Created on Wed Oct 30 22:00:43 2019
@author: andmo55
-
pykv.geo.angleaxis_from_w(ws)¶
-
pykv.geo.exp_skew(so, out=None)¶ Exponential of a list of skew-symmetric matrices so(3), i.e., the result is a list of rotations SO(3). It applies Rodrigues’ formula.
\[e^{[\boldsymbol\omega]_\times} = \mathrm{I}_3 + \sin\theta[\boldsymbol\omega]_\times + (1-\cos\theta)[\boldsymbol\omega]_\times^2, \hspace{2em}\theta=\|\boldsymbol\omega\|\]- so: ndarray(…,3,3)
The ndarray of skew-symmetric matrices
- out: ndarray(…,3,3)
The ndarray of rotation matrices (if
Noneis supplied, a new array is created)
- SO: ndarray(…,3,3)
The ndarray of rotation matrices
>>> import pcdlib as pc >>> import numpy as np >>> aa = [1,2,3] >>> so = pc.skew_from_angleaxis(aa) >>> pc.exp_skew()
-
pykv.geo.exp_skew_from_w(ws, out=None, so=None, theta=None, sintheta=None, costheta=None, dtype=<class 'numpy.float32'>)¶ Exponential of skew-symmetric matrices directly from angle-axis vectors. Some intermediate steps (so, theta, sintheta, costheta) can be provided for efficiency (they are generated and returned if not provided).
- ws: ndarray or list
list of angle-axis vectors
- out: ndarray
list of 3x3 special orthogonal (SO) matrices (if
None, then a new array is created)
so: ndarray
theta: ndarray
sintheta: ndarray costheta: ndarray
- ndarray
list of 3x3 special orthogonal (SO) matrices
- ndarray
list of skew-symmetric matrices
- ndarray
list of angles
- ndarray
list of sines of angles
- ndarray
list of cosines of angles
-
pykv.geo.frustum(l, r, b, t, n, f, out=None, dtype=<class 'numpy.float32'>)¶ Creates a perspective matrix from parameters of its frustrum Node: numpy uses row-major order (OpenGL uses column-major), so you see the transpose of common OpenGL frustrum matrices in the literature
dtype l: float
left
- r: float
right
- b: float
bottom
- t: float
top
- n: float
near
- f: float
far
- out: ndarray (4x4) (default:
None) perspective matrix (preallocated or fresh new)
- ndarray(4x4)
perspective matrix
-
pykv.geo.log_SO(SO, out=None)¶ Compute the logarithm of special orthogonal matrices (SO(3)), resulting in skew-symmetric matrices (so(3)) or angle-axis w
\[\log (R\in SO(3)) = \log e^{[\omega]_\times} = [\omega]_\times \in so(3)\]- SO: ndarray(…,3,3)
The rotation matrices in SO(3)
- angleaxis: bool (default:
False) Trueto return just the angle-axis vectors instead of skew symmetric matrices.- out: ndarray(…,3,3) or ndarray(…,3) (default:
None) Array of skew-symmetric matrices or angle-axis vectors (if
None, a new array is generated and returned)
- out: ndarray(…,3,3)
Array of skew-symmetric matrices
- what: ndarray(…,3)
Array of directions
- theta: ndarray(…,3)
Array of angles
>>> >>> >>>
-
pykv.geo.ortho(l, r, b, t, n, f, out=None, dtype=<class 'numpy.float32'>)¶ Ortographic projection matrix
dtype l r b t n f out
-
pykv.geo.perspective(fov=45, aspect=1.8, near=0.1, far=100, out=None, dtype=<class 'numpy.float32'>)¶ Symmetric perspective projection matrix. It uses the same
- fov: float
define the vertical field of view (in degrees)
- aspect: float
relation between horizontal and vertical sizes
- near: float
positive (near > 0) number
- far: float
positive (far > near > 0) number
- out: ndarray
preallocated or new array
- dtype
type of new array (if
outis None)
- ndarray
preallocated (if out != None) or fresh new array
-
pykv.geo.rigid(pcd, R, out=None)¶
-
pykv.geo.rotate(M, n, theta, out=None)¶
-
pykv.geo.scale(M, s, out=None)¶
-
pykv.geo.skew_from_angleaxis(n=None, theta=None, ws=None, out=None)¶ Convert angle-axis vectors to skew-symmetric matrices
-
pykv.geo.skew_from_w(ws, out=None)¶ Convert angle-axis vectors to skew-symmetric matrices. Opposite:
angleaxis_from_skew.\[\boldsymbol\omega\mapsto[\boldsymbol{\omega}]_\times, \hspace{2em} \boldsymbol{\omega} = \theta \hat{\boldsymbol{\omega}}\]- ws: ndarray(…,3)
ND list/array of angle-axis vectors
- out: ndarray(…,)
Pre-allocated array for storing the skew-symmetric matrices (if
None, a new fresh array is allocated and returned)
- so: ndarray(…,3, 3)
(N+1)D array of skew-symmetric matrices
>>> import pcdlib as pc >>> import numpy as np >>> pc.skew_from_angleaxis(np.random.rand(2,3)) array([[[ 0. , -0.18267483, 0.66990937], [ 0.18267483, 0. , -0.154273 ], [-0.66990937, 0.154273 , 0. ]], [[ 0. , -0.63770203, 0.70667849], [ 0.63770203, 0. , -0.36215796], [-0.70667849, 0.36215796, 0. ]]])
-
pykv.geo.translate(t, M=None, out=None, dtype=<class 'numpy.float32'>)¶ Translate a NxN matrix M by a (N-1)-D vector. If M is
None, then a new translation matrix is created- t: list or ndarray
the translation vector of size N-1.
- M:
the source matrix of size NxN (identity if not provided)
- out
the destination matrix (
Nonefor new matrix, notNonefor existing one, or even M). Default:None.
- out
the destination matrix (
Nonefor new matrix, notNonefor existing one, or even M). Default:None.
-
pykv.geo.w_from_skew(so, out=None)¶ Extract angle-axis vectors from skew-symmetric matrices. Opposite:
skew_from_angleaxis.\[f:so=[\boldsymbol{\omega}]_\times\mapsto{\boldsymbol{\omega}}, \hspace{2em} \theta = \|\boldsymbol{\omega}\| \hspace{1em} \hat{\boldsymbol{\omega}} = \frac{\boldsymbol{\omega}}{\theta}\]- so: ndarray(…,3,3)
ND list/array of skew-symmetric matrices
- out: ndarray(…,3)
ND list of angle-axis vectors (if
Noneis supplied, a new array is created).
- out: ndarray(…,3)
ND list of angle-axis vectors.
>>> import pcdlib as pc >>> aa = [1,2,3] >>> so = pc.skew_from_angleaxis(aa) >>> aa2 = pc.angleaxis_from_skew(so) >>> aa2 array([1., 2., 3.])
pykv.kitti module¶
pykv.ouster module¶
-
pykv.ouster.apply_px_offset(images, px_offset, im=None)¶ Apply offset Parameters ———- images px_offset
-
pykv.ouster.get_px_offset(W: int)¶ Get the offsets for each row of range images generated by Ouster lidar devices
W: width of the image
ndarray(64)
-
pykv.ouster.make_xyz_lut(W, H, azimuth_angles, altitude_angles)¶ Create the rays for the ouster lidar data, assuming constant device rotation speed.
W: width of the image (number of angles) H: height of the image (number of lasers) azimuth_angles (initial horizontal offset for each laser) altitude_angles (vertical angle for each laser)
- ndarray(H, W, 3)
the set of HW rays which represents
pykv.ouster_rosbag module¶
Created on Wed Oct 30 13:07:02 2019
@author: andmo55
-
pykv.ouster_rosbag.bag2ndarray(bagfilename, H=64, W=1024)¶ Convert a ROS bag to Numpy structured array in NPZ file format Parameters ———- bagfilename
-
pykv.ouster_rosbag.get_nframes(bag, topics)¶