該存儲庫包含 INTO THE DEEP (2024-2025) 賽季的公共 FTC SDK。
此 GitHub 儲存庫包含用於建立 Android 應用程式以控制FIRST Tech Challenge 競賽機器人的原始程式碼。要使用此 SDK,請將整個專案下載/複製到本機。
要使用此 Android Studio 項目,您需要 Android Studio 2021.2(代號 Chipmunk)或更高版本。
要使用 Blocks 或 OnBot Java 對機器人進行編程,您不需要 Android Studio。
如果您是機器人技術新手或FIRST技術挑戰賽新手,那麼您應該考慮查看 FTC Blocks 教學以熟悉如何使用控制系統:
FTC 區塊線上教學
即使您是高級 Java 程式設計師,從 FTC Blocks 教學開始,然後遷移到 OnBot Java Tool 或 Android Studio 也會很有幫助。
如果您是 Android Studio 程式設計師,可以透過多種方式下載此儲存庫。請注意,如果您使用 Blocks 或 OnBot Java Tool 來對機器人進行編程,則無需下載此儲存庫。
git 克隆 https://github.com/FIRST-Tech-Challenge/FtcRobotController.git
或者,如果您願意,可以使用主儲存庫頁面上的「下載 Zip」按鈕。將專案下載為 .ZIP 檔案將使下載的大小易於管理。
您也可以從此儲存庫的「發佈」頁面的「下載」子部分下載專案資料夾(作為 .zip 或 .tar.gz 存檔檔案)。
發布頁面還包含預先建置的 APK。
下載並解壓縮(如果需要)資料夾後,您可以使用 Android Studio 匯入該資料夾(「匯入專案(Eclipse ADT、Gradle 等)」)。
FIRST維護線上文檔,其中包含有關如何使用FIRST Tech Challenge 軟體和機器人控制系統的資訊和教學。您可以使用以下連結存取此文件:
FIRST 技術挑戰賽文檔
請注意,線上文檔是一個「常青」文檔,會不斷更新和編輯。它包含有關FIRST Tech Challenge 軟體和控制系統的最新資訊。
FTC SDK 的 Javadoc 參考文件現已線上提供。點擊以下連結以即時網站形式查看 FTC SDK Javadoc 文件:
FTC Javadoc 文件
有關控制系統或 FTC SDK 的技術問題,請造訪 FIRST 技術挑戰社群網站:
FIRST 技術挑戰社區
該專案包含大量可供選擇的範例 OpMode(機器人程式碼範例),可將其剪下並貼上到您的 /teamcode 資料夾中以按原樣使用,或進行修改以滿足您團隊的需求。
範例資料夾:/FtcRobotController/src/main/java/org/firstinspires/ftc/robotcontroller/external/samples
位於 /TeamCode/src/main/java/org/firstinspires/ftc/teamcode 資料夾中的 readme.md 檔案包含範例命名約定的說明,以及如何將它們複製到您自己的專案空間的說明。
VisionProcessor
(可以附加到 Java 或 Blocks 中的 VisionPortal),以協助團隊在 INTO THE DEEP 遊戲中透過電腦視覺實現顏色處理ColorBlobLocatorProcessor
實作 OpenCV 顏色「斑點」偵測。新的範例程式ConceptVisionColorLocator
示範了其用途。PredominantColorProcessor
允許使用相機的某個區域作為「長距離顏色感測器」來確定該區域的主要顏色。新的範例程式ConceptVisionColorSensor
示範了其用途。AngleUnit
類型的AngularVelocity.unit
已重新命名為UnnormalizedAngleUnit
類型的AngularVelocity.angleUnit
Rev9AxisImuOrientationOnRobot
Java 類別。RevHubOrientationOnRobot
也與此感測器相容libjpeg-turbo
版本getCurrentGameTagLibrary()
現在會傳回 INTO THE DEEP 標籤。Exception
將被默默地吃掉的錯誤AngularVelocity
單位與裝置報告的單位不同,它會在 -PI 和 PI(弧度)以及 -180 和 180(度數)之間標準化。 .build()
後是否自動啟動流CameraStreamSource
接口,允許多門戶使用者透過呼叫 CameraStreamServer.getInstance().setSource(visionPortal) 選擇將哪個入口網站路由到 INIT 中的 DS。可以透過遊戲手把在 Camera Stream 會話之間進行選擇。AprilTagProcessor
上新增選項以抑制校準警告stopStreaming()
後立即呼叫close()
時導致應用程式崩潰的競爭條件stopStreaming()
時出現的 IllegalStateExceptionAprilTagDetection
和AprilTagPose(ftc/raw)
物件中的欄位現已final
setCameraMonitorViewId()
已重新命名為setLiveViewContainerId()
, enableCameraMonitoring()
已重新命名為enableLiveView()
LinearOpMode
(包括區塊 OpMode)的 OpMode 的首選方式是「線性 OpMode」。OpMode
OpMode 的首選方式是「迭代 OpMode」。OpMode
和LinearOpMode
Javadoc 註釋,使其更易於閱讀並包含更多詳細資訊。TouchSensor
介面而不是DigitalChannel
。hardwareMap
自動完成功能會錯誤地包含 lambda 類別條目stop()
方法中操縱執行器。這樣做的嘗試將被忽略並記錄。CANCELLED_FOR_SAFETY
。LynxUsbDevice.addConfiguredModule()
和LynxUsbDevice.getConfiguredModule()
已替換為LynxUsbDevice.getOrAddModule()
。VisionPortal
APIVisionPortal
是 AprilTag 和 TFOD 處理的新入口點。AndroidManifest.xml
中指定的版本來報告應用程式版本。這修正了應用程式可以向使用者顯示符合版本號但仍聲明版本不符的情況。AndroidManifest.xml
中指定的版本與SDK版本不匹配,則管理頁面上會顯示SDK版本條目。這是一個僅修復錯誤的版本,旨在解決以下四個問題。
OpMode
欄位msStuckDetectInit
、 msStuckDetectInitLoop
、 msStuckDetectStart
、 msStuckDetectLoop
和msStuckDetectStop
。init()
、 init_loop()
、 start()
或loop()
進行時間限制,因此不再使用與這些方法對應的欄位。stop()
仍然有時間限制,但現在硬編碼為 1 秒,無法使用msStuckDetectStop
進行更改。OpMode
方法internalPreInit()
、 internalPostInitLoop()
和internalPostLoop()
。OpMode
將繼續呼叫這些方法,以防它們被覆寫。LinearOpMode
根本不會呼叫這些方法。DeviceProperties.xmlTagAliases
。IMU
接口,該接口可與所有舊版控制集線器和擴展集線器中包含的原始 BNO055 IMU 以及新的替代 BHI260AP IMU 一起使用。IMU
接口,請參閱 https://ftc-docs.firstinspires.org/programming_resources/imu/imu.html。 SensorIMU
Blocks 範例也已更新為使用新的IMU
接口,並新增了以下 Java 範例:SensorIMUOrthogonal
SensorIMUNonOrthogonal
ConceptExploringIMUOrientations
IMU
介面存取。 BNO055 IMU 可以使用新的IMU
介面進行編程,也可以繼續使用舊的BNO055IMU
介面進行編程。如果您希望能夠快速切換到可能包含 BHI260AP IMU 的新 Control Hub,您應該遷移程式碼以使用新的IMU
介面。BNO055IMU
介面不同,舊的 BNO055IMU 介面僅當 REV Hub 平裝在機器人上時才能正常工作, IMU
介面可讓您指定 REV Hub 在機器人上的方向。它將考慮到這一點,並為您提供機器人座標系中的方向,而不是 REV Hub 的特殊座標系。因此,當機器人水平時(而不是 REV 輪轂水平時),俯仰和偏航將為 0,這將為大多數安裝方向帶來更可靠的方向角度值。IMU
介面返回的俯仰角和橫滾角將與BNO055IMU
介面返回的不同。遷移程式碼時,請特別注意文件。BNO055IMUNew.Parameters
實例傳遞給IMU.initialize()
來將該校準資料提供給新的IMU
介面。IMU
介面也適合由第三方供應商實現支援以四元數形式提供方向的 IMU。OpMode
(與LinearOpMode
相對)現在在專用執行緒上運行。OpMode
無法再增加處理網路指令所需的時間,反之亦然。init()
、 init_loop()
、 start()
和loop()
方法不再需要在特定時間範圍內回傳。hardwareMap.get()
時指定自訂驅動程式的類別。若要返回原始驅動程序,請指定原始驅動程式類別。如果指定由原始驅動程式和自訂驅動程式都實作的接口,則無法保證將傳回哪個實作。orientation
時的Blocks問題。 HardwareMap
檢索 I2C 裝置時,就會初始化它們。HardwareMap
檢索所有需要的裝置非常重要。即,為 OpMode 將使用的每個硬體設備宣告一個變量,並為每個設備分配一個值。請勿在執行階段執行此操作,否則當您正在擷取的裝置初始化時,您的 OpMode 可能會短暫掛起。BNO055IMU.Parameters
中的pitchMode
。pitchMode
設定為PitchMode.WINDOWS
會破壞驅動程式使用的座標約定。OpModeManagerImpl
移至com.qualcomm.robotcore.eventloop.opmode
套件。OpMode
方法resetStartTime()
(改用resetRuntime()
)。LinearOpMode.LinearOpModeHelper
類別(該類別不適合 OpModes 使用)。Enable beta Java 8 support
。terminateOpModeNow()
方法以允許 OpModes 立即乾淨地自退出。opModeInInit()
方法加入LinearOpMode
以促進初始化循環。與opModeIsActive()
類似,但用於 init 階段。"Failed resolution of: Landroid/net/wifi/p2p/WifiP2pManager$DeviceInfoListener"
相關的重複堆疊追蹤的應用程式啟動時的日誌垃圾郵件RumbleEffect
物件實例為多個遊戲手把排隊,則可能會發生兩個隆隆指令僅傳送到一個遊戲手把的情況。isPwmEnabled()
時發生的崩潰(問題 #223)。isBusy()
時的日誌垃圾郵件。close()
方法變更為公共方法。HardwareMap
欄位中的問題(例如hardwareMap.colorSensor
)666667*100ns
而不是666666*100ns
)將無法開始串流式傳輸。P = 1.17
、 I = 0.117
、 F = 11.7
位置 PIDF 值: P = 5.0
核心六角馬達:速度 PIDF 值: P = 4.96
、 I = 0.496
、 F = 49.6
位置PIDF 值: P = 5.0
Problem with 'imu'
)。 5.5版本需要Android Studio 4.0或更高版本。