全雪貞,張 潔,文仙姣
(1.青海省基礎測繪院,青海 西寧 810001;2.青海省自然資源綜合調查監測院,青海 西寧 810001)
物聯網時代是人類信息化發展的一次重要變革。聯網是通過各種信息傳感設備,按約定的協議,把任何物品與互聯網相鏈接,進行信息交換和通信,從而實現對物品的智能化識別、定位、追蹤、監控和管理的一種網絡。解決定位和追蹤問題,本質上就是解決人與物、物與物的位置鏈接問題[1-2]。2020年6月23日北斗三號最后一顆衛星成功發射,實現了北斗系統全球組網[3-4],這意味著我國全自主研發的北斗系統已具備全球定位服務能力,將極大促進基于位置的場景智能化應用。位置智能化是物聯網的重要表現形式,將重塑眾多行業思考地理位置的重要性。北斗系統應用范圍由單一的工程測量逐漸拓展到安全監測、氣象、地震、水利、電力、農業、無人機、手機、汽車等領域。北斗模塊/終端已在悄悄向物聯網靠近,“高精度”、“低成本”、“小型化”已成為勢不可擋的趨勢。
本文基于Raspberry Pi 4B和Node.js技術,實現了低成本高精度位置服務的物聯網裝備研發,通過MQTT技術對北斗RTK定位結果進行遠程傳輸,實時上傳至物聯網云平臺并進行存儲。該設備還可結合GIS和遙感技術定制開發業務系統,為更多的行業應用提供廣闊的思路。
本文采用Raspberry Pi 4B(1.2版4核4G內存的ARM主板)作為運行載體,北斗定位模塊選擇Mosaic Mini-EVK,其接口如表1所示。若以USB方式鏈接Raspberry Pi會自動安裝USB驅動程序,虛擬出一個網絡(固定 IP 地址192.168.3.1)和兩個串口(/dev/ttyACM0和/dev/ttyACM1),3個接口均為獨立接口;同時USB鏈接可以供電,無需外接電源。

表1 北斗定位模塊Mosaic Mini-EVK接口列表
北斗RTK物聯網設備如圖1所示,通過北斗/GNSS天線接收衛星信號,通過MMCX線纜連接北斗定位模塊;通過一根USB線連接北斗定位模塊和Raspberry Pi,既能給北斗定位終端供電,又能進行雙向串口通信。Raspberry Pi作為運載平臺,可運行RTKLIB-str2str和Node.js,將遠程采集的高精度北斗RTK定位結果上傳至物聯網云平臺,供后續GIS開發應用[4-5]。

圖1 北斗RTK物聯網設備模型
在Raspberry Pi中安裝和編譯RTKLIB-str2str[6-7],生成str2str二進制可執行的程序。終端輸入的命令為;
$ git clone https://github.com/tomojitakasu/RTKLIB.git
$ cd /RTKLIB/app/str2str/gcc
$ make
利用RTKLIB-str2str建立流動站與基準站之間的鏈接,確保Raspberry Pi通過WiFi/GPRS等方式正常接入互聯網。差分數據流指向如圖2所示,str2str輸入流為Ntrip Client,輸出流為串口(/dev/ttyACM0),將Ntrip協議中的RTCM差分改正數通過串口傳輸給北斗/GNSS模塊進行RTK定位;同時所有鏈路均為雙向通信,str2str將串口輸出的GGA語句通過Ntrip Client傳入Ntrip Caster,在北斗/GNSS模塊終端附近計算得到一個虛擬參考站(VRS),再將這個VRS的差分改正數RTCM數據傳回,從而實現高精度實時位置RTK定位[8]。

圖2 北斗RTK差分數據流
str2str命令的執行語句為;
$ str2str -in ntrip://15kyvhc:qafys5@60.205.8.49:8002/RTCM32_GNSS_RTK -out serial://ttyACM0:115200:8:n:1 -n 100 -b 1
北斗定位模塊Mosaic Mini-EVK的RTK解算結果將通過串口/dev/ttyACM1按照1 Hz頻率播發NMEAGGA。Node.js[9-10]串口數據讀寫包Node-serialport通過串口方式上報(默認0.2Hz頻率)阿里云物聯網服務平臺[10-11],實現遠程穿透,RTK定位坐標自動回傳。北斗RTK定位結果上云的數據流向如圖3所示。

圖3 Node.js串口上傳北斗RTK定位結果
NMEA-GGA 語句包括語句ID標識頭、世界時間、緯度、緯度方向、經度、經度方向、定位狀態指示、使用衛星數量、HDOP—水平精度因子、橢球高、高度單位、大地水準面高度異常差值、高度單位、差分數據期限、差分參考基站標號、校驗和結束標記(用回車符<CR>和換行符<LF>)17個字段,分別用14 個逗號進行分隔,即 $GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx<CR> <LF>,格式示例為;
$GPGGA,084400.000,3028.8931184,N,11424.7794113,E,5,06,3.7,44.7958,M,-13.5787,M,1.0,0381*5D
其中,$ GPGGA為ID標示頭;<1>為UTC時間,格式為hhmmss.sss;<2>、<4>分別為緯度、經度,格式為ddmm.mmmm;<3>、<5>分別為緯度方向N或S、經度方向E或W;<6>為解算狀態指示,0初始化、1單點定位、 2碼差分、 3無效PPS、 4固定解、 5浮點解、 6正在估算、7人工輸入固定值、8模擬模式、9WAAS差分;<7>為使用衛星數量,00~12;<8>為HDOP—水平精度因子,0.5~99.9,一般認為HDOP越小,質量越好;<9>、<10>分別為海拔高度、大地水準面高度異常差值,-9999.9~9999.9 m,M指單位m;<11>為差分數據期限,最后設立RTCM傳送的秒數量,若不是差分定位則為空;<12>為差分參考基站標號,0000~1023;*為語句結束標志符;xx為從$開始到*之間的所有ASCII碼的異或校驗;<CR>、<LF>分別為回車符、換行符,均為結束標記。
阿里云物聯網平臺操作包括注冊北斗RTK設備、選擇Node.js開發包、下載“aliyun-iot-device-sdk”、配置文件并上傳數據4個步驟。確保Raspberry Pi接入互聯網并安裝最新版Node.js后,再安裝Node-serialport并運行“aliyun-iot-device-sdk”。數據上云需要完成4個步驟;
1)安裝最新版Node.js.,執行語句為;
$ npm config set registry http://registry.npm.taobao.org
2)安裝Node-serialport包,執行語句為;
$ sudo npm install serialport --unsafe-perm --build-form-source
3)修改阿里云物聯網平臺SDK的Index.js,實現串口讀取數據,執行語句為;
const SerialPort = require('serialport') ‘ 導入包
const port = new SerialPort('/dev/ttyACM0', {
baudRate:115200, ‘波特率
dataBits:8, ‘數據位
parity:'none', ‘奇偶檢校
stopBits:1, ‘停止位
flowControl:false, ‘流控開關
autoOpen: false ‘是否自動連接
});
var gga;
port.open(function (error) {
if ( error ) {
console.log('failed to open: '+error);
} else {
console.log('open');
port.on('data', function(data) {
gga = data.toString();
});
}
});
setInterval(() => {
const params = {
GGA: gga
};
4)運行程序,實現數據上云,執行語句為;
$ sudo bash start.sh
終端高精度位置數據上云后,即可采用GeoServer服務構建WebGIS系統,如圖4所示。利用低成本北斗RTK物聯網設備成果,充分發揮其定位精度高等技術優勢,以現有北斗基站為支撐,同時利用物聯網通信技術、大數據分析技術和GIS服務技術,在安全管理方面開展基于安全稽查現場作業的智能安全帽、智能接地線等智能工器具工程應用。通過對智能工器具定位芯片的改造,現場數據實時感知和綜合應用,實現對作業現場風險的感知和預警,以及對人員和施工過程安全的定位與管控。

圖4 基于低成本北斗RTK物聯網設備搭建的電力北斗時空基準平臺
隨著我國北斗相關設備研制水平的大幅提高和應用范圍的不斷拓展,在物聯網浪潮的沖擊下,作為萬物互聯時代提供位置信息最有效的手段,北斗系統與物聯網相結合將帶來越來越多的應用。物聯網平臺接收并存儲北斗RTK終端設備的定位結果,并通過NMEA-GGA解析獲得終端設備的定位坐標、定位模式、定位精度等信息,再結合GIS和遙感技術強大的可視化和地理空間分析能力,配合運用大數據、人工智能等高新技術,實現北斗智能化應用。基于此,本文采用Raspberry Pi和Node.js成功研發了低成本北斗RTK物聯網設備,可在諸多場景進行應用,如人員、設備位置上報,農機自主導航,自然或人工構建監測,基于厘米級定位精度配合高精度地圖實現車道級導航等。