该存储库包含 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()
在不在RTP模式下的电动机上调用。close()
方法为公开。HardwareMap
字段中显示的I2C设备(例如hardwareMap.colorSensor
)666667*100ns
而不是666666*100ns
的15fps)将无法开始流式传输。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或更高版本。