天天看點

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

如何實作車聯網的靈活資料采集

随着車聯網與 5G 技術的融合以及車輛智能化的發展,車聯網的資料采集需求呈現爆發式增長。傳統的車輛資料采集主要用于車輛的遠端監測和故障診斷。随着車輛應用的豐富和智能化水準的提高,車輛資料采集逐漸應用到更多的場景,如研發用資料采集、資料統計和分析、規則引擎與報警系統、車輛實時控制等。

為什麼需要靈活數采

現有的資料采集方案往往通過車載資料采集終端(T-BOX)固件中的采集功能或自行編寫的采集程式進行車輛資料采集。通常采集程式所采集到的車身資訊是固定且直接固化在車載終端上的。在智能車聯網時代之前,采集的資料種類少、全量采集壓力不大,這種做法是可行的。

随着車聯網技術的發展,車輛整車網絡構成也越來越複雜,可采集的車身資訊多樣化,全量采集資料量過大而且浪費寶貴的帶寬資源,是以需要根據 TSP 應用的需求按需進行采集。此外,不同車型的汽車通常會有不同的資料,例如 CAN 總線的資料在不同車型上會有不同的 DBC 檔案。固定采集程式無法移植,必須重新編寫,并 OTA 更新采集程式。

總的來講,固定采集程式存在以下問題:

  • 采集的資料固定,無法靈活變更采集的項目。實際上随着車聯網的發展,資料采集項目将根據應用呈現更多變化,固定的采集方式無法滿足經常變動的真實需求。
  • 采集資訊解析配置固定,無法比對新的車型或eKuiper-mqtt
  • 擴充不易,新的傳感器或總線協定需要重新開發。

是以,業界迫切需要一種靈活的、支援弱網情況的資料采集方案。

注:DBC(Data Base CAN)檔案是由德國 Victor 公司釋出的,它被用來描述單一 CAN 網絡中各邏輯節點資訊,依據該檔案可以開發出監視和分析 CAN 網絡中所有邏輯節點的運作狀态。

如何實作靈活數采

針對固定數采程式缺陷,我們需要一個靈活資料采集引擎,并具備以下能力:

  • 靈活資料埋點配置和規則,并可熱更新和熱啟停資料采集規則。
  • 多資料源對接和解析能力,例如 CAN 總線、HTTP 信号等。
  • 靈活配置資料源解析的能力。以 CAN 總線為例,應當支援 DBC 檔案的靈活加載和更新。
  • 采集資料靈活分發的能力。可根據業務建立規則,将一部分資料本地儲存,一部分資料回傳雲端。
  • 弱網工況下,采集資料高效回傳的能力。
  • 足夠輕量高效,進而可以運作在多種車型,包括車機資源受限的車型上。

基于大量的車聯網使用者案例和經驗,EMQ 推出了基于 eKuiper 與 QUIC 協定的車雲系統方案,實作了一套易部署可移植的車聯網靈活數采方案。方案架構如下圖所示。

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

在該方案中,我們采用開源邊緣流式處理引擎 eKuiper 實作車載終端上的靈活資料采集功能,采用大規模分布式物聯網 MQTT 消息伺服器 EMQX 實作采集資料的連接配接、移動和處理以及車雲一體的控制指令互動。在之前的車聯網文章中,我們已經詳細介紹了基于 EMQX 的車聯網消息平台的架構設計,本文不再贅述。接下來,本文将以 eKuiper 為例,介紹如何實作車聯網靈活數采。

靈活數采方案剖析

LF Edge eKuiper(簡稱 eKuiper)是開源的超輕量資料分析和流式計算引擎。eKuiper 相容性強,可适配 X86 和 ARM 等多種 CPU 架構的車機終端。軟體較輕量且可裁剪,核心包和初始運作記憶體在 10MB 級别,支援高吞吐低延遲時間的各種資料處理和計算。在方案中,以部署于車機端的 eKuiper 為核心,可以實作近實時的靈活資料采集和處理轉發等功能。

如下圖所示,eKuiper 具備了資料流的接入、處理和流轉能力。南向部分,eKuiper 支援接入各種協定的資料流,例如 CAN 總線、MQTT 協定、Socket(TCP 或 UDP)和 DDS 等。接入的資料可以在引擎内部根據使用者定義的規則,進行資料的采集、轉換、過濾和分析等資料處理工作,之後再将采集或處理的結果發送到各種北向的目的地中,例如存到本地的檔案、資料庫中以便後續車載應用使用;或是通過 HTTP/MQTT 等協定發送到雲端或 TSP 應用端進行處理。

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

在靈活數采的場景中,假設 eKuiper 已部署到車機中,要完成一個數采任務,一般隻需要兩個步驟:

  1. 接入資料流
  2. 建立采集規則

在 eKuiper 中,這兩個步驟無需編寫代碼,可使用 SQL 語句或者可視化 Flow 編輯器進行配置。

資料流接入

CAN(Controller Area Network)是最常見的車聯網總線網絡。本文以接入和解析 CAN 資料為例,介紹 eKuiper 如何實作車載資料流的接入。

在 eKuiper 中提供了CAN 資料源,其中主要實作了兩個能力:

  1. 連接配接協定
  2. 根據 DBC 解碼 CAN 封包

連接配接協定支援

若 eKuiper 可以直接連接配接 CAN 總線,則可通過 CAN 協定建立到車載總線的連接配接,擷取總線資料。出于安全的原因,eKuiper 也經常被部署到與總線隔離的硬體上。例如,eKuiper 部署在 MPU 中;而在 MCU 中部署 CAN 總線連接配接應用,通過 TCP、UDP 或者 MQTT 協定等,将封包透傳出來。eKuiper 同樣支援通過這些協定進行連接配接,擷取總線資料封包。

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

靈活 CAN 封包解碼

我們從總線接收到的封包為二進制編碼的資料,人類難以閱讀。CAN DBC 是一種文本檔案,用于 CAN 封包的描述檔案。通過讀取 DBC 的描述資訊,我們可以把 CAN 封包的資料解析為實體值的資訊。例如,一段 CAN ID 0x208 的資料 0x0500000000000000,根據 DBC 的描述資訊可能解析為一系列信号,可表示為鍵值對或者 JSON 串

{"temperature":10, "voltage": 100}

等。

eKuiper 的 CAN 資料源可将資料解析為可讀的鍵值對,這樣編寫資料采集規則的時候,可以直接選取可讀的信号,大大簡化采集邏輯的編寫。CAN 封包解析功能具有極大的靈活性,可以動态地更新 DBC 檔案以适配不同的車型或更新車載總線資料而無需編碼。

CAN 封包解析的靈活性主要展現在如下方面:

  • DBC 檔案可配置,可熱更新
  • 支援多個 DBC 檔案
  • 支援 CAN FD 格式
  • 支援白名單和 container ID 映射

基于靈活的封包解碼支援,當總線資料結構改變或者更改車型時,僅需更新 DBC 檔案即可适配。

在 eKuiper 中,流(stream)是用于定義資料接入的一個實體。我們可使用如下的 SQL 語句,定義一個接入 CAN 總線的資料流。

CREATE STREAM canDemo () WITH ( Type="can",  CONF_KEY="test", SHARED="TRUE")
           

該語句定義了一個名為 canDemo 的流,其類型為

can

,即接入 CAN 總線的資料源類型;CONF_KEY 表示接入配置定義在名為

test

的配置中,其中可配置使用的 DBC 檔案位址等;SHARED 設定為 true,表示使用該資料流的所有規則共享一份資料,確定解碼隻會進行一次。

該流将接入解析 CAN 總線資料,得到 JSON 資料流。接下來,應用開發人員可以在其上建立多條規則,定義如何采集資料。

接入擴充

随着汽車智能化程度的提高,車載的傳感器和資料總線的數量和種類越來越多。eKuiper 提供了擴充機制,使用者可以編寫插件實作新的協定或私有協定的接入和解析。安裝後的插件遵循使用邏輯,應用開發人員可以與使用原有的資料流類型相同的方法建立資料流。

靈活配置采集規則

前文中我們已經建立了連接配接 CAN 總線的資料流,接下來我們可以建立多個資料采集規則進行靈活的數采。本節介紹一些常見的采集規則。規則内容為 JSON 文本資料,可通過 REST API 等方式進行規則的動态下發管理,具體管理方法将在下一節介紹。

eKuiper 的規則分為兩個部分,其中 SQL 用于編寫業務邏輯,例如需要采集哪些資料、對資料做哪些處理;Actions 部分用于描述規則命中後執行的動作,例如存儲到本地檔案或者發送到雲端 MQTT 的某個主題中。假設上一節建立的資料流 canDemo 中,總線中的資料解析為包含發動機相關資料如發動機轉速(rpm)、進氣溫度(inletTemperature)、進氣壓力(inletPressure)以及電池相關資料,如電池電壓(voltage),電池電流(current)等資料的鍵值對資料,如

{"rpm":2000, "inletTemperature":230, "inletPressure":27, "voltage":15,"currency":2}

。下列配置的規則将針對這個總線資料進行采集。

  1. 采集指定的信号

    本規則可實時采集發動機的信号并發送到 MQTT topic

    collect

    中。規則通過 SQL 語句中的 SELECT 子句定義了需要采集的資料點。
    {
      "id": "ruleCollect",
      "sql": "SELECT rpm, inletTemperature, inletPressure FROM canDemo",
      "actions": [{
        "mqtt": {
          "server": "tcp://yourserver:1883",
          "topic": "collect"
        }
      }]
    }
               
  2. 采集有變化的信号

    某些信号可能變化周期比較長,全部采集的話大部分為重複值,占據存儲和帶寬。eKuiper 提供了内置的變化采集函數

    CHANGED_COLS

    ,可以僅采集信号數值變化的情況。下面的示例規則中,我們采集了電池的變化資訊,并儲存在本地檔案中。
    {
      "id": "ruleChangeCollect",
      "sql": "SELECT CHANGED_COLS(\"\", true, voltage, currency) FROM canDemo",
      "actions": [{
        "file": {
          "path": "/tmp/cell"
        }
      }]
    }
               
  3. 根據事件采集

    某些信号隻有在特定的情況下才需要采集,例如碰撞後采集相關的資料。eKuiper 中可以靈活設定采集的條件。以下的規則中,當電池電壓異常(不在10到20之間)的情況下,采集所有資料到 MQTT 的 Topic

    exception

    中。
    {
      "id": "ruleExpCollect",
      "sql": "SELECT * FROM canDemo WHERE voltage NOT BETWEEN 10 AND 20 ",
      "actions": [{
        "mqtt": {
          "server": "tcp://yourserver:1883",
          "topic": "exception"
        }
      }]
    }
               

車雲一體規則管理

規則構思完成後,需要進行動态下發和管理。EMQ 提供了車雲一體的規則管理控制台,使用者可以在裡面進行規則的編寫、下發和狀态管理。管理控制台可以在雲端集中管理多個車機邊緣節點。

規則編寫

管理控制台上提供了規則編寫的圖形界面。如下圖所示,使用者可以在界面上填入規則的 ID、SQL 和動作等。送出後,規則即可下發到對應車機節點。

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

我們也将提供規則編寫的可視化 Flow 編輯器界面。使用者可采用拖拽的方式編寫自己的業務規則。

規則管理

eKuiper 中的規則都是可靈活管理的。規則可以熱添加、熱更新和熱啟停。在管理控制台中,使用者可以檢視規則的運作狀态,進行規則的修改、啟停、删除等操作。

如何實作車聯網的靈活資料采集如何實作車聯網的靈活資料采集

雲端集中管理

通過雲端可集中管理在車輛邊緣端上的資料分析應用。

  • 大規模線上車輛支援:基于 EMQX Enterprise,百萬級别線上車輛支援
  • 車輛線上自動更新應用:支援離線車輛應用更新、更新;車輛線上後自動更新應用,并報告狀态
  • 車輛離線後狀态查詢支援:車輛離線狀态下可擷取應用部署的最後狀态
  • HTTP Rest API 服務接口支援:同步 HTTP 接口,接入前端應用 (web & mobile)

更多可能

eKuiper 作為一個通用的流式計算引擎,除了實作資料采集之外,還可以實作很多邊緣計算功能,充分利用車載終端算力。例如,eKuiper 可支援下列功能:

  • 資料變換和格式化,例如将傳輸信号由整型轉換回浮點型,或者将信号格式化為目标系統要求的格式。
  • 資料分析,例如計算一段時間内的平均值等統計值。
  • SOA 服務調用,實作場景關聯,例如根據車内溫度自動開關空調。
  • AI/ML 算法內建,例如根據采集到的信号識别使用者的充電意圖等。

更多功能歡迎讀者們自行探索。

總結

車聯網軟硬體技術大發展的浪潮下,傳統的固定資料采集方案難以應對層出不窮的采集需求。通過本文介紹的基于 eKuiper 與 EMQX 的車雲系統方案,可實作端到端的靈活資料采集需求。eKuiper 采用基于文本型業務處理應用下發,避免複雜 OTA 更新,幫助車聯網企業實作靈活的資料采集以及高效的車雲資料協同。

版權聲明: 本文為 EMQ 原創,轉載請注明出處。

原文連結:https://www.emqx.com/zh/blog/how-to-achieve-flexible-data-collection-for-internet-of-vehicles

繼續閱讀