
隨著智能手機的興起,定位技術已經深入到我們生活的方方面面,開車導航、定位打車、找尋周邊的共享單車、周邊的餐廳,還有實時公交資訊、實時路況等等,為我們的生活帶來了極大的方便,尤其是疫情期間的行程碼,幾乎每天都要用到,
而近年來,全球掀起了一股自動駕駛熱潮,無論是傳統車企,還是科技企業,甚至很多初創公司都競相加入這一行業賽道,進入2021年,自動駕駛熱度不減,且“吸金”不斷,據不完全統計,從今年年初至今,自動駕駛行業投融資事件超過50起,投融資金額近1000億元,已超過2018年,達到歷年最高值,
定位技術就是其中最重要的技術之一,本文就手把手打造出一個能被隨時定位的智能設備,還能在地圖上展示該設備的位置資訊,只需以下3步:

1、案例背景
本案例中的定位主要是指廣域的戶外定位,室內定位將在另外案例中介紹,
1.1、衛星定位系統
定位系統是以確定空間位置為目標而構成的相互關聯的一個集合體或裝置(部件),這個系統可以保證在任意時刻,地球上任意一點都可以同時觀測到至少4顆衛星,以保證衛星可以采集到該觀測點的經緯度和高度,以便實作導航、定位、授時等功能,這項技術可以用來引導飛機、船舶、車輛以及個人,安全、準確地沿著選定的路線,準時到達目的地, ??
目前主流定位系有除美國的GPS,中國的北斗衛星導航系統、歐盟的伽利略衛星導航系統、俄羅斯全球導航衛星系統等,
GPS
GPS是美國第二代衛星導航系統,按目前的方案,GPS的空間部分使用24顆高度約2.02萬千米的衛星組成衛星星座,24顆衛星均為近圓形軌道,運行周期約為11小時58分,分布在6個軌道面上(每軌道面4顆),軌道傾角為55度,衛星的分布使得在全球任何地方、任何時間都可觀測到4顆以上的衛星,并能保持良好定位解算精度的幾何圖形,這就提供了在時間上連續的全球導航能力,
想了解GPS詳細資訊請參考文章,
北斗衛星導航系統
中國北斗衛星導航系統(英文名稱:BeiDou Navigation Satellite System,簡稱BDS)是中國自行研制的全球衛星導航系統,也是繼GPS、GLONASS之后的第三個成熟的衛星導航系統,北斗衛星導航系統(BDS)和美國GPS、俄羅斯GLONASS、歐盟GALILEO,是聯合國衛星導航委員會已認定的供應商,
北斗衛星導航系統由空間段、地面段和用戶段三部分組成,可在全球范圍內全天候、全天時為各類用戶提供高精度、高可靠定位、導航、授時服務,并且具備短報文通信能力,已經初步具備區域導航、定位和授時能力,定位精度為分米、厘米級別,測速精度0.2米/秒,授時精度10納秒,
全球范圍內已經有137個國家與北斗衛星導航系統簽下了合作協議,隨著全球組網的成功,北斗衛星導航系統未來的國際應用空間將會不斷擴展,
想了解北斗衛星導航系統詳細資訊請參考文章
1.2、基站定位
除了像GPS這種衛星定位之外,我們身邊的設備如:智能手機、智能手表、穿戴設備等能聯網的設備都可以用來定位,通過連接運營商(電信、聯通、移動)基站來定位的方式稱之為基站定位,或者又稱之為移動位置服務(LBS--Location Based Service),
1.3、硬體連線
本案例只需要準備如下硬體:
- SP32開發板 1套
- 杜邦線若干
- GNSS定位模塊 HT2828Z3G5L
其中,HT2828Z3G5L與ESP32的連接如下:
| 定位模塊 | ESP32 | ||
|---|---|---|---|
| 引腳名 | 引腳功能 | 連接到引腳 | 引腳序號 |
| VBAT/PPS | 備用電池 / 時間標準脈沖輸出 | NC(不連接) | —— |
| VCC | 模塊供電,可選3.3V至5V | 3.3V | 2 |
| TX | 串口發送端 | RXD2 | GPIO16 |
| RX | 串口接收端 | TXD2 | GPIO17 |
| GND | 接地 | GND | 30 |
| EN | 模塊使能,高電平/懸空使能模組作業,低電平模組關閉 | NC(不連接) | —— |
如下圖實物圖所示:

2、物聯網平臺云端開發
整個程序包含以下4個步驟:
- 開通公共實體
- 創建產品(設備模型)
- 定義產品功能(物模型)
- 創建設備及獲取三元組
2.1、開通公共實體
對于第一次使用物聯網平臺的讀者,需要開通實體以使用物聯網平臺的功能,這里可以使用免費的公共實體進行開發,
在物聯網平臺中,左上角選擇“華東2-上海”,點擊“公共實體”,即可開通,
2.2、創建產品(設備模型)
點擊“公共實體”,即可進入控制臺進行產品創建,然后,點擊“創建產品”按鈕,即可進入新建產品頁面,

進入后,設定“產品名稱”,這里我們命名為“車輛定位器”,讀者也可以根據自己的喜好來命名,
在“所屬品類”中,選擇“標準品類”,“標準品類”收錄了一些常用的設備模型,其會為我們定義好后續的產品功能(物模型),我們也可以選擇“自定義品類”,來自己定義物模型,在右側欄中搜索并選擇“定位器”,

產品的節點型別選擇“直連設備”,資料格式選擇“ICA標準資料格式”,檢驗型別和認證方式選擇默認設定即可,開發者可根據自己的需求在“產品描述”頁面添加針對此產品的描述,
對于 ESP32 等搭載 Wi-Fi 的設備而言,聯網方式可以選擇“Wi-Fi”,

選擇之后,點擊“確認”按鈕,即可完成產品創建,回傳“產品”頁面之后可以看到產品類表中會出現剛剛創建的“車輛定位器”的產品,如下圖所示,

2.3、定義產品功能(物模型)
點擊上圖中的“查看”按鈕,即可看到產品資訊,Topic串列,功能定義,資料決議等跟產品相關功能的設定,點開“功能定義”標簽頁,可以看到設備物模型定義,

因為在創建產品的程序中選擇了標準的產品品類,這里會出現標準品類中自帶的物模型設定,即“地理位置”,點擊“查看”,我們可以看到該屬性的詳情,可以看到,該屬性的資料型別是一個結構體(struct),其成員描述了設備的精度(浮點)、維度(浮點)、海拔(浮點)、坐標系統(列舉量,1:WGS_84/2:GCJ_02)

定義好物模型后,記得點擊“發布”以使變更生效,

產品及其物模型創建完成后就可以創建這個產品的設備了,
2.4、創建設備及獲取三元組
點擊左側欄中“產品“,回到產品串列,在產品串列頁面中,點擊“管理設備”,就會進到設備管理頁面,

在“設備”頁面點擊“批量添加”按鈕,如下圖所示,填入需要生成的設備數量,例如圖中物聯網平臺會為我們生成3臺設備,以及隨機的deviceName,

批量生成的設備如下

設備添加完成后,點擊“前往查看”按鈕,就可以看到此設備的詳細資訊了,

獲取設備三元組
如下圖所示,點擊“查看”按鈕,就可以看到設備的三元組資訊,三元組是物聯網設備端和物聯網云端設備相關聯的唯一識別符號,在設備端連接云端的時候會使用三元組資訊和云端進行鑒權,鑒權通過之后云端會認為設備已激活并上線,

3、設備端開發
在進行下一步之前請確保ESP32開發環境已經搭建完畢,詳情請參考esp32開發環境的說明,
3.1、創建解決方案
如下圖所示,打開HaaS Studio后,新建一個基于helloworld的Python輕應用,

如下圖所示,打開VS Code之后在新建一個基于helloworld的python工程,設定好工程名稱(“vehicle_location”)及作業區路徑之后,硬體型別選擇ESP32,點擊立即創建,創建一個Python輕應用的解決方案,
將獲取定位資料的全部代碼檔案復制并覆寫剛剛創建的工程目錄下,如下圖代碼區所示:

Python腳本的詳細說明請參考腳本內嵌的文字版注釋
之后,在代碼中填入對應的資訊
- 填寫Wi-Fi名稱及密碼
?? 在main.py中,填寫可用的Wi-Fi名稱及密碼,
# wifi連接的的ssid和pwd定義
wifiSsid = "請填寫您的路由器名稱"
wifiPassword = "請填寫您的路由器密碼"
- 修改設備端三元組
?? 在main.py中,填寫創建的設備三元組資訊,關于設備三元組的獲取,請參考獲取設備三元組中的步驟,
# 三元組資訊
productKey = "產品key"
deviceName = "設備名稱"
deviceSecret = "設備密鑰"
3.2、運行結果
本地查看
推送此腳本到ESP32之后,串口會輸出獲取到的定位資訊,同時按照腳本中的邏輯,當定位資訊發生變化時,會將更新的定位資訊上報至物聯網平臺,如下面這段串口日志所示,
...
************* python task init*******
mount fs
>>> execfile("/data/pyamp/main.py")
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
wifi_connected: False
('192.168.0.105', '255.255.255.0', '192.168.0.1', '192.168.0.1')
sleep for 1 s
establish tcp connection with server(host='a1zxKgAV78Z.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
物聯網平臺連接成功
sleep for 2s
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b'$GNGGA,,,,,,0,00,25.5,,,,,,*64\r\n$GNGLL,,,,,,V,M*79\r\n$GNGSA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,1*01\r\n$GNG')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b'SA,A,1,,,,,,,,,,,,,25.5,25.5,25.5,4*04\r\n$GPGSV,1,1,00,0*65\r\n$BDGSV,1,1,00,0*74\r\n$GNRMC,,V,,,,,,,,,,M')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n\r\n$GNRMC,,V,,,,,,,,,,M')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
bytearray(b',V*34\r\n$GNVTG,,,,,,,,,M*2D\r\n$GNZDA,,,,,,*56\r\n$GPTXT,01,01,01,ANTENNA OPEN*25\r\n$GNGGA,,,,,,0,00,25.5,')
[0.0, 'W'] [0.0, 'N'] 0.0
[0.0, 'W'] [0.0, 'N'] 0.0
...
出現此段日志時,說明定位資訊上報成功,讀者此時可以前往物聯網平臺查看設備的實時定位資料,
在物聯網平臺上查看設備資料
當設備啟動成功并第一次連接到物聯網平臺之后,物聯網平臺上對應的設備狀態會從”未激活狀態“變為”上線“,點擊“物模型資料”標簽頁,能夠看到設備上報到物聯網平臺的屬性值,

點擊卡片上的“查看資料”,可以看到完整的歷史資料,

此時,如果設備上報新的地理位置資訊,則物聯網平臺上能夠實時顯示,至此,定位資料上云完成,
4、物聯網應用開發(定位資料可視化)
在前面的章節中,我們已經成功將地位資訊實時上傳到了云端,本節中,我們將介紹如何快速實作將設備的位置實時顯示在地圖中,
IoT Studio 提供了應用快速開發的能力,可以很方便地與物聯網平臺進行聯動,本節的開發作業也將圍繞 IoT Studio展開,
4.1、新建“普通專案”
打開IoT Studio官網,在專案管理中新建一個空白專案,如下圖所示,將此專案命名為“車輛實時定位系統”,

4.2、關聯產品
為了使本專案能夠獲取到目標設備的定位資訊,我們首先需要將該專案和我們在前一節創建的產品“車輛定位器”系結,
在專案控制臺,點擊左側的“產品”,點擊“關聯物聯網平臺產品”,此時可以看見我們創建的“車輛定位器”,點擊選中,并勾選“關聯產品同時關聯其下所有設備”,以便該專案可以訪問到所有設備的定位資訊,

4.3、創建“Web應用”
在專案控制臺,點擊左側的“主頁”,在新專案的首頁新建一個Web應用,命名為“車輛實時定位監控”,

Web應用創建成功后自動跳轉到應用界面設計頁面,點擊左側欄中的“組件”按鈕圖示,就可以看到可用的組件串列,各組件的說明請參考IoT Studio組件說明,
為了能夠將設備顯示在地圖上,我們選用“設備地圖”組件,滑鼠懸停在該組件上以查看詳細資訊,

將“設備地圖”組件拖拽至畫布,并調整大小,此時,地圖上還未能正確顯示設備,我們需要點擊右側“編輯設備地圖”,
點擊右側“編輯設備地圖”后,我們可以在右側“選擇設備”中,選擇我們剛剛和專案系結的“車輛定位器”,點擊確定,

此時,地圖上已經出現了定位點,正是我們之前上線的設備,在右側選擇“車輛定位器”,可以看到系結的所有設備,點擊對應設備可以在地圖上定位到每個設備的具體位置,至此,“設備地圖“配置完成,點擊頁面右上角”√“保存配置,

4.4、發布上線

回到WEB應用頁面,可以看到地圖上的設備定位已經正常顯示,可以進行發布,在發布之前可以點擊上圖的“預覽”查看應用的實際運行效果,實際運行效果如下圖所示:

這樣我們就完成了一個車輛實時定位系統從設備端定位資訊獲取、物聯網云平臺開發及物聯網應用開發全鏈路的開發,
如果想要學習車輛定位系統案例更詳細的操作步驟,請參考“車輛定位系統詳解”中的說明,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413993.html
標籤:其他
