모션 보상
라이다 설정을 어노테이션할 때의 근본적인 문제는, 결과로 나온 포인트 클라우드가 한 순간의 스냅샷이 아니라 라이다 스윕이 이루어진 시간 구간에 걸쳐 기록된다는 점입니다. 이로 인해 어노테이션 중 문제가 발생하는데, 객체가 라이다 스윕 도중 움직일 수 있고, 예를 들어 3D 박스로 차를 어노테이션하려고 하면 그 박스는 실제 차의 크기를 나타내지 못하게 됩니다. 이 문제는 모션 보상을 통해 완화할 수 있으며, 이는 포인트 클라우드 내 모든 포인트의 타임스탬프를 동기화하는 방식입니다.
자차의 관성 측정 장치(IMU) 데이터를 포함시키면 라이다 스윕이 이루어지는 동안 차가 어떻게 움직였는지에 대한 정확한 궤적을 얻을 수 있습니다. 이를 통해 포인트 클라우드 내 포인트들이 같은 시점을 나타내도록 조정하는 모션 보상을 수행할 수 있습니다.
또한, 제공된 포인트 클라우드의 각 포인트는 모션 보상이 동작할 수 있도록 유닉스 타임스탬프(나노초 단위)를 지정해야 합니다.
포인트를 모션 보상할 시점은 unix_timestamp 파라미터로 지정할 수 있습니다. 지정하지 않으면 각 프레임에 대해 프레임 내 모든 포인트의 중앙값 시각이 대신 사용됩니다.
모션 보상은 다중 라이다 설정에서처럼 여러 라이다 스윕에 대해 한 번에 어노테이션을 수행할 때나, 프레임 전체에 걸쳐 포인트 클라우드가 집계될 때 특히 중요합니다.
모든 유닉스 타임스탬프는 나노초 단위여야 합니다
모션 보상이 올바르게 동작하려면 일관된 시간 단위를 사용하는 것이 중요합니다. 따라서 모든 유닉스 타임스탬프는 나노초 단위로 제공되어야 합니다.
포인트 클라우드 내 모든 타임스탬프와 제공된 unix_timestamp는 imu 데이터의 타임스탬프 범위 내에 포함되어야 함에 유의하세요. 그렇지 않으면 씬 생성이 실패합니다.
IMU 데이터는 객체의 루트에 다음과 같은 방식으로 IMUData 객체 목록으로 제공됩니다.
from kognic.io.model.ego import IMUData
from kognic.io.model.calibration import Position, RotationQuaternion
from kognic.io.model.scene.lidars_and_cameras_sequence import LidarsAndCamerasSequence, Frame
from kognic.io.client import KognicIOClient
imu_data = [
IMUData(
position=Position(x=-10.44, y=126.06, z=78.817),
rotation_quaternion=RotationQuaternion(x=-1.0, y=0.5, z=1, w=0),
timestamp=1665997200597027072 # ns
),
...
]
frames = [
Frame(..., unix_timestamp = 1665997358832901120),
Frame(..., unix_timestamp = 1665997503951270144),
]
lidars_and_cam_seq = LidarsAndCamerasSequence(
...,
imu_data = imu_data,
frames = frames,
)
client = KognicIOClient()
client.lidars_and_cameras_sequence.create(
lidars_and_cam_seq,
project="project-ext-id",
dryrun=True,
)dryrun을 사용하여 검증하기
메서드 호출 시 dryrun 파라미터를 true로 설정하면 API를 사용해 씬을 검증하지만 실제로 생성하지는 않습니다.
모션 보상 활성화/비활성화
기본적으로 IMU 데이터가 제공되면 LIDAR 포인트 클라우드가 있는 씬에 대해 모션 보상이 수행됩니다.
모션 보상 활성화 여부는 기능 플래그(feature flag)로 제어됩니다. 기본적으로는 활성화되어 있지만, 빈 기능 플래그를 제공하여 비활성화할 수 있습니다.
from kognic.io.model.scene.feature_flags import FeatureFlags
client.lidars_and_cameras_sequence.create(
...,
feature_flags=FeatureFlags()
)포인트 클라우드가 이미 Kognic 플랫폼 외부에서 모션 보상된 경우 모션 보상을 비활성화하는 것이 바람직할 수 있습니다.