ナビゲーション

動的カメラキャリブレーション:Vision SDKを使用して道路の特徴を正確に位置決めし、マッピングします

見出し

これはレイアウト確認用のダミーテキストです。

Vision SDKにおけるカメラのキャリブレーションは、地図上で検出および分類されたフィーチャを適切に配置するために不可欠です。Vision SDKは現在、10億枚以上の画像を処理しており、その過程で米国内の1,500万件以上の交通標識を識別し、更新しています。Visionが接続されたカメラからより多くの観測データを収集するにつれて、当社の地図の豊富さと精度が向上し、開発者にとってより優れたプラットフォーム、そしてそのユーザーにとってより良い体験を構築します。

任意のカメラで観測されたフィーチャの地理的な位置(緯度、経度、標高)を正確に特定するには、1)地球の中心からカメラまでのベクトルと、2)カメラからフィーチャまでのベクトルの2つの要素があります。 最初のベクトルを特定できるのは、今日のカメラの多くがGPS受信機も搭載したデバイスに搭載されており、ほとんどの場合5〜10メートル以内の精度で位置を特定できるという事実によるものです。 これらのカメラが既知の道路網を走行する車両に取り付けられていると仮定すると、マップマッチングによってカメラの位置誤差を大幅に削減できます。 デュアルバンドGNSSや推測航法システムなどの技術革新により、精度をさらに向上させることができます。

2番目のベクトルを決定するには、2Dカメラ画像内のフィーチャのxおよびyピクセル座標から、カメラレンズを目的のフィーチャに接続する3Dベクトルを取得する必要があります。オブジェクトのピクセル座標から緯度と経度を取得するには、Visionがカメラの外部パラメータ(つまり、車両への取り付け方法)を推定する必要がありますが、現実の世界では、カメラの外部パラメータが不正確であるか、完全に欠落していることがよくあります。Visionの動的カメラキャリブレーションアルゴリズムは、6つのコンポーネント(3D並進(x、y、z)と回転の3つのオイラー角(ロール、ピッチ、ヨー))を使用して、車両に対するカメラの姿勢を推定します。

調整手順では、車両の座標系の原点をカメラの位置に合わせます。これにより、カメラの並進のx座標とy座標は0になり、不明なz座標は路面からのカメラの高さになります。現在、調整アルゴリズムはカメラの高さを推定しませんが、パブリックAPIを通じてクライアントアプリケーションから提供された値を許可し、提供されていない場合はデフォルトで1.3メートルになります。調整アルゴリズムでは、ピッチ角とロール角の推定が可能で、ヨー角のデフォルトは0°です。カメラの角度は、画像平面上の消失点(VP)の計算によって推定されます。消失点では、現実世界の平行線からの投影が交差します。車両のx軸と地平線(車両のy軸に平行)の投影はこの点を通過するため、カメラの向きとフレーム内の消失点の座標の間には直接的な関係があります。

理想的な世界では、消失点を見つけるには2本の交差する線で十分ですが、実際には、Vision SDKは、カメラの角度を正確に判断するために、消失点と交差する線の多くのノイズの多い観測を収集する必要があります。そのような線の観測には、路面上の光学フィーチャートラッキングと、道路マークアップのセマンティックセグメンテーションという2つのソースがあります。 

光学的特徴追跡からの線抽出: 光学的特徴から線を抽出するには、最初のフレームで画像の特徴を検出し、道路表面上にない、または動的なオブジェクト(車、自転車、歩行者)の近くにない特徴をフィルタリングし、後続のフレームで残りの特徴を追跡し、長さが不十分なトラックをフィルタリングし、最後に、最小二乗法を使用して、対象となる各トラックから線を導出します。

セマンティックセグメンテーションからの線抽出: ドライバーを誘導するために道路に描かれた線は、Visionによって道路シーン内の消失点を推定するために使用されます。疑似線形の道路の特徴(車線マーキング、縁石、道路の端など)がある場合、セマンティックセグメンテーションから線を抽出します。これには、Visionの深層学習モデルを使用して道路マークアップを含むセマンティックセグメンテーションマスクを生成し、セグメンテーションマスクを分析して接続されたコンポーネントを見つけ、長さまたは線形性が不十分なものを拒否し、最後に、各コンポーネントについて、再度最小二乗法を使用して線を計算することが必要です。

Vision SDKが両方のソース(光学的特徴追跡とセマンティックセグメンテーション)から十分な結果を得ると、ラインパラメータが方程式系に結合され、消失点の推定値が得られます。消失点のピクセル座標が決定されると、カメラアングルが導き出されます。

Visionの動的キャリブレーションの進捗は、カメラの動きとより多くの画像フレームが処理されるにつれて測定されます。キャリブレーションの進捗値は、消失点の現在の線観測数に依存します。線が多く収集されるほど、パーセンテージは増加します。キャリブレーションは、進捗が100%に達した後も更新され続け、車両の動きに伴う小さな摂動を修正できます。新しい線は常にバックグラウンドで収集され、消失点は最新の観測値を持つスライディングウィンドウを使用して再計算されます。新しい結果は最新のキャリブレーションソリューションと比較され、大きな乖離が検出された場合、新しいキャリブレーションが適用されます。

完全なキャリブレーション手順には、最終的な結果をより安定させ、信頼性を高めるための追加のヒューリスティクスが含まれています。たとえば、Visionは、状態が悪い場合(車両が旋回している場合やカメラが揺れている場合など)のライン観測を破棄し、消失点の計算を開始する前に、画像の左右両側でライン観測の最小しきい値を必要とします。Visionはまた、最終的なシステム解決中にRANSACと同様の手法を使用して、ライン観測の外れ値をフィルタリングします。

既知の外部パラメータを使用している開発者向けに、Vision SDKはカメラポーズを手動で設定するためのパブリックメソッドを提供し、自動キャリブレーションを無効にすることができます。 

  • void 'VisionManager::SetCameraPose(AttitudeData const & cameraAttitude, float height);'

開発者がこのメソッドを呼び出すと、Visionは自動キャリブレーションプロセスを停止し、キャリブレーションの進行状況の値を100%に設定し、それ以降のすべての計算に指定されたハードコードされた値を使用します。自動キャリブレーションを無効にすると、車両フレームに対するカメラの姿勢が変化しないことが予想されるアプリケーション(工場で取り付けられた自動車用カメラなど)で、Vision SDKの計算負荷が軽減されます。

任意のセンサーで観測された地図フィーチャの位置は、Mapboxのライブ位置情報プラットフォームにとって非常に重要な貢献となります。収集されるデータが多いほど、地図の位置特定はより正確になり、複数回の通過によってローカリゼーションエラーが減少します。24時間ごとにこれらのデータを取り込み、地図、検索、ナビゲーション製品全体に更新を配信します。

これはレイアウト確認用のダミーテキストです。

これはレイアウト確認用のダミーテキストです。

関連記事