Open3D

LiDAR 같은 경우 point cloud 데이터를 처리

Point Cloud를 처리하는 대표적인 라이브러리는 PCL과 Open3D

OS : Ubuntu 23.10

GPU : NVIDIA GeForce RTX 4080 Laptop GPU

ROS version: ROS1 Noetic



Open3D 설치

1. 지원 환경 확인

  • Python 3.7 이상
  • Ubuntu 18.04 이상
  • macOS 10.15 이상
  • Windows 10 64 bit 이상


2. Open3D 설치

  • pip을 이용한 설치

    pip install open3d
    
  • 설치 확인

    python -c "import open3d as o3d; print(o3d.__version__)"
    


3. Docker 이용한 설치

내가 가장 많이 사용하는 pytorch docker image를 이용하여 실습 진행

  • 그냥 귀찮아서…

Error 해결

아래 예시를 진행하면서 open3d를 이용하여 시각화를 진행하는 과정 중에서 아래와 같은 에러가 발생

libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast
[Open3D WARNING] GLFW Error: GLX: Failed to create context: BadMatch (invalid parameter attributes)
[Open3D WARNING] Failed to create window
[Open3D WARNING] [DrawGeometries] Failed creating OpenGL window.

아무리 고치려고 해도 힘들었는데 공식 문서에서 제공해준 방법대로 docker run을 하여 해결함..

--gpus 'all,"capabilities=compute,utility,graphics"'

--gpus all 를 위와 같이 바꾸어 실행하였더니 해결됨

공식문서 잘 읽어야겠다..

docker run --gpus 'all,"capabilities=compute,utility,graphics"'\
-v /tmp/.X11-unix:/tmp/.X11-unix:ro \
--device=/dev/video0:/dev/video0 \
-e DISPLAY=$DISPLAY \
-v /workspace:/workspace \
--ipc=host --env QT_X11_NO_MITSHM=1 \
--name o3d_example -it \
pytorch/pytorch:2.0.0-cuda11.7-cudnn8-devel 



Open3D 실습

설치 확인을 위한 실습

포인트 클라우드 불러오기

  • Open3D에서 기본으로 제공하는 예제 또는 가지고 있는 ply 파일 통해 불러오기 가능
ply_point_cloud = o3d.data.PLYPointCloud() # PLYPointCloud 객체 생성

# o3d.id.read_point_cloud("test.ply") # 보통 이런 방식으로 불러옴
# 일단은 별도로 가지고 있지 않기 때문에 기본 제공 데이터 사용

pcd = o3d.io.read_point_cloud(ply_point_cloud.path)


print(pcd)
print(np.array(pcd.points))
print(np.array(pcd.colors))
print(np.array(pcd.normals))

o3d.visualization.draw_geometries([pcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795], # camera front view에 대한 설정 
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])


Screenshot from 2024-04-03 23-07-51


Attribute error: module ‘open3d’ has no attribute ‘data’라는 오류 발생

  • open3d 0.15 이상 version 설치


다운샘플링

downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries([downpcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795], # camera front view에 대한 설정 
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024])


Screenshot from 2024-04-03 23-22-59


노말 벡터 추정

if downpcd.has_normals(): # Downsample 된 point가 normal을 가지고 있음을 의미
    print("True")
else:
    print("False")

downpcd.estimate_normals(
    search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)
)
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw_geometries([downpcd],
                                  zoom=0.3412,
                                  front=[0.4257, -0.2125, -0.8795], # camera front view에 대한 설정 
                                  lookat=[2.6172, 2.0475, 1.532],
                                  up=[-0.0694, -0.9768, 0.2024],
                                  point_show_normal=True)


Screenshot from 2024-04-03 23-26-54



참고

  1. https://www.open3d.org/docs/release/docker.html
  2. https://stackoverflow.com/questions/71367061/attribute-error-module-open3d-has-no-attribute-data

카테고리:

업데이트: