SwisTrack/多攝像頭客戶端
SwisTrack 多攝像頭客戶端是一個客戶端工具,用於與多個 SwisTrack 例項通訊。它使用 wxWidgets 用 C++ 編寫。透過 TCP 連線接收到的資料將在顯示在視窗上之前合併並同步。 SwisTrack 是連線的伺服器部分,SwisTrack 多攝像頭客戶端是客戶端。
您可以使用滑鼠滾輪放大和縮小。要聚焦在特定區域,請右鍵單擊該區域。左鍵單擊將在點選機器人時獲得一些資訊。透過單擊滑鼠滾輪,檢視將重置。
我們有 10 個類,其中 "ClientFrame" 是主要的類。
| 名稱 | 解釋 |
| ClientFrame | 定義一個新的幀型別(主類) |
| CommunicationMessage | 建立可以傳送給機器人和 SwisTrack 例項的新訊息。 |
| CommunicationNMEAInterface | 用於解析傳入訊息和傳送傳出訊息的介面 |
| MapPanel | 負責繪製面板 |
| Robot | 建立用於通訊和繪製的新機器人 |
| RobotSocketManager | 負責機器人和 SwisTrack 多攝像頭客戶端之間的通訊 |
| SavePosition | 如果啟用,則將每個機器人分開儲存在一個檔案中,以儲存它們的位置 |
| STClient | 定義應用程式型別 |
| SwisTrack | 建立用於通訊和繪製攝像頭區域的新 SwisTrack 物件 |
| SwisTrackSocketManager | 負責 SwisTrack 例項和 SwisTrack 多攝像頭客戶端之間的通訊 |
如果選擇選單“編輯/編輯設定”,將彈出一個編輯視窗,您將能夠更改設定。注意語法,否則程式將無法正常執行。以“#”開頭的行被視為註釋。
SwisTrack 多攝像頭客戶端設定的正確語法是(示例)
| 型別 | Adress:port; | 參考點 (x,y); | 向量 1 (x,y); | 向量 2 (x,y); | 寬度、高度 (w,h); |
| cam | localhost:3000; | 2,3; | 1,0; | 0,1; | 4,6 |
| 型別 | Adress:port; | id |
| robot | 127.0.0.1:4002; | 5 |
注意,在型別之後始終緊跟一個“:” ,否則在每個條目之後都緊跟一個“;”,最後一個條目除外,它後面沒有任何字元。請檢視截圖以瞭解實際示例。
如果需要,可以將機器人的移動儲存到 "robotX.txt" 檔案中(X 是機器人的 ID)。每幀將使用一行。語法如下
幀號、x 方向位置、y 方向位置、角度
示例:217,0.669787,8.297836, 6.210000
如上所示,我們使用一個參考點和 2 個向量、一個寬度和高度來定義一個攝像頭區域。
SwisTrack 多攝像頭客戶端使用 NMEA 0183 協議與 SwisTrack 例項和機器人通訊。
請記住,每個命令都封裝在一條訊息中,該訊息包含一個訊息頭(命令)和一個根據特定命令的論證列表。每個命令都以“$”開頭,並使用大寫字母。
| 命令 | 論證 | 描述 |
| $START | 無 | 啟動 SwisTrack 例項並將當前幀號設定為 0,但在傳送 $STEP 之前不會處理任何內容。 |
| $STOP | 無 | 停止當前跟蹤並將當前幀號重置為 0。 |
| $STEP | 無 | 指示 SwisTrack 例項處理下一張影像幀。 |
程式可以暫停(不再發送 $STEP 命令)並透過選單命令“ST 控制/暫停跟蹤”和“ST 控制/恢復跟蹤”恢復。
| 命令 | 論證 | 描述 |
| $PARTICLE | int id, double x, double y, double angle | 在幀上識別到的每個機器人都會使用這些引數單獨傳送 |
| $BEGINFRAME | int frameNb | 指示在此命令之後到達的資料屬於傳送的幀號 |
| $ENDFRAME | 無 | 指示當前處理的幀已完成 |
備註:一個或多個 $PARTICLE 命令只能在 $BEGINFRAME 和 $ENDFRAME 命令之間接收!
| 命令 | 論證 | 描述 |
| $STATUS | 無 | 獲取機器人的當前狀態(例如:跟蹤、空閒、搜尋)。 |
| $POSITION | double position x, double position y | 重置機器人的當前位置。 |
| 命令 | 論證 | 描述 |
| $STATUS | string status | 返回其當前狀態。 |
以下是從 SwisTrack 多攝像頭客戶端擷取的一些截圖