データソース

SDV Telemetry では、複数の種類のデータソースがサポートされます。このページでは、これらの種類の概要と、データソースの種類ごとに Telemetry がサポートする機能について説明します。

データソースの実装のサンプルコードは、system/software_defined_vehicle/samples/telemetry ディレクトリにあります。

指標構成でのデータソース定義

指標構成では、指標を収集する 1 つ以上のデータソースを定義します 。各データソースは source_identifier で識別されます。source_identifier の形式はデータソースによって異なります。

データソース 形式 説明
SDV サービス Protobuf メッセージ名 protobuf メッセージの完全修飾された名前。サービスに複数の インスタンスがある場合は、パイプ(|)で区切ってサービス ユニット名を追加します。 "com.sdv.google.example.TellTale|com-sdv-google-example-tell-tale-status-hibeam"
サービス ユニット名を含む完全修飾インスタンス名(FQIN FQIN とサービス ユニット名をパイプ(|)で区切ります。 "vm-cdc:com.google.android.sdv.pubsub.SomeService/instance1|tire-pressure"
構成可能なパブリッシャー レジストリ ベースのパブリッシャー パブリッシャー名 構成可能なパブリッシャー レジストリでパブリッシャーを登録するために使用される正確な serviceName 任意の文字列を使用できます。

各データソースで、次のオプションを使用してメッセージ取得をパラメータ化できます。同じ指標構成で、異なるオプションを使用して同じデータソースを複数回定義できます。たとえば、エッジ処理の一部で、エッジ処理の他の部分とは異なるサブサンプリング間隔を使用できます。

オプション タイプ 説明
connection_type SUBSCRIPTION または ON_DEMAND SUBSCRIPTION に設定すると、Telemetry サービスはデータソースをサブスクライブします。ON_DEMAND に設定すると、Telemetry サービスはオンデマンドでのみデータソースからメッセージを取得します。
configuration google.protobuf.Any 設定すると、Telemetry サービスはデータソースと通信するときに構成オブジェクトをデータソースに渡します。
sub_sampling_interval google.protobuf.Duration 設定すると、メッセージはサブサンプリングされます。これにより、Telemetry サービスは sub_sampling_interval の期間ごとに最大 1 つのメッセージを処理します。
fetch_last_message bool 設定すると、Telemetry サービスはデータソースをサブスクライブするときに、過去にパブリッシュされたメッセージであっても、最後にパブリッシュされたメッセージを取得します。

データソースのタイプに応じて(次のセクションを参照)、Telemetry サービスでサポートされるパラメータは一部のみです。次の表に概要を示します。

オプション RPC SDV サービス パブリッシュ / サブスクライブ(pub/sub)SDV サービス 構成可能なパブリッシャー レジストリ ベースのパブリッシャー
connection_type: SUBSCRIPTION サポート対象 1 サポート対象 サポート対象
connection_type: ON_DEMAND サポート対象 2 サポート対象 サポート対象 3
configuration サポート対象 該当なし サポート対象
sub_sampling_interval サポート対象外 サポート対象 4 サポート対象外
fetch_last_message サポート対象外 サポート対象 5 サポート対象外
1 CreateSubscription メソッドを実装している場合にサポートされます。
2 GetLatestMessage メソッドを実装している場合にサポートされます。
3 PublisherInfo.supportsGettrue の場合にサポートされます。
4 connection_type: SUBSCRIPTION でサポートされます。connection_type: ON_DEMAND には適用されません。
5 connection_type: SUBSCRIPTION でサポートされます。connection_type: ON_DEMAND には適用されません。

SDV サービス(SDV 通信スタック経由)

Telemetry サービスは、他の SDV サービスからデータを収集できます。RPC と pub/sub の両方の SDV サービスがサポートされています。Telemetry サービスはビルド時にサブスクライブするサービスのリストを認識しないため、Protobuf リフレクションを使用して SDV サービスから受信したメッセージをデコードします。

SDV サービスはデフォルトでリフレクション メタデータを提供しません。SDV サービスをテレメトリー データソースとして使用できるようにするには、サービスの VSIDL カタログのランタイム構成生成を有効にする必要があります。詳細については、VSIDL サービス バンドル デベロッパー向けのプロバイダ ガイドをご覧ください。

テストと評価のみを目的とする場合は、サービス バンドル定義で register_reflection_metadata オプションを true に設定することもできます。詳細については、サービス バンドルをご覧ください。

RPC SDV サービス

Telemetry は、RPC SDV サービスを限定的にサポートしています。詳細については、 RPC サービスを定義するをご覧ください。RPC SDV サービスからデータを収集するには、サービスが次の RPC メソッドのいずれかまたは両方を公開する必要があります。

  • CreateSubscription は、ユーザー定義のレスポンスのストリームを返します。

    rpc CreateSubscription(<configuration>) returns (stream <response>)
    
  • GetLatestMessage は、ユーザー定義のレスポンスを返します。

    rpc GetLatestMessage(<configuration>) returns (<response>)
    

構成引数を使用して、データソースの動作をパラメータ化できます。たとえば、パブリッシュ頻度を変更したり、サブスクライブするエンティティ(タイヤの空気圧を読み取るタイヤなど)を選択したりできます。

RPC SDV サービスを指標構成のデータソースとして定義する場合は、データソース定義で configuration 値を指定できます。これは、この RPC の引数として使用されます。Telemetry サービスは構成オブジェクトを透過的に処理し、定義したものを渡します。

両方のメソッドの構成引数の型は、 google.protobuf.Any またはユーザー定義の型にできます。両方のメソッドを指定する場合、引数の型は同じにする必要があります。これらの RPC メソッドに構成引数 が不要な場合は、google.protobuf.Empty を使用します。

指標構成のデータソース定義で指定された connection_type に応じて、Telemetry サービスは CreateSubscriptionconnection_type: SUBSCRIPTION の場合)または GetLatestMessageconnection_type: ON_DEMAND の場合)を呼び出します。

Pub/sub SDV サービス

Telemetry は、追加の構成を必要とせずに、SDV サービスによって公開される VSIDL で定義された pub/sub チャネルのモニタリングを完全にサポートしています。詳細については、サービス バンドルにパブリッシャーを追加するをご覧ください。

Telemetry は、pub/sub チャネルのサブスクライブに加えて、チャネルにパブリッシュされた最新のメッセージのオンデマンド取得もサポートしています。

構成可能なパブリッシャー レジストリ

Telemetry は、SDV 通信スタックを使用して SDV サービスからデータを収集するだけでなく、Telemetry サービスの構成可能なパブリッシャー レジストリにパブリッシャーを登録するアプリケーションやサービスからデータを収集することもできます。この機能は、SDV 通信スタックを使用できない IVI で特に便利です。

構成可能なパブリッシャー レジストリは、SDV サービス バンドルを作成せずにデバッグとプロトタイピングを行う場合にも役立ちます。詳細については、 構成可能なパブリッシャー レジストリをご覧ください。