볼륨 기반 재구성 백엔드
로 구동되는 이 시스템은 프레임-투-모델 추적을 사용하는 밀집형 RGB-D SLAM 시스템을 제공examples/python/t_reconstruction_system/dense_slam.py
와 GUI 데모인 examples/python/t_reconstruction_system/dense_slam_gui.py
에서 찾을 수 있습니다. 실시간 볼륨 처리의 시범을 위한 것
SLAM 시스템에서는
합성 프레임
을 유지현재 3D 모델을 2D 이미지 평면에 투영한 것
# examples/python/t_reconstruction_system/dense_slam.py
T_frame_to_model = o3d.core.Tensor(np.identity(4))
model = o3d.t.pipelines.slam.Model(config.voxel_size, 16,
config.block_count, T_frame_to_model,
device)
depth_ref = o3d.t.io.read_image(depth_file_names[0])
input_frame = o3d.t.pipelines.slam.Frame(depth_ref.rows, depth_ref.columns,
intrinsic, device)
raycast_frame = o3d.t.pipelines.slam.Frame(depth_ref.rows,
depth_ref.columns, intrinsic,
device)
# examples/python/t_reconstruction_system/ray_casting.py
for i in range(n_files):
start = time.time()
depth = o3d.t.io.read_image(depth_file_names[i]).to(device)
color = o3d.t.io.read_image(color_file_names[i]).to(device)
input_frame.set_data_from_image('depth', depth)
input_frame.set_data_from_image('color', color)
if i > 0:
result = model.track_frame_to_model(input_frame, raycast_frame,
config.depth_scale,
config.depth_max,
config.odometry_distance_thr)
T_frame_to_model = T_frame_to_model @ result.transformation
poses.append(T_frame_to_model.cpu().numpy())
model.update_frame_pose(i, T_frame_to_model)
model.integrate(input_frame, config.depth_scale, config.depth_max)
model.synthesize_model_frame(raycast_frame, config.depth_scale,
config.depth_min, config.depth_max, False)
config.odometry_distance_thr
: 입력 프레임
과 합성 프레임
간의 RGB-D 오도메트리(https://www.open3d.org/docs/0.14.1/tutorial/pipelines/rgbd_odometry.html)의 텐서 버전을 수행T_frame_to_model
을 누적하여 얻을 수 있음Q: 추적이 실패한 이유는 무엇인가요?
A:
RealSense D435의 경우 1000
, TUM 데이터셋의 경우 5000). Q: 그렇다면 왜 내 추적이 실패했나요?
A:
추후 피처 기반 추적에 대한 지원을 추가할 예정
루프 클로저
를 감지하지 않으며, 현재 포즈 그래프 최적화
나 번들 조정
도 수행하지 않음Q: 왜 루프 클로저나 재위치화를 구현하지 않았나요?
A:
실시간 볼륨 변형 및/또는 재통합이 필요하기 때문