本文將介紹一個範例項目,該項目顯示一個儀表板,報告使用 VEXlink 的機器人到機器人通訊的狀態以及 Jetson 的狀態。 ai_demo 專案託管在我們的 Github上。 此示範專案透過 USB 串列連接從 Jetson 處理器收集資料。 接收到資料後,資料會顯示在 V5 Brain 的螢幕上,並傳送到透過 VEXlink 連接的合作夥伴 V5 機器人。
註:此專案需要最新版本的 VS Code Extension for V5。 在此下載 V5 的 VS Code 擴充功能。
NVIDIA Jetson Nano 與 VEX V5 大腦通信
Jetson 處理器包含一個從 VEX AI 軟體收集以下資料的應用程式:
機器人位置數據:
- 機器人距離場地中心的 X、Y 位置(以公尺為單位)。
- 機器人的方位角(航向)、仰角(俯仰)、旋轉(滾動)皆以弧度表示。
物體偵測資料(三種):
- 此數據代表 VEX AI 英特爾相機偵測到的物體。
- 此數據參考相機影像描述物件。
- X、Y、寬度和高度的值以像素為單位。 像素值參考影像和物件偵測框的左上角。 影像解析度為 640x480。
地圖檢測(類型二):
- 此數據表示與 GPS 感測器相同的座標系中物體在場地上的位置,以公尺為單位報告。
- 每個物件也包含該物件相對於場中心的位置。 X 和 Y 的值以各自軸上的場中心的公尺為單位。 Z 的值是距場地圖塊的米(高度)。
檢測對象(類型三):
- 這封裝了有關檢測到的對象的所有資訊。
- 每個物件都包含一個表示偵測到的物件的分類的值。 (類別 ID:0 = GreenTriball、1 = RedTriBall、2 = BlueTriBall)
- 每個物件還包含一個機率,代表 VEX AI 對偵測的置信度。 這是在 model.py 中刪除低機率檢測的過濾器之後。
- 此外,VEX AI 英特爾攝影機還以公尺為單位報告物體的深度。
- 影像偵測和地圖偵測附加到每個對象,以表示影像上以及現實世界中的物件的座標。
ai_demo 程序的細分:
主要.cpp
VEX 專案的標準包括:
聲明 Jetson 類別的實例。 此類用於向 Jetson 發送資料請求以及透過 USB 串列連接接收資料。
#定義MANAGER_ROBOT 1
聲明 robots_link 類別的實例。 該物件將用於在該機器人和夥伴機器人之間連接和傳輸資料。 可以將同一專案下載到兩個單獨的機器人。 一個機器人需要有以下線路:
//#定義MANAGER_ROBOT 1
在將程式碼載入到第二個機器人之前,您需要註解掉該行:
robots_link 類別設定機器人的 VEXlink 並處理兩個機器人之間的資料傳輸和接收。 我們不會在本文中詳細介紹該類別的工作原理。 首先了解 VEXlink 的工作原理是個好主意。 有關使用 V5 VEXlink API 的更多詳細信息, 本文檔 解釋了新庫以及如何有效地使用它們進行機器人間通信。
-
競賽活動處理者
VAIC和VRC最大的區別之一是沒有驅動器控制週期。 相反,有兩個自主時期:隔離時期和互動時期。 在此範例中,每個自治週期都有單獨的例程。 由於VEX API不支援兩種不同的回調,因此程式中必須有一個標誌來決定要執行哪個例程。 在本範例程式中,「firstAutoFlag」用於呼叫第一次啟用autonomous時的Isolation函數,以及第二次啟用autonomous時的互動函數。 需要注意的一點是,如果由於某種原因需要重置比賽,則需要重新啟動演示程序,以便重置firstAutoFlag。
-
主要的()
這是該項目的主要任務。 它首先呼叫 vexcodeInit() 來正確設定 VEXcode 環境。 接下來,宣告一個本機 AI_RECORD 物件來儲存我們從 Jetson 接收的資料。 還設定了一個單獨的任務來處理使用最新資料更新畫面。 該任務的程式碼包含在dashboard.cpp 檔案中。 自治回調也被註冊來處理自治週期何時啟動。
主 while() 迴圈首先將 jetson_comms 物件中的最新資料複製到本機 AI_RECORD 物件中。 然後,它將機器人的位置資訊傳遞給連結對象,以便將其傳輸給我們的夥伴機器人。 一旦處理完數據,它就會向 Jetson 要求更多數據並休眠 66 毫秒。 該數據的輪詢率為 15Hz。 由於 AI 系統資料更新速度約為 15Hz,因此沒有理由更快進行輪詢。
注:Jetson 地圖資料僅需由單一任務請求。