---
title: モーション補償
slug: api-guide/ja/JF2I20iH_0qocEkLSl5_z
docTags: 
createdAt: 2024-12-17T10:30:58.434Z
---

LiDAR構成でラベリングを行う際の本質的な問題は、結果として得られる点群が単一の瞬間のスナップショットではなく、LiDARスイープが行われた時間間隔にわたるものであることです。LiDARスイープ中にオブジェクトが移動する可能性があるため、これはラベリング時に問題となります。例えば車を3Dボックスでラベリングしようとしても、そのボックスは実際の車のサイズを表しません。この問題はモーション補償によって軽減できます。モーション補償では、点群内のすべての点のタイムスタンプを同期します。

自車両の慣性計測装置（IMU）からのデータを取り込むことで、LiDARスイープ中の車の移動軌跡を正確に把握できます。これにより、点群内の点を同一の瞬間を表すように調整するモーション補償を実行できます。

さらに、モーション補償が機能するために、提供される点群内の各点にはUnixタイムスタンプ（ナノ秒単位）が指定されている必要があります。

モーション補償を行う時点は`unix_timestamp`パラメータで指定できます。指定されていない場合は、各フレームについて、そのフレーム内のすべての点の時刻の中央値が代わりに使用されます。

モーション補償は、複数のLiDARスイープに対して同時にアノテーションを行う場合、例えば複数LiDAR構成やフレームをまたいで点群が集約される場合に特に重要です。

:::hint{type="warning"}
### すべてのUnixタイムスタンプはナノ秒単位で指定する必要があります

モーション補償が正しく機能するためには、一貫した時間単位が重要です。そのため、すべてのUnixタイムスタンプはナノ秒単位で提供する必要があります。
:::

点群内のすべてのタイムスタンプおよび指定された`unix_timestamp`は、IMUデータのタイムスタンプの範囲内に収まっている必要があることに注意してください。そうでない場合、シーンの作成は失敗します。

IMUデータは以下のように、オブジェクトのルートに`IMUData`オブジェクトのリストとして提供します：

```python

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,
)
```

:::hint{type="success"}
### dryrunを使用して検証する

メソッド呼び出しで`dryrun`パラメータを`True`に設定すると、APIを使用してシーンを検証しますが、シーンは作成されません。
:::

## モーション補償の有効化/無効化

デフォルトでは、IMUデータが提供されている場合、LiDAR点群を含むシーンに対してモーション補償が実行されます。

モーション補償の有効・無効はフィーチャーフラグで制御されます（[シーンのフィーチャーフラグ](docId\:R7JjwWZw8kl3luX52WDod)を参照）。デフォルトでは有効になっていますが、空のフィーチャーフラグを指定することで無効化できます。

```python
from kognic.io.model.scene.feature_flags import FeatureFlags

client.lidars_and_cameras_sequence.create(
    ...,
    feature_flags=FeatureFlags()
)
```

Kognicプラットフォーム外ですでにモーション補償が適用されている点群の場合、モーション補償を無効化することが望ましい場合があります。
