外观
线性操作模式基础(BasicOpMode_Linear)
BasicOpMode_Linear 是 FTC SDK 中提供的一个基本线性操作模式(OpMode)示例类,展示了线性操作模式的标准结构和使用方式。
功能描述
该类提供了:
- 线性操作模式的基本框架和示例
- 简单的坦克驱动(Tank Drive)实现
- 展示了硬件初始化和控制器输入处理的标准方法
- 适合新手团队学习 FTC 编程的入门示例
类关系
- 继承自
LinearOpMode基类 - 使用
DcMotor类控制电机 - 使用
ElapsedTime类跟踪运行时间 - 使用
Range类限制电机功率值 - 通过
@TeleOp注解注册为遥控操作模式 - 包含
@Disabled注解以防止在实际比赛中显示
重要成员变量
| 变量名 | 类型 | 描述 |
|---|---|---|
runtime | ElapsedTime | 用于跟踪操作模式运行时间的计时器 |
leftDrive | DcMotor | 左侧驱动电机 |
rightDrive | DcMotor | 右侧驱动电机 |
主要方法
java
/**
* 操作模式执行的主要方法
* 初始化硬件,等待开始,然后执行遥控循环
*/
@Override
public void runOpMode()1
2
3
4
5
6
2
3
4
5
6
方法详解
runOpMode
线性操作模式的主要执行方法,包含初始化和循环过程:
java
@Override
public void runOpMode() {
// 初始化
telemetry.addData("Status", "Initialized");
telemetry.update();
// 获取硬件映射中的电机
leftDrive = hardwareMap.get(DcMotor.class, "left_drive");
rightDrive = hardwareMap.get(DcMotor.class, "right_drive");
// 设置电机方向
leftDrive.setDirection(DcMotor.Direction.REVERSE);
rightDrive.setDirection(DcMotor.Direction.FORWARD);
// 等待驾驶员按下开始按钮
waitForStart();
runtime.reset();
// 运行直到驾驶员按下停止按钮
while (opModeIsActive()) {
// 计算电机功率
double drive = -gamepad1.left_stick_y;
double turn = gamepad1.right_stick_x;
double leftPower = Range.clip(drive + turn, -1.0, 1.0);
double rightPower = Range.clip(drive - turn, -1.0, 1.0);
// 设置电机功率
leftDrive.setPower(leftPower);
rightDrive.setPower(rightPower);
// 显示遥测数据
telemetry.addData("Status", "Run Time: " + runtime.toString());
telemetry.addData("Motors", "left (%.2f), right (%.2f)", leftPower, rightPower);
telemetry.update();
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
1. telemetry 对象
telemetry 是一个内置对象,用于在 Driver Station(驾驶站)上显示来自机器人控制器的信息。它是从 OpMode 类继承而来的,不需要显式创建。
主要用法:
java
*// 添加数据,格式为 (标签, 值)*
telemetry.addData("Status", "Initialized");
*// 更新数据,将数据发送到驾驶站显示*
telemetry.update();1
2
3
4
5
2
3
4
5
这样可以在驾驶站界面上看到:
text
Status: Initialized1
2. hardwareMap.get()方法
hardwareMap 也是从 OpMode 类继承的内置对象,它使用了 Java 的泛型和反射机制来获取机器人硬件设备。
语法解析:
java
leftDrive = hardwareMap.get(DcMotor.class, "left_drive");1
DcMotor.class:指定要获取的设备类型(这里是直流电机)
"left_drive":设备的配置名称,必须与机器人配置文件中的名称完全匹配(区分大小写)
返回值类型是 DcMotor,可以直接控制电机
这行代码的工作原理:
在机器人配置文件中查找名为"left_drive"的设备
确认该设备是否为 DcMotor 类型
如果找到匹配的设备,返回该设备的控制对象
如果未找到或类型不匹配,将抛出异常
这种方式的优点:
类型安全:编译时就能检查类型是否正确
灵活性:可以通过配置文件更改硬件设置,而不需要修改代码
统一管理:所有硬件设备通过 hardwareMap 统一管理和访问
操作模式工作流程
初始化阶段:
- 向驾驶站报告初始化状态
- 从硬件映射获取电机引用
- 配置电机方向,确保机器人正确移动
等待开始阶段:
waitForStart()方法暂停代码执行,直到驾驶员按下开始按钮- 重置运行时间计时器
运行阶段:
- 进入
while (opModeIsActive())循环,循环将持续到驾驶员按下停止按钮 - 在循环中不断读取游戏手柄输入
- 根据输入计算电机功率
- 设置电机功率,控制机器人移动
- 更新遥测数据,提供实时状态信息
手柄输入 → 数值转换 → 功率计算 → 电机控制 ↓ ↓ ↓ ↓ 摇杆值 drive/turn值 功率值 实际转动1
2
3
- 进入
注意事项
- 使用前需要在机器人配置中定义名为"left_drive"和"right_drive"的电机
- 电机方向设置可能需要根据实际机器人构造调整
- 在复制此示例创建自己的操作模式时,请移除
@Disabled注解 - 线性操作模式中的阻塞调用(如
sleep())会暂停整个操作模式执行 - 确保
while (opModeIsActive())循环中的代码执行速度足够快,以保持响应性
