๐ก ๋ณธ ๋ฌธ์๋ '[Perception] ํฌ์ธํธ ํด๋ผ์ฐ๋(Point Cloud): PCL PCD'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
pointcloud์ ๋ํ ๊ฐ๋ ๊ณผ ์ด๋ฅผ ํ์ฉํ๊ธฐ ์ํด ํ์ํ ๋ด์ฉ๋ค์ ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. Point Cloud
Lidar ์ผ์, RGB-D์ผ์ ๋ฑ์ผ๋ก ์์ง๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค. ์ด๋ฌํ ์ผ์๋ค์ ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ๋ฌผ์ฒด์ ๋น/์ ํธ๋ฅผ ๋ณด๋ด์ ๋์์ค๋ ์๊ฐ์ ๊ธฐ๋กํ์ฌ ๊ฐ ๋น/์ ํธ ๋น ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ๊ณ์ฐํ๊ณ , ํ๋์ ํฌ์ธํธ(์ )์ ์์ฑํ๋ค.
Point Cloud ๋?
ํฌ์ธํธ ํด๋ผ์ฐ๋๋ 3์ฐจ์ ๊ณต๊ฐ์์ ํผ์ ธ ์๋ ์ฌ๋ฌ ํฌ์ธํธ(Point)์ ์งํฉ(set cloud)๋ฅผ ์๋ฏธํ๋ค.
- ์์๊ฐ ์๋ค
- ์์น ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค {x, y, z}
- ์ข ์ข ๊ทธ ์ธ์ ์ ๋ณด๋ ๊ฐ์ง๊ณ ์๋ค (Color, Reflectance, Descriptor)
Lidar ์ผ์์ RGB-D ์ผ์๋ก ์์ง๋ ๋ฐ์ดํฐ๋ ๊ฐ๊ฐ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ํ๋๋ค.
1) Lidar ์ผ์๋ก ์์ง๋ Point Cloud
2) Stereo ์ผ์๋ก ์์ง๋ Point Cloud
๋ ์ฆ ์ฌ์ด์ ๊ฑฐ๋ฆฌ(baseline)๋ฅผ ์๊ณ ์๊ธฐ์ trianglur๋ฅผ ํด์ 3d landmark ์ ๋ณด๋ฅผ ์ ์ ์์ผ๋ฉฐ, ์ด๋ฏธ์ง ์ฌ์ด์ disparity ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ depth ์ด๋ฏธ์ง๋ฅผ ์ป์ด๋ผ ์ ์๋ค. depth ์ ๋ณด๋ฅผ ์ถ์ถํ๋ฉด intrinsic ์ ๋ณด๋ก point cloud ๋ฅผ ์ ์ ์๋ค.
3) RGB-D ์ผ์๋ก ์์ง๋ Point Cloud
structure ๊ตฌ์กฐ๊ด ์ผ์์์ ๋ฟ๋ฆฐ ํจํด์ ์ฝ์ด depth ์ ๋ณด๋ฅผ ์ถ์ถํ๋ค. ์ ๊ตฐ(Point Cloud)์ 2D ์ด๋ฏธ์ง์ ๋ค๋ฅด๊ฒ ๊น์ด(z์ถ) ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ณธ์ ์ผ๋ก N X 3 Numpy ๋ฐฐ์ด๋ก ํํ๋๋ค.
์ฌ๊ธฐ์ ๊ฐ N ์ค์ ํ๋์ ์ ๊ณผ ๋งตํ์ด ๋๋ฉฐ, 3(x, y, z) ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
2. ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ Point Cloud
1) Point Cloud ํน์ง
์ด๋ฏธ์ง ๋ฐ์ดํฐ
- ๊ธฐ์ค์ ์ ์ผ์ชฝ ์, ์ขํ๊ฐ์ ์ ์๋ก ํํ
- image[row][col] ์ ํตํด ํน์ ํฝ์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ์ ํฝ์ ๊ฐ ์ด๋ ๊ฐ๋ฅ
- ํน์ ๋จ์์ ์ด๋ ๊ฐ๋ฅ
ํฌ์ธํธ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ
- ๊ธฐ์ค์ ์ ์ผ์์ ์์น์ด๋ฉฐ, ์ขํ๊ฐ์ ์ค์๋ก ํํ
- cloud[n_th_element]๋ฅผ ํตํด ํน์ ํฌ์ธํธ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ์ ํฌ์ธํธ ์ ๊ทผ ๋ถ๊ฐ๋ฅ
- ํน์ ๋จ์์ ์ด๋ ๋ถ๊ฐ๋ฅ - voxel(3d pixel)๋ง ๊ฐ๋ฅ
๊ธฐ์ค์ ์ ์ขํ์์ x, y, z ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ด ๋ํ๋ธ๋ค.
2) Point ํน์ง
์ด๋ฏธ์ง ๋ฐ์ดํฐ
- Grayscale ๋ฐ๊ธฐ ๊ฐ ๋๋ RGB ๋ฐ๊ธฐ ๊ฐ(0~255)
ํฌ์ธํธ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ
- Position ๊ฐ
- LiDAR intensity / reflectance
- RGB
- normal - surface(plane) normal vector or reflectance direction
- patch descriptor (e.g. BRIEF)
- ...
3. ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ Point Cloud ๋ฐ์ดํฐ์ ์์น ์ ๋ณด ํํ ๋ฐฉ์
Point Cloud Technology์ ์ดํด๋ฅผ ๋๋ ๋ค์ฏ ๊ฐ์ง ๋ฆฌ์คํธ
- Points are Easy
- Point Cloud Formats
- Point Cloud Library
- Point Clouds Takes Time
- Point Clouds Application
1. Points are Easy
์ ์ฉํ Point Cloud์ ํต์ฌ์ Individual ํ๋ฉฐ Unrelated ํ ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
Point Cloud๋ ์๋์ ์ผ๋ก ์ฝ๊ฒ Edit, Display, Filtering ํ ์ ์๋ ๋ฌด๋ฃ ์ํํธ์จ์ด๋ค์ด ์๋ค. ( e.g. CloudCompare ) ์ปดํจํฐ๋ Point๋ค์ Scale ํน์ Rotation์ ๊ณ ๋ คํ์ง ์์๋ ๋๊ณ , ๊ฐ Point์ Position ์ด๋ Color ์ ๋ณด๋ง์ ์ฌ์ฉํ๋ค. ์ด๋ฌํ ํน์ง์ Detailed Data์ ๋ฐฉ๋ํ ์ฉ๋์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ํ๋ค.
๋ํ, Point Cloud๋ ๊ฑด๋ฌผ ๋๋ ๊ฐ์ฒด์ ์์ฑ์ ์ธก์ ํ๋ ๋ฐ ๋ฐฉํด๋ฅผ ๋ฐ์ง ์๋ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ณ์, ํ๊ต ๋ฐ ์คํฌ์ธ ๊ฒฝ๊ธฐ์ฅ๊ณผ ๊ฐ์ ์ฅ์๋ค์ ์ธก์ ํ๊ธฐ ์ํด ํด๋น ์ฅ์๋ฅผ ํ์ํ ํ์๊ฐ ์๋ค. ๋์ ์, ์ด๋ฌํ ๋ฐฉ๋ฒ์ ํ์ ์๊ฐ ์ดํ์(๊ฐ๋ ์ค์ง ์๊ฐ, ํน์ ์ ๋ฌด ์๊ฐ์ด ์๋ ๋) ์ํํ ์ ์๋ค. ์ด๋ฌํ ์ธก์ ๊ธฐ์ ์ ๋ค๋ฅธ ๋ฐฉ์๋ณด๋ค ํจ์ฌ ๋ ์ ํํ๊ณ ์์ธํ๋ค.
๋ง์ง๋ง์ผ๋ก Point Cloud ์ด์ ์๋ 3D ์ธก๋์ด ๊ฑฐ์ ์์๋ค.
2. Point Cloud Format
- Header : ์ ์ฒด ํฌ์ธํธ ์, ๋ฐ์ดํฐ ํ์ , ํฌ๊ธฐ ๋ฑ์ ์ ๋ณด
- Data : x, y, z ๋๋ x, y, z + ์ถ๊ฐ์ ๋ณด
Header, Data ์์
# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z rgb
SIZE 4 4 4 4
TYPE F F F F
COUNT 1 1 1 1
WIDTH 213
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 213
DATA ascii
0.93773 0.33763 0 4.2108e+06
0.90805 0.35641 0 4.2108e+06
0.81915 0.32 0 4.2108e+06
0.97192 0.278 0 4.2108e+06
0.944 0.29474 0 4.2108e+06
...
๋ฐ์ดํฐ๋ฅผ ์ด๋์ ์ด๋ป๊ฒ, ๋๊ฐ ์ฌ์ฉํ ์ง์ ๋ฐ๋ผ์ Output Format์ ์ ์ค์ ํ์ฌ ์ ์ฅํด์ผ ํฉ๋๋ค.
FIELDS๊ฐ x,y,z,rgb๋ก rgb๊ฐ ํฌํจ๋์ด ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, x,y,z,๋ก rgb๊ฐ ์์ด ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด ๋์ ๊ตฌ๋ถ ํ์ง ์๊ณ load_XYZRGB๋ก ํ์ฝ์ ์ฝ๊ณ , save_XYZ๋ก ์ ์ฅ ํ๋ค๋ฉด ์์ ์ ๋ณด๋ฅผ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ฏ๋ก ์กฐ์ฌ ํด์ผ ํฉ๋๋ค. ์์ธํ *.pcdํ์ผ ํฌ๋งท์ ๋ํ ์ ๋ณด๋ [์ฌ๊ธฐ]์์ ์ป์ ์ ์์ต๋๋ค.
3. Point Cloud Library
Point Cloud๋ฅผ ๋ค๋ฃจ๋ ์ด๋ ํ์ฌ๋ ์กฐ์ง๋ค๋ 100% ์์ ๋ค์ ๊ธฐ์ ๋ ฅ์ผ๋ก Point Cloud๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. Point Cloud๋ฅผ ์ฒ๋ฆฌํ๋ Open Source, ์ฆ Library๋ฅผ ํ์ฉํ๊ธฐ ๋ง๋ จ์ด๋ค. PCL(Point Cloud Library)์ Point Cloud๋ฅผ ๋ค๋ฃจ๋ ์คํ์์ค ์ํํธ์จ์ด์ด๋ค.
์ฐ๊ตฌ์ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ ์์ด ๋ฌด๋ฃ์ด๋ฉฐ, ๋ค์ํ OS์์ ์ปดํ์ผํ ์ ์๋ค.
- pcl_filters : 3D ์ ๊ตฐ ๋ฐ์ดํฐ์์ ์ด์๊ฐ๊ณผ ๋ ธ์ด์ฆ ์ ๊ฑฐ ๋ฑ์ ํํฐ๋ง
- pcl_features : ์ ๊ตฐ ๋ฐ์ดํฐ๋ก๋ถํฐ 3D ํน์ง ์ถ์ (feature estimation) ์ ์ํ ์๋ง์ ์๋ฃ ๊ตฌ์กฐ์ ๋ฐฉ๋ฒ๋ค
- pcl_keypoints : Keypoint (or interest point) ์ ๊ฒ์ถํ๋ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ (BRISK, Harris Corner, NARF, SIFT, SUSAN ๋ฑ)
- pcl_registration : ์ฌ๋ฌ ๋ฐ์ดํฐ์ ์ ํฉ์ณ ํฐ ๋ชจ๋ธ๋ก ๋ง๋๋ registration ์์ (ICP ๋ฑ)
- pcl_kdtree : ๋น ๋ฅธ ์ต๊ทผ๊ฑฐ๋ฆฌ ์ด์์ ํ์ํ๋ FLANN ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ kdtree ์๋ฃ ๊ตฌ์กฐ
- pcl_octree : ์ ๊ตฐ ๋ฐ์ดํฐ๋ก๋ถํฐ ๊ณ์ธต ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
- pcl_segmentation : ์ ๊ตฐ์ผ๋ก๋ถํฐ ํด๋ฌ์คํฐ๋ค๋ก ๊ตฌ๋ถํ๋ ์๊ณ ๋ฆฌ์ฆ๋ค
- pcl_sample_consensus : ์ , ํ๋ฉด, ์ค๋ฆฐ๋ ๋ฑ์ ๋ชจ๋ธ ๊ณ์ ์ถ์ ์ ์ํ RANSAC ๋ฑ์ ์๊ณ ๋ฆฌ์ฆ๋ค
- pcl_surface : 3D ํ๋ฉด ๋ณต์ ๊ธฐ๋ฒ๋ค (meshing, convex hulls, Moving Least Squares ๋ฑ)
- pcl_range_image : range image (or depth map) ์ ๋ํ๋ด๊ณ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
- pcl_io : OpenNI ํธํ depth camera ๋ก๋ถํฐ ์ ๊ตฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ฐ๋ ๋ฐฉ๋ฒ
- pcl_visualization : 3D ์ ๊ตฐ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๊ฒฐ๊ณผ๋ฅผ ์๊ฐํ
4. Point Cloud Takes Time
Point Cloud ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ํต์ฌ์ ์ค์บ๋ ํ๋ฉด์ ๋ํ Access / Visibility ์ด๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ, Point Cloud๋ ์ค์ ๊ฐ์ฒด์ ๋ํ ๊ฐ์์ ์ ๊ทผ(Visiable access)๋ฅผ ํตํด ์ป๋๋ค. ์ด๊ฒ์ ๋จ์ํ ๋ชจ๋ ์ค์บ ์์น๋ฅผ ์ปค๋ฒํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๋ ์๋ฏธ์ด๋ค.
์์์ ๋ชจ๋ ์์น์ ๋ํด ์ค์บํ์ฌ ๊ฐ์ ธ์จ "๋ ์ด์ ์ค์บ"์ ์ ๋ ฌํ๋ ๊ฒ๋ ๋ฌธ์ ๊ฐ ๋ ์ ์๋ค. Target์ด ์ค์ ๋์๊ฑฐ๋, ์์ง์ด๋ Target์ ์ ๋ ฌํ๋ ค๊ณ ํ ์๋ ์๊ณ , ํน์ Target์ ์ ํ์ง ์๊ณ ์ค์บํ ๋ค ์ปดํจํฐ๋ก ๊ต์ฐจ๊ฒ์ฆ์ ํ๋ฉฐ ์๋์ ์ผ๋ก ์ค๋ฒ๋ฉํํ๋ ์ค์บ๋ฐฉ์์ ์ฌ์ฉํ ์๋ ์๋ค.
์ ํต์ ์ผ๋ก, Target์ placement๋ฅผ ํผํจ์ผ๋ก์จ ์ ์ฝ๋ ์๊ฐ์ ์ฌ๋ฌด์ค์์ ๋ณด๋ด๋ ์๊ฐ๋ณด๋ค ๋ ์๊ฐ ์๋ชจ๊ฐ ํฌ๋ค. ์๋ฅผ ๋ค์ด, ์ค๊ฐ ๊ท๋ชจ ๊ฑด๋ฌผ์ 130๊ฐ์ ์ค์บ ํฌ์ธํธ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฑฐ์ 25 ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์๋ค. ์ด๋ฌํ ์ค์บ์ ์์งํ๋ ๋ฐ ํ๋ฃจ ๋ฐ์ ๊ฑธ๋ฆฌ์ง ์์์ ์ ์์ง๋ง, ์๋๋ฐฉ์์ผ๋ก ํ๋ ์ฒ๋ฆฌ๋ฐฉ๋ฒ์ ํด๋น ํฌ์ธํธ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ ์ธํธ์ ๋ฑ๋ก์ ์ํํ๋ ๋ฐ ์ฝ 3 ์ผ์ด ์์๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ , ์๋ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ๋ ์ค๋ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ๊ธฐ์กด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ 28-scan ๋ฐ์ดํฐ ์ธํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฃํ๋ ๋ฐ 4 ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค.
Missing link๋ฅผ ์ํ Practical Targetless Registraion์ ๊ฐ๋ฐ์ automated processing software๋ก ํ๋ค.
5. Point Cloud Application
ํฌ์ธํธ ํด๋ผ์ฐ๋๋ Application ์์ญ์์ ์ ์ ๋ ๊ด๋ จ์ฑ์ด ๋์์ง๊ณ ์๋ค. 3D Point Cloud์ ๋ฐ์ดํฐ ๊ฐ์ฉ์ฑ, ์ ํ์ฑ, ๋ฐ๋ ๋ฐ ํฌ๊ธฐ(availability, accuracy, density, and size)๋ ํฅํ ๋ช ๋ ๋ด์ ํฌ๊ฒ ์ฆ๊ฐํ ๊ฒ์ผ๋ก ์์๋๋ค. ๊ธฐ์ ์ ๋ฐ์ ์ผ๋ก ์ค์บ๋์ ํฌ์ธํธ ํด๋ผ์ฐ๋๊ฐ ์ด๋ฌํ ์ ์ฌ๋ ฅ์ ์คํํ ๊ฒ์ด๋ค. ๋จธ์ ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ vector analysis๋ฅผ ํตํฉํ Point Cloud ์ฒ๋ฆฌ๋ ์๋๋ฅผ ํฌ๊ฒ ๋์ด๊ณ , ์ค์บ ์ ๋ ฌ์ ์๋์ผ๋ก ๊ฐ์ ํ ํ์์ฑ์ ์ค์ฌ์ค๋ค.
๊ธฐ์กด์ ์๋ ๋๋ถ๋ถ์ Registration Solution
- ๊ฐ ์ค์บ์์ ์ธ๊ณต ํ์ , ํ๋ฉด, ์ ๊ณผ ๊ฐ์ ํน์ง์ ์๋ณํ์ฌ ์๋ํ๋ค.
- ์ด๋ฌํ ๊ฐ์ฒด๋ ๊ฒน์น๋ ์ค์บ์ ์ ๋ ฌํ๊ธฐ ์ํ ์ฐธ์กฐ๋ก ์ฌ์ฉํ๋ค.
- ๊ทธ๋ฌ๋, ๋จธ์ ๋ฌ๋์ ์กด์ฌ๋ ์ด์ ์ค์บ๋ ํ๊ฒฝ์ "Natural Features" ๋ค์ "Virtual" ์ฐธ์กฐ๋ก ๋์ ์ฌ์ฉํ ์ ์๋ค.
- ์ผ๋ฐ์ ์ธ ์ค์บ์์ ์๋ณ๋ ์ด๋ฌํ Natural Features๊ฐ ์๋ฐฑ๋ง๊ฐ์ ๋ฌํ์ฌ ์ ๋ ฌ ์๋๋ฅผ ๋์ด๊ณ , ์ ํ๋๋ฅผ ๋์ผ ์ ์๋ค.
์ด๋ฌํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ํฌ์ธํธ ํด๋ผ์ฐ๋ ์ฒ๋ฆฌ์ ํจ์จ์ฑ์ด ์ด๋ฏธ 40~80% ๊น์ง ๊ฐ์ ๋ ๊ฒฝ์ฐ๋ ์๋ค. ์๋ฅผ ๋ค์ด, ์ด์ Fact 4์์ ๋งํ๋ "28-scan ๋ฐ์ดํฐ ์ธํธ"๋ ์ด์ ์๋ฃํ๋ ๋ฐ 4์๊ฐ์ด ์๋ ์ฝ 1์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค. ์๋ก์ด ๊ธฐ์ ๋ก ์ธํ ๋น์ฉ ์ ๊ฐ์ ํฌ์ธํธ ํด๋ผ์ฐ๋ Application์ ๋ํ ๊ธฐํ๋ฅผ ๋์ฑ ์ด์ด์ค๋ค.
์ด๋ฏธ ์๋ก์ด ์ฌ๋๋ค์ด ํฌ์ธํธ ํด๋ผ์ฐ๋ Producers and users ๋ก์ ์์ฅ์ ์ง์ ํ๊ณ ์์ผ๋ฏ๋ก, ๋ฏธ๋๋ ๋ฐ์๋ณด์ธ๋ค!
์ฐธ๊ณ
- [Pointcloud] The PCD (Point Cloud Data) file format: https://pointclouds.org/documentation/tutorials/pcd_file_format.html
- [Blod] [๋ณ์ฒจ] PCL & PCD๋ (100%): https://pcl.gitbook.io/tutorial/part-0/part00-chapter01