很多時候,我們使用LabVIEW可以和第三方的軟件進行交互,可以得到更好的效果。
今天我們分享的,是和外界軟件怎么UDP通信。
有些同學是做飛行控制的,在做飛行仿真時候,肯定會用到視景仿真。也就是通過屏幕,顯示飛機的姿態(tài),經(jīng)緯度等信息。
一般地,做飛行仿真,如果自己使用Unity3D或者UnReal的虛擬引擎來做,比較費時間,需要對機場環(huán)境建模。
而針對普通的用戶,更好的方式,則是使用目前比較流行的3D飛行游戲軟件來開發(fā)。
像開源的Flight Gear,或者收費的Xplane等,都提供第三方的通信接口,通過UDP,可以接收游戲引擎中飛機的基本數(shù)據(jù),也可以向游戲引擎發(fā)數(shù)據(jù),控制飛機姿態(tài)和位置。
今天以xplane作為一個實例,講述LabVIEW通過UDP顯示Xplane的數(shù)據(jù),并顯示在地平儀和電子地圖上。
Xplane游戲界面如下,做過飛行仿真的同學肯定不陌生在地圖上顯示的效果如下。
由于地圖放大很大,所以呈馬賽克狀,下圖右側(cè)為xplane的飛機姿態(tài),左側(cè)為LabVIEW顯示的姿態(tài)和地圖位置(需要看實際效果,可以跳轉(zhuǎn)本文末尾,看視頻更佳)
首先,本文使用的版本是Xplane11,其他版本操作類似。在交互前,最重要的是進入設置界面進行數(shù)據(jù)設置。
點擊選項卡數(shù)據(jù),數(shù)據(jù)輸出。 這里可以勾選要輸出的數(shù)據(jù)。
勾選有4列,第一個顯示在座艙,就是飛行時候,數(shù)據(jù)會顯示在飛行界面左上角。第4列是UDP輸出,勾選后,軟件會將勾選的數(shù)據(jù)通過UDP發(fā)送出去。
一般的勾選UDP就行,但是,第一列顯示座艙勾選后,我們會直觀看到實際數(shù)據(jù)是多少,這樣UDP輸出的數(shù)據(jù),通過我們二次開發(fā)的軟件解析,可以對比數(shù)據(jù)一致性。
記得右下角,勾選 進行網(wǎng)絡數(shù)據(jù)輸出。
下圖,左上角,就是剛才勾選的座艙顯示的數(shù)據(jù)。
我勾選了速度,姿態(tài),經(jīng)緯度等。所以都顯示出來了。
實際UDP外發(fā)的時候,也是從上到下,數(shù)據(jù)依次發(fā)送的。
我們解析數(shù)據(jù)時候,可以和這個對照一下。
現(xiàn)在看下UDP 數(shù)據(jù)結構: 所有數(shù)據(jù)均以字節(jié)形式發(fā)送,UDP數(shù)據(jù)開頭為“DATA,”
prolouge 的第五個字節(jié)是“內(nèi)部使用”字節(jié)
接下來的 36 個字節(jié)是消息
消息的前 4 個字節(jié)表示數(shù)據(jù)元素的索引號,如 X-平面 中的“數(shù)據(jù)輸出”屏幕所示
最后 32 個字節(jié)是數(shù)據(jù),最多 8 個單精度浮點數(shù)
下面是從 X-Plane 發(fā)送的原始數(shù)據(jù)字符串:
68 65 84 65 60 18 0 0 0 171 103 81 191 187 243 46 190 103 246 45 67 156 246 26 67 47 231 26 67 0 192 121 196 0 192 121 196 85 254 151 193
讓我們分解一下:
68,65,84,65,60 = D,A,T,A,‘’ :這些是 CHAR。我們不關心的第 5 個字節(jié),所以當 將任何數(shù)據(jù)句子發(fā)送到 X-Plane,應在此處放置一個 0(零)。
18,0,0,0 = 18 :這是對應于X平面中特定數(shù)據(jù)集的索引號。在此示例字符串中, 我們正在查看數(shù)據(jù)集,“18:俯仰,滾動,標題”。在這 4 個字節(jié)中,我們唯一需要的字節(jié)是第一個字節(jié)。其他 3 個將始終為零。第一個字節(jié)不需要任何計算,用作整數(shù)。
171,103,…,151,193:這 32 個字節(jié)構成了需要計算的 8 個單精度浮點數(shù)。
向X-Plane發(fā)送數(shù)據(jù)句子的格式與從X-Plane發(fā)送的格式完全相同
發(fā)送句子時,請確保序言的第 5 個字節(jié)為零 (0)
并非所有數(shù)據(jù)集都使用所有 8 個浮點數(shù)。它們要么只是零,要么是“0,192,121,196”,即 -999。
對于數(shù)據(jù)集中您不希望更改或希望將控制權“交還”給X-Plane的任何項目, 發(fā)送值 -999 或 0,192,121,196。 通過上述描述和設置,我們下面可以通過LabVIEW來接收UDP數(shù)據(jù)。
程序很簡單,UDP連接,UDP讀取,UDP關閉。 UDP連結,端口為默認的49001,然后收到的數(shù)據(jù),前5個是DATA,丟掉。截取后面的數(shù)據(jù)。
后面數(shù)據(jù),每4個字節(jié)為一個數(shù)據(jù)。雖然有一個數(shù)據(jù)是序號,但是也是4個字節(jié)。
所以,我們強制轉(zhuǎn)換成單精度,得到我們要的數(shù)據(jù)。
通過對比實際座艙右上角顯示的數(shù)據(jù),我們通過索引,可以得到想要的數(shù)據(jù)。
我們會發(fā)現(xiàn)有一個數(shù)據(jù)特別大,那是因為不應該用單精度轉(zhuǎn)化,是參數(shù)的ID號,可以通過條件結構來篩選需要的信息,不過參數(shù)固定的話對我們來說可以不用管。
通過LabVIEW編寫的地面站軟件顯示得到如下的效果(動圖)。
從軟件界面可以清晰看到Xplane飛機的俯仰角、橫滾角、經(jīng)緯度、高度,飛機電子地圖顯示等。
如果需要使用LabVIEW控制Xplane飛行,則需要使用UDP發(fā)送。發(fā)送時候,格式需要查看xplane的說明。
后面,大家可以自由使用LabVIEW獲取飛機信息啦。
審核編輯:劉清
-
LabVIEW
+關注
關注
1974文章
3656瀏覽量
324252 -
UDP通信
+關注
關注
0文章
21瀏覽量
1938
原文標題:【LabVIEW的UDP通信實例】LabVIEW與Xplane飛行界面數(shù)據(jù)仿真交互
文章出處:【微信號:小草手把手LabVIEW,微信公眾號:小草手把手LabVIEW】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論