๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์‹ค์ œ LiDAR ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•

728x90
๋ฐ˜์‘ํ˜•

๐Ÿ—‚๏ธ ์‹ค์ œ LiDAR ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์‹œ๊ฐํ™” ๋ฐฉ๋ฒ•


๐ŸŒ 1. ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ

๐Ÿ”” ์ถ”์ฒœ ๊ณต๊ฐœ LiDAR ๋ฐ์ดํ„ฐ์…‹:

  1. KITTI Vision Benchmark Suite (์ž์œจ์ฃผํ–‰์šฉ ๋ฐ์ดํ„ฐ)
    • ์›น์‚ฌ์ดํŠธ: KITTI Dataset
    • ๐Ÿ“ ๋ฐ์ดํ„ฐ ํ˜•์‹: .bin (์  ๊ตฌ๋ฆ„), .png (์ด๋ฏธ์ง€)
    • ๐Ÿš— ํŠน์ง•: ์ž์œจ์ฃผํ–‰ ์ฐจ๋Ÿ‰ ์„ผ์„œ ๋ฐ์ดํ„ฐ (LiDAR, ์นด๋ฉ”๋ผ ํฌํ•จ)
  2. SemanticKITTI (KITTI ํ™•์žฅ ๋ฒ„์ „ - ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ๋ผ๋ฒจ ํฌํ•จ)
    • ์›น์‚ฌ์ดํŠธ: SemanticKITTI
    • ๐Ÿ“ ๋ฐ์ดํ„ฐ ํ˜•์‹: .bin + .label
  3. Ford LiDAR Dataset
    • ์›น์‚ฌ์ดํŠธ: Ford Campus Dataset
    • ๐Ÿข ํŠน์ง•: ๋„์‹ฌ ์ฃผํ–‰ LiDAR ๋ฐ์ดํ„ฐ
  4. Open3D ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ (๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ์— ์ถ”์ฒœ)
    • GitHub: Open3D Sample Data
    • ๐Ÿ“ ํŒŒ์ผ ์˜ˆ์‹œ: fragment.pcd, sample.ply ๋“ฑ

๐Ÿš— KITTI Dataset ๋‹ค์šด๋กœ๋“œ (์ž์œจ์ฃผํ–‰ ๋ฐ์ดํ„ฐ)

๐Ÿ”— KITTI ํ™ˆํŽ˜์ด์ง€: KITTI Vision Benchmark

๐Ÿ’ป ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํ•ด์ œ:

bash
wget http://www.cvlibs.net/download.php?file=data_odometry_velodyne.zip unzip data_odometry_velodyne.zip
โœ… ๋‹ค์šด๋กœ๋“œ ์™„๋ฃŒ ํ›„:
data_odometry_velodyne/dataset/sequences/00/velodyne/ ๊ฒฝ๋กœ์— .bin ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ํŒŒ์ผ ์กด์žฌ

โœ… KITTI .bin ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์ฝ”๋“œ

 
import open3d as o3d 
import numpy as np 

def load_kitti_bin(file_path): 
	data = np.fromfile(file_path, dtype=np.float32).reshape(-1, 4) 
    	points = data[:, :3] # XYZ ์ขŒํ‘œ๋งŒ ์‚ฌ์šฉ 
	return points 
    
# ๐Ÿ“‚ .bin ํŒŒ์ผ ๊ฒฝ๋กœ     
bin_file = "data_odometry_velodyne/dataset/sequences/00/velodyne/0000000000.bin" 

# ๋ฐ์ดํ„ฐ ๋กœ๋“œ 
points = load_kitti_bin(bin_file) 

# ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ์ƒ์„ฑ ๋ฐ ์‹œ๊ฐํ™” 
pcd = o3d.geometry.PointCloud() 
pcd.points = o3d.utility.Vector3dVector(points) 
o3d.visualization.draw_geometries([pcd], window_name="KITTI LiDAR Point Cloud")

โœ… ์‹คํ–‰ ์‹œ: KITTI ์ž์œจ์ฃผํ–‰ ๋ฐ์ดํ„ฐ์˜ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ํ‘œ์‹œ ๐Ÿš—๐Ÿ“ก

 

 

๐Ÿ”ฅ Open3D ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ ๋‹ค์šด๋กœ๋“œ (๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•)

๐Ÿ’ป ํ„ฐ๋ฏธ๋„ ์‚ฌ์šฉ ์‹œ (Linux/macOS/Windows WSL):

bash
wget https://github.com/isl-org/Open3D/releases/download/20220201-test_data/fragment.pcd

 

๋˜๋Š” ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ

fragment.pcd ๋‹ค์šด๋กœ๋“œ ๋งํฌ


๐Ÿ“ 2. ๋‹ค์šด๋กœ๋“œํ•œ LiDAR ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ์ฝ”๋“œ

 

๐Ÿ“ฅ Open3D๋กœ .pcd ํŒŒ์ผ ์‹œ๊ฐํ™”

python
import open3d as o3d 

# ๐Ÿ“‚ ๋‹ค์šด๋กœ๋“œํ•œ .pcd ํŒŒ์ผ ๊ฒฝ๋กœ 
pcd_file = "fragment.pcd" 
# ๐Ÿ—‚๏ธ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ๋กœ๋“œ 
pcd = o3d.io.read_point_cloud(pcd_file) 
# ๐Ÿ“Š ์‹œ๊ฐํ™” ์‹คํ–‰ 
o3d.visualization.draw_geometries([pcd], window_name="LiDAR Point Cloud", width=800, height=600, point_show_normal=False)
 

๐Ÿ”Ž ๊ธฐ๋Šฅ:
โœ… ํšŒ์ „: ๋งˆ์šฐ์Šค ์ขŒํด๋ฆญ
โœ… ์ด๋™: ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ
โœ… ํ™•๋Œ€/์ถ•์†Œ: ๋งˆ์šฐ์Šค ํœ 


๐ŸŽจ 3. ์ปฌ๋Ÿฌ ํฌ์ธํŠธ ํด๋ผ์šฐ๋“œ ์‹œ๊ฐํ™” (์˜ต์…˜)

python
 
import open3d as o3d 
import numpy as np 

# PCD ํŒŒ์ผ ๋กœ๋“œ 
pcd = o3d.io.read_point_cloud("fragment.pcd") 
# ๋ฌด์ž‘์œ„ ์ปฌ๋Ÿฌ ์ถ”๊ฐ€ 
colors = np.random.rand(np.asarray(pcd.points).shape[0], 3) pcd.colors = o3d.utility.Vector3dVector(colors) 
# ์‹œ๊ฐํ™” 
o3d.visualization.draw_geometries([pcd], window_name="Colored LiDAR Point Cloud", width=800, height=600)
 

โœ… ๊ฐ ์ ์— ๋ฌด์ž‘์œ„ ์ƒ‰์ƒ์ด ์ ์šฉ๋˜์–ด ์‹œ๊ฐ์ ์œผ๋กœ ๋” ์ง๊ด€์ ์ž…๋‹ˆ๋‹ค.


๐Ÿ† 4. ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ (์˜ต์…˜)

โœ… ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ:

# ํ†ต๊ณ„์  ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ 
pcd, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) o3d.visualization.draw_geometries([pcd])

 

โœ… Voxel Downsampling (๋ฐ์ดํ„ฐ ๊ฒฝ๋Ÿ‰ํ™”)

pcd_down = pcd.voxel_down_sample(voxel_size=0.05) o3d.visualization.draw_geometries([pcd_down])

 

โœ… ๋…ธ๋ฉ€ ๋ฒกํ„ฐ ์‹œ๊ฐํ™”

pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)) o3d.visualization.draw_geometries([pcd], point_show_normal=True)

๐Ÿš€ ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์ถ”์ฒœ ํ๋ฆ„:

  1. ๊ฐ„๋‹จํžˆ ์‹œ๊ฐํ™”: Open3D ์ƒ˜ํ”Œ ๋ฐ์ดํ„ฐ๋กœ ๋น ๋ฅด๊ฒŒ ํ™•์ธ
  2. ์ž์œจ์ฃผํ–‰ ๋ฐ์ดํ„ฐ ์—ฐ์Šต: KITTI๋‚˜ SemanticKITTI๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ
  3. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ๋ฐ ์ตœ์ ํ™”: ๋…ธ์ด์ฆˆ ์ œ๊ฑฐ, ๋‹ค์šด์ƒ˜ํ”Œ๋ง ์ ์šฉ
  4. SLAM์ด๋‚˜ ๊ฐ์ฒด ์ธ์‹์— ํ™•์žฅ: LiDAR ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์ „ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ

 

 

๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ:

  • ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„ ์—…๋ฐ์ดํŠธ
  • Python 3.8~3.10 ๊ถŒ์žฅ
728x90
๋ฐ˜์‘ํ˜•