FTC Java 和 Blockly 编程指南
(Blockly 截图即将推出!)
请确保您已阅读 FTC 编程快速入门。
Javadoc: [Javadoc 链接即将推出]
完整示例仓库: Limelight FTC 示例仓库
成功提示
- 先做简单的事 。在 FRC 中,我们了解到最好的软件团队通常使用最简单的方法。例如,FRC 2056 队在 2024 年使用标准的 90FPS 颜色管道而不是神经网络来跟踪游戏物品。
以下是您开始编程时可以问自己的问题类型示例:在遥控操作中,您是否需要知道机器人在场地上的位置,还是只需要平移直到准星对准特定标签(strafeSpeed = result.getTx()*.03)?
关键概念
1. 初始化
我们需要在机器人代码中设置 Limelight3A。
import com.qualcomm.hardware.limelightvision.LLResult;
import com.qualcomm.hardware.limelightvision.LLResultTypes;
import com.qualcomm.hardware.limelightvision.LLStatus;
import com.qualcomm.hardware.limelightvision.Limelight3A;
Limelight3A limelight;
@Override
public void init() {
limelight = hardwareMap.get(Limelight3A.class, "limelight");
limelight.setPollRateHz(100); // 这设置了我们向 Limelight 请求数据的频率(每秒 100 次)
limelight.start(); // 这告诉 Limelight 开始观察!
}
2. 管道管理
管道就像小型的、可即时切换的程序,可以改变 Limelight 观察世界的方式。您可以在 Limelight 网页界面中设置 10 个不同的管道,每个用于不同的任务。以下是如何在它们之间切换:
limelight.pipelineSwitch(0); // 切换到管道编号 0
这是即发即忘的。Limelight 将在几毫秒内更改其管道,但您的代码不会等待此操作完成就继续执行。如果您想检查当前的管道索引,请调用
result.getPipelineIndex()
请参阅下一节以了解如何获取 LLResult 对象。
3. 获取和使用结果
LLResult 就像一个装满 Limelight 所见信息的容器。以下是我们如何获取和使用该信息:
LLResult result = limelight.getLatestResult();
if (result != null && result.isValid()) {
double tx = result.getTx(); // 目标在左右方向上的偏移(度)
double ty = result.getTy(); // 目标在上下方向上的偏移(度)
double ta = result.getTa(); // 目标看起来有多大(图像的 0%-100%)
telemetry.addData("目标 X", tx);
telemetry.addData("目标 Y", ty);
telemetry.addData("目标面积", ta);
} else {
telemetry.addData("Limelight", "无目标");
}
4. 与 Python SnapScripts 通信
您可以在网页界面中编写自己的 Python SnapScript 管道。使用我们基于 LLM 的 SnapScript 生成器来帮助您编写代码。
以下是如何从机器人代码向 Python 发送数字并获取返回的数字:
// 向 Python 发送数字
double[] inputs = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0};
limelight.updatePythonInputs(inputs);
// 从 Python 获取数字
double[] pythonOutputs = result.getPythonOutput();
if (pythonOutputs != null && pythonOutputs.length > 0) {
double firstOutput = pythonOutputs[0];
telemetry.addData("Python 输出:", firstOutput);
}