モーション補償
ライダーのセットアップでラベリングを行う際の本質的な問題は、結果として得られる点群が単一の瞬間のスナップショットではなく、ライダースイープが行われた時間間隔であることです。これはラベリング時に問題を引き起こします。なぜなら、ライダースイープ中にオブジェクトが移動する可能性があり、例えば車を3Dボックスでラベリングしようとすると、そのボックスは実際の車のサイズを正確に表していない場合があるからです。この問題はモーション補償によって軽減できます。モーション補償では、点群内のすべての点のタイムスタンプを同期します。
エゴビークルの慣性計測装置(IMU)からのデータを取り込むことで、ライダースイープ中の車の移動軌跡を正確に把握できます。これにより、点群内の点を同一の瞬間を表すように調整するモーション補償を実行できます。
さらに、モーション補償が機能するために、提供される点群内の各点にはUnixタイムスタンプ(ナノ秒単位)が指定されている必要があります。
モーション補償を行う時点はunix_timestampパラメータで指定できます。指定されていない場合は、各フレームについて、そのフレーム内のすべての点の中央値の時刻が代わりに使用されます。
モーション補償は、複数のライダースイープに対して同時にアノテーションを行う場合、例えば複数ライダー構成やフレームをまたいで点群が集約される場合に特に重要です。
すべてのUnixタイムスタンプはナノ秒単位で指定する必要があります。
モーション補償が正しく機能するためには、一貫した時間単位が重要です。そのため、すべてのUnixタイムスタンプはナノ秒単位で提供する必要があります。
点群内のすべてのタイムスタンプおよび指定された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の点群を含むシーンに対してモーション補償が実行されます。
モーション補償の有効・無効はフィーチャーフラグで制御されます。デフォルトでは有効になっていますが、空のフィーチャーフラグを指定することで無効化できます。
from kognic.io.model.scene.feature_flags import FeatureFlags
client.lidars_and_cameras_sequence.create(
...,
feature_flags=FeatureFlags()
)Kognicプラットフォーム外ですでにモーション補償が適用されている点群の場合、モーション補償を無効化することが望ましい場合があります。