在前面的兩篇部落格中,我們已經完成了mqtt伺服器的搭建,以及mqtt客戶端的開發,客戶端模擬了2輛車定時上報cam訊息,並且其中一輛車隨機生成denm訊息,匯報緊急剎車的事件。在v2x的應用場景中,我們需要把denm訊息**給一定範圍內的其他車輛。車輛可以通過dsrc介面或者lte-v2x的pc5介面直接傳送denm,也可以通過服務端**。在這裡我將採用服務端**的方式,在服務端接收denm訊息,生成乙個電子圍欄(geofence),並通知在電子圍欄內的其他車輛。
具體的流程如下:
每次接收到車輛的cam資訊上報,根據經緯度計算對應的level 30的cell id,儲存車輛vin號與cell id的關於在redis中(通過zadd的sorted list儲存,每個元素的name是車輛的vin,score是cellid),同時建立乙個對應於車輛位置的s2point例項,儲存在本地快取中。
每次接收到車輛的denm訊息,根據裡面的位置資訊為圓心,建立乙個半徑為200公尺的圓形電子圍欄s2cap例項。計算這個圍欄覆蓋了多少個s2 level 12的cell,把圍欄的id和cell id的對應關係儲存在redis中(用sadd命令儲存為set),並儲存圍欄id和s2cap例項在本地快取中。計算圍欄的level 12 cell id的起止範圍,通過redis的zrangebyscore來查詢在這個起止範圍內的所有車輛(計算車輛的level 30的cell id是否落在這個範圍中),對於滿足查詢條件的車輛,取出在本地快取中儲存的s2point例項,用電子圍欄的s2cap的contains函式來判斷是否包含這個s2point,如果包含,判斷這個車輛是否新進入這個電子圍欄,如是則**denm資訊。
當車輛上報cam訊息時,還需要計算車輛的level30的cell id的parent level 12的cell id,根據這個level 12id查詢是否有對應的電子圍欄,如果有則判斷車輛是否在電子圍欄範圍中或者離開電子圍欄(通過s2cap contains來判斷)
系統需要自動根據denm訊息的有效期來清除過期的電子圍欄。
具體的實現邏輯和**可以參見我在gitee上的**庫,
車聯網場景中的 MQTT 協議
目前我國車聯網行業處於與 5g 技術的深度融合時期,隨著 5g 與 v2x 技術的發展成熟,未來的車聯網產業必將開啟新的成長空間。車聯網是物聯網技術在交通系統領域的典型應用,車聯網行業所涉及的相關技術領域的融合布局與協同發展在某種程度上與物聯網一脈相通。作為一家開源物聯網資料基礎設施軟體 商,emq...
mqtt 傳送訊息過多 物聯網開發之MQTT協議?
什麼是mqtt?mqtt 訊息佇列遙測傳輸 是iso 標準 iso iec prf 20922 下基於發布 訂閱正規化的訊息協議。它工作在 tcp ip協議族上,是為硬體效能低下的遠端裝置以及網路狀況糟糕的情況下而設計的發布 訂閱型訊息協議,為此,它需要乙個訊息中介軟體 mqtt是乙個基於客戶端 伺...
物聯網開發之MQTT通訊
mqtt協議 mqtt協議簡介 mqtt message queuing telemetry transport,訊息佇列遙測傳輸協議 是乙個客戶端服務端架構的發布 訂閱模式的 輕量級 訊息傳輸協議。mqtt控制報文由三部分組成,依次為 固定報頭 fixed header 可變報頭 variable...