run_slam_rgb.py

About_work·2024년 8월 4일
0

global mapper

목록 보기
29/37

-0. README.md 내용

4.1. (선택 사항) 정상 작동 여부를 확인하기 위한 일반 3D reconstruction 실행

SCENE_NAME=room0
python scripts/run_slam_rgb.py \
    --dataset_root $REPLICA_ROOT \
    --dataset_config $REPLICA_CONFIG_PATH \
    --scene_id $SCENE_NAME \
    --image_height 480 \
    --image_width 640 \
    --stride 5 \
    --visualize

1. 목적

1.1. dataset 인스턴스 생성

1.2. PointFusion 인스턴스 생성

1.3. pointclouds, _ = PointFusion.step(pointclouds, frame_cur, frame_prev)

  • dataset에서 데이터를 꺼내오면서, 이미지를 업데이트
  • _localize
    • 전 frame의 pointcloud와, 현 frame의 pointcloud 간 ICP를 gradient optimization 방법으로 최적화
    • 이를 통해, 전 frame에 비해, 현 frame에 센서가 얼마만큼 이동했는지 Return
  • _map
    • _localize에서 도출한 센서 이동 pose값을 이용해서, 현재 frame를 global coordinate로 변환
    • 센서와 거리가 멀수록, 신뢰도를 낮게 책정
    • 기존에 있었던 pointcloud와 거리기준 + 방향기준이 일치하는 점을 찾아서 매칭
    • 매칭되면, 신뢰도를 기반으로 누적 평균을 통해, points/normals/colors/features/embeddings 를 업데이트 함
    • 매칭 안되면, 새로운 pointcloud를 추가함

1.4. h5py 로 저장

  • pointcloud의 point, color, feature, embedding, confidence 를 각각 저장함

1.5. 결과를 pcd 객체로 생성

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(numpy_points)
pcd.colors = o3d.utility.Vector3dVector(numpy_colors)
pcd.normals = o3d.utility.Vector3dVector(numpy_normals)
  • 원하면, pcd 도 저장 가능

1.6. visualize

  • o3d.visualization.draw_geometries([pcd])

2. 질문

  • 사람은 어떻게 걸러내는가?
    • point별로 신뢰도를 계속 누적시키는데, 이 값에 대한 threshold를 두면 될듯
  • real-time으로는 어떻게 구동할 수 있는가?
  • voxel 방식으로 작동시킬순 없나?

profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글