3D Representation
Point Cloud
Point cloud is an important type of geometry data structure.
- Unstructured set of points (x,y,z,a,r,g,b)×N
- Spatial information is hard to capture
- Notion of surface is unclear
- You need to run algorithms to determine which set of points compose a surface
- Point density is not uniform
- Easy to get using commercial Sensors
We use PointNet.
Point Cloud to Voxel
- Build a 3D grid of voxels in the scene
- Average over points at each voxel
- Ready to perform 3D convolutions
Voxel to Pillar
- Average over the voxels in the same dimension
- Ready to perform 2D convlutions
Storage Formats
I ran into this issue while trying to make my VR headset from scratch. Came up with a few ways:
std::vector<Eigen::Vector3f>
(bad because you can’t pass directly to cuda)
float3*
, this is a CUDA thing
Eigen::Vector3f*
- Come up with your own type, but that would be difficult to wrap into cuda kernel
Saw this in this ZED https://github.com/stereolabs/zed-opencv/blob/master/cpp/src/SaveDepth.cpp
This ROS2 node takes in point clouds in a particular frame and republishes in a different frame