GNSS(GPS)の電波をCPUコアを使わずに解析し、位置情報を算出する


図

組み込みデバイスにマルチコア・アーキテクチャを採用することにより、エッジコンピューティングに必要とされる様々な処理を『平均的』に高速化できることをこれまでに紹介してきました。一方で、組み込みデバイス用のSoCには「アクセラレータ(GPU・NPU)」や「DSP(Digital-Signal-Processor)」といった特定のワークロードに最適化された演算器を内蔵した製品もあります。DSPは処理対象となる信号を高スループット・低レイテンシで解析や加工ができるハードウェアです。

そこで、今回の初心者講座「マルチコア編」はアプリケーションを構成する機能を、あえてCPUコア上で実行せず、SoC内に搭載された専用演算器(DSP)へ処理を依頼する『オフローディング技術』について解説いたします。オフローディング技術を活用することにより、CPUコアの使用率を低減できるため、既存のプログラムの並列度を増やして高速化する、新しいタスクの並列実行を計画する、CPUコアの電力消費を抑制し、バッテリーの長寿命化を実現可能です。

SPRESENSEのGNSS Domain(ハードウェア・ブロック)

本記事ではオフローディング技術の例題としてSPRESENSEのCXD5602/CXD5247 SoCに内蔵されているGNSS Domain(Global Navigation Satellite System用のハードウェア・ブロック:GPS衛星などに対応)を取り挙げます。

SPRESENSEではMain Board上にGNSSアンテナが搭載されているため(図1)、外付けアンテナを購入することなくGNSS機能を利用可能です。もちろん外部のパッシブアンテナ、アクティブアンテナを接続することも可能です。なお、GNSSを扱うアプリケーションを開発する際は、複数の人工衛星からの電波を受信できる見通しが良い場所、またビル等の構造物による電波の反射を受けにくい場所を選択しましょう。

 SPRESENSEハードウェアドキュメント|GNSS用外部アンテナの使用方法

図
図1:SPRESENSE Main Boardに搭載されたGNSSアンテナ

図

▼目次

オフローディング技術

オフローディング技術とは、CPUリソースを有効活用するために、CPU上で実現されていた機能をペリフェラルのコントローラへ依頼する技術です(図2)。

図
図2:オフローディング技術とその効果

一例を挙げると、ネットワーク・パケットのチェックサム自動生成/検証機能があります。ネットワーク上でパケットが破損したかを確認するためのチェックサムの生成を、データを生成するCPUではなく、送信・受信を担当するNIC(Network-Interface-Card)へ依頼する事によりCPUリソースの使用率を低減。CPUリソースを他の機能が活用できるようにする機能です。

DSP(Digital-Signal-Processor)

続いて、DSPについて紹介いたします。

DSPの登場と進歩

DSPは、音声信号処理に特化した処理装置として登場し、続いて様々な用途向けのDSPが誕生しました。現在は、音声を扱うアプリケーションに限らず、画像解析・通信制御など多種多様のアプリケーションに向けたDSPが登場しています。

登場早期よりDSPは、信号解析や音声加工に必要な乗算処理やベクトル演算処理に特化した演算器を搭載しています。これらの演算器は、信号の変調、信号の増幅、フィルタリングなどに活用されています(図3)。

図
図3:DSPの提供する演算機能(一例)

その後、映像処理に対応した「グラフィックエンジン」や暗号化・復号処理などに採用されている「クリプトエンジン」といったDSPが登場。こうしたDSPを活用することにより、表示系や通信系など繰り返し処理が求められるワークロードによるメインの演算ユニット(システムの中心となるマルチコアCPU)の占有を防ぐことができます。SPRESENSE内部には、GNSS衛星からの電波を入力として、時刻を算出する/緯度経度を算出するアルゴリズムを適用し、各情報を出力するDSPがGNSS Domain内に搭載されています(図4)。

図
図4:SPRESENSEのGNSS Domainに内蔵されたDSP

DSPを構成するハードウェア

DSPは浮動小数点数の乗算・除算や、頻出する数値処理用の演算ユニット、演算結果を格納するローカルメモリから構成されています。従来のDSPは、専用に設計されたハードウェア・ロジックにより構築されていました。

CPUコアにより実装されたDSP

Arm Cortex-M4(FPU搭載)が登場するとゼロからDSPのハードウェアを設計しなくとも、FPUによる高速な浮動小数点数の演算・ベクトル演算と、Armのアーキテクチャの特長である低消費電力を活かしたCPUを、DSPの実装に流用できるようになりました。これにより、ハードウェアや専用ファームウェアの開発工数を低減しつつ、ソフトウェアによる高い柔軟性、リリース後のアップデートによる高い拡張性・保守性を実現できるペリフェラルが登場。SPRESENSEのGNSS DomainもCortex-M4を内蔵しています。

SPRESENSEのGNSS Domainの概要

SPRESENSEのGNSS Donainは、GPS/GLONASS/QZSSに対応し、専用のGNSS受信回路から得た人工衛星の情報を取得、到達する時刻情報を活用し人工衛生のズレを推測、最後に緯度経度情報と時刻情報を推定する機能ブロックです。位置推定アルゴリズムを繰り返し実行するための演算器としてDSP(Cortex-M4)が搭載されています。

図
図5:複数の時刻から、正確な緯度経度と時刻を算出するための仕組み

すべてのアルゴリズムはソフトウェアで実装されているため、アップデートにより位置推定アルゴリズムを常に最新の状態に維持できます。SPRESENSEでは、DSP上で実行されるアルゴリズムを記述したソフトウェアをブートローダのパッケージに同梱しています。私たちはアルゴリズムを実装することなく、高精度な緯度経度情報を入手することができます。

QZSS(みちびき)にも対応

GPSやGLONASSへの対応はもちろん、準天頂衛星システム「みちびき」(QZSS:2018年に本格稼働)にも対応しています。QZSSは、日本の上空を航行する4基の人工衛星(図6)を活用し位置を算出することから、日本国内の位置を高精度に推定可能です。詳細は「みちびき」に関する技術情をご参照ください。

 技術情報|みちびき(準天頂衛星システム:QZSS)公式サイト - 内閣府

図
図6:QZSSの軌道(by Tubas

QZSSをはじめとするGNSSの技術的な難しさ

GNSSは複数の静止衛星から発信された時刻情報を統合し、時刻の差分から地球上の位置を推定するシステムです。GNSSを構成する人工衛星は静止軌道上にありますが、地球や月からの引力、軌道の真円率や地球の真円率、地球の衛星軌道上に留まるための速度制御により誤差が生じます。そのため、GNSSにより緯度経度情報を高精度に推定しようとすると、これらの誤差をすべて考慮した演算が必要となり、CPUリソースが大量に消費され、他の機能の実行を阻害してしまうという課題がありました。

 GPS衛星よりデータ受信後の測位計算方法について

図
図6.1:GNSSは衛星の位置ずれを考慮し、緯度経度を推定する必要がある。

SPRESENSEは、GNSS DomainにCortex-M4を封入する事により高精度でありながら、最新の人工衛星QZSSにも対応、SoCの核となるマルチコアCPUに負荷をかけることなく位置推定を実現できます。

SPRESENSEのGNSS機能を活用する

それでは、SPRESENSEのGNSS機能を実際に使ってみましょう。

SPRESENSE SDKには、GNSSサンプルアプリケーションが含まれています。GNSSサンプルアプリケーションは、GNSS Domainを制御し、GNSSからの電波をGNSS DSPで解析。時刻情報(UTC:日本時間から9時間前)と緯度経度情報をGNSS Domainから取得し表示します。

ビルド手順と実行方法

ビルド方法

図7の手順により、GNSSサンプルアプリケーションを実行できます。詳細な手順は「SPRESENSE SDKチュートリアル:GNSSサンプルアプリケーション」をご参照ください。

  • Visual Studio CodeでSPRESENSE SDKのワークスペースを開く。
  • 「SPRESENSE:カーネルコンフィグ」を選択する。
  • 「新規作成」から「release」を選択し、保存をクリックする。
  • 「SPRESENSE:カーネルコンフィグ」を閉じる。
  • 「SPRESENSE:SDKコンフィグ」を選択する。
  • 「新規作成」から「Examples」を選択し「examples/gnss」をクリック。
  • 「保存」をクリックする。
  • 「SPRESENSE:SDKコンフィグ」を閉じる。
  • 「SPRESENSE:カーネルのビルド」を実行。
  • 「SPRESENSE:アプリケーションのビルド」を実行。
  • 「SPRESENSE:ビルドと書き込み」を実行。
  • シリアルターミナル起動後、gnssコマンドを実行する。

図
図7:SPRESENSE SDKでGNSSサンプルアプリケーションをビルドし実行

実行結果

gnssコマンドを実行すると、GNSS Domainが初期化され、1つ以上の衛星から電波を受信できると時刻が、複数の衛星からの電波を受信できると緯度経度情報が出力されます(図8)。

図
図8:GNSSアプリケーションの出力と通信の関係

GNSSサンプルアプリケーションのソースコードの概要

本記事の前半で紹介したように、SPRESENSEではGNSSを扱う場合であっても衛星からの時刻をCPUで演算する必要がないため、CPUリソースを大きく消費することはありません。SPRESENSE SDK(v1.5.0)に含まれているGNSSサンプルアプリケーションのソースコード「spresense/examples/gnss」の概要を以下に示します。

  • L285:GNSS Domainのハードウェアへのアクセス権をOSから取得する。
  • L294:イベント発生時のシグナルを設定する(非同期制御用)。
  • L320:GNSSが利用する衛星の情報やパラメータを設定する。
  • L236:GPS/GLONASSを利用して緯度経度情報を算出するよう設定する。
  • L335:GNSS Domainに処理開始を指示する。
  • L360:周期的にGNSS Domainから時刻情報と緯度経度情報を収集する。

ビジネス領域で求められるGNSS+IMUを活用した高精度な緯度経度推定

GNSSからの緯度経度情報をパッシブ型のセンサーにより補正することにより、さらに高精度の位置情報を生成することができます。

連携させるパッシブ型のセンサーの一例を挙げると、オートモーティブや航空・宇宙産業に活用されるIMU(‪Inertial Measurement Unit‬‬)があります。IMUは、計測軸を一致させた3軸加速度センサーと3軸ジャイロセンサーを中心に、3軸磁界センサー、大気圧センサーを統合し、さらに熱ノイズを補償するための温度センサーを内蔵した計測ユニットです(統合されているセンサー数からN自由度(DoF)のIMUと表現します)。

IMUは自身に発生した物理現象(加速度や回転角速度)のみを計測するため、外乱を受けることなくGNSSの補正に必要なデータを収集することができます。オートモーティブでは、GNSSからの電波が届かないトンネル内や、高速道路の高架下を走行する際の位置推定にIMUを活用しています。

 GNSS特集「3分でわかるGNSS(全世界測位システム)のお話」

SPRESENSEに接続できるIMU

SPRESENSE開発環境では、Bosch社 BMI160がSPRESENSE Add-On Boardとして提供されています。開発しているアプリケーションやサービスの要件にあわせて、導入をご検討いただけます。

図
図9:BMI160を搭載したSPRESENSE Add-On Board

まとめ

GNSSは、ウェアラブルデバイスへの搭載をはじめ、建設用重機の管理や、物流を支える船舶や車両のトラッキングなど、身近な生活シーンから産業分野に至るまで様々なIoTサービスに不可欠な機能です。SPRESENSEは、GNSSを活用しながらCPUリソースを他の機能のために確保できることや、GPS/GLONASSに加えてQZSSにも対応。高い測位精度を活用したグローバルなIoTサービスを実現可能です。