SwisTrack/Examples/OutputProcessing
SwisTrack/Interfacing SwisTrack 為您概述瞭如何與 SwisTrack 通訊。SwisTrack 示例資料夾中的 OutputProcessing 資料夾包含一些示例指令碼和程式,可以幫助您實現這一點。
NMEA 格式非常易於使用正則表示式處理,因為每個訊息都位於單獨的一行,並以美元符號開頭。因此,對於所有簡單的任務,Perl、Python、Ruby 或 Shell 指令碼是最簡單的方法。而且,如果您將其簡化為真正需要的部分,您的任務確實很簡單。
該swistrack-filter.*檔案包含關於如何處理 SwisTrack 訊息的簡單示例。該swistrack-interface.pl指令碼還展示瞭如何傳送訊息以遠端控制 SwisTrack。如何在終端(shell)中使用這些過濾器指令碼在SwisTrack/Interfacing SwisTrack中解釋。
為了方便將 SwisTrack 與您的 C/C++ 程式連線,我們為您提供了用於解析 NMEA 訊息的程式碼。必要的檔案以及示例程式和一些實現提示可在以下資料夾中找到:NMEAParserC和NMEAParserC++分別。兩者都僅僅包含一個狀態機,它掃描資料流以查詢 NMEA 訊息,並且適用於阻塞和非阻塞 IO。
NMEA 解析器的 C 實現(NMEAParserC)也可以用在微控制器上(如果您的微控制器提供 C 編譯器)。此外,您可能需要編寫一個指令碼,它在 SwisTrack 的 TCP 連線和微控制器的序列連線之間轉發資料。單向轉發甚至可以在 shell 上實現)。
cat < /dev/tcp/HOSTNAME/3000 > /dev/ttyS0 # assuming your serial port is /dev/ttyS0
解析 NMEA 的開銷非常小,訊息大小方面的開銷也很合理。因此,當透過緩慢的序列鏈路將資料傳送到微控制器時,很少需要將資料轉換為其他格式。
我們編寫了 swig/python 繫結,允許您例項化 swistrack 管道並將輸出作為 IplImage 獲取。這使得在與 SWIG 相容的語言中檢視管道的各個部分成為可能。(到目前為止,我們只測試了 python,但 Swig 支援多種語言。)
NMEA 訊息校驗和是可選的,只有在您透過不可靠的通道傳送資料時才有意義。SwisTrack 始終在傳出訊息中新增校驗和,但對傳入訊息不需要任何校驗和。但是,如果提供了校驗和,它必須是正確的!(校驗和錯誤的訊息將被丟棄。)
只要您透過 TCP 連線傳輸訊息,就可以安全地假設通道是可靠的(傳輸錯誤由較低的網路層處理),您無需實現校驗和檢查。USB 和藍牙傳輸也是安全的。但是,如果您透過序列電纜傳輸訊息(例如,到機器人),處理校驗和可能是有意義的 - 特別是在系統執行時插拔電纜時。
Matlab(或類似程式)不會直接讀取 NMEA 訊息。在 Matlab 中繪製資料的最簡單方法是編寫一個過濾器指令碼(調整swistrack-filter.*),它從所有傳入的 NMEA 訊息中提取相關資訊並以矩陣形式列印。例如
$PARTICLE,0,10,15,2.11
將轉換為
0 10 15 2.11
然後,可以使用 Matlab load 函式讀取生成的檔案。
將任務拆分為幾個較小的(不相關的)任務有時很有幫助,因此建立一些小的、獨立的指令碼/程式,它們都連線到 SwisTrack。由於 SwisTrack 同時接受多個 TCP 連線,因此這與單個大型指令碼/程式一樣有效。所有這些指令碼/程式都可以在同一臺或不同的計算機上執行,這為您提供了最大的靈活性。
如果需要在指令碼/程式之間交換資訊,可以使用BROADCAST 訊息。這允許您透過 SwisTrack 向所有客戶端傳送訊息,而無需費心在它們之間建立專用的通訊通道。