teleop:手动阶段程序
概要
路径:
Teamcode/java/org.firsinspires.ftc.teamcode/opmode/teleop
我们在询问过操作员后,发现按键按下、放开、一直按着和切换比较常用,所以封装了keyPress、keyDown、keyUp和keyToggle,简化了手柄按键的检测,并且实现了链式调用,让代码更加简洁、易懂。
具体介绍
参数列表
key:检测的按键,与
FTC SDK
中手柄按键名称一致,String
类型fn:要运行的函数,建议使用Lambda表达式,
Runnnable
类型
手柄定义
robot.gamepad1
.update()
.keyPress("a",Runnable)//按下a
.keyUp("b",Runnable)//松开b键
.keyDown("x",Runnable)//按住x键
.keyToggle("y",Runnable1, Runnable2)//按下y键切换
;
对手柄上的按键进行定义。详情可见 gamepadEX
场地中心坐标系
我们通过robot.drivetrain.driveRobotFieldCentric()
函数让机器以场地中心坐标来确定自己的方向,但是在实际操作的过程中,操作手可能由于各种原因不了解机器的方向,因此需要使用重新定义一个按键,来重置场地坐标。
robot.drivetrain.driveRobotFieldCentric(
gamepad1.left_stick_y,
gamepad1.left_stick_x,
gamepad1.right_stick_x
);
如果不习惯场地中心坐标,可以使用robot.drivetrain.driveRobot()
函数,让机器以自身为中心坐标。
robot.drivetrain.driveRobot(
gamepad1.left_stick_y,
gamepad1.left_stick_x,
gamepad1.right_stick_x
);
选取哪种方法取决于操作手的习惯。
手柄摇杆曲线
如果操作手觉得手柄的手感比较滑或者涩,那么可以直接删除/更改该函数。
private double sss(double v) {
if (v > 0.0) { //若手柄存在中位漂移或抖动就改0.01
v = 0.87 * v * v * v + 0.09;//0.09是23-24赛季底盘启动需要的功率
} else if (v < 0.0) { //若手柄存在中位漂移或抖动就改-0.01
v = 0.87 * v * v * v - 0.09; //三次方是摇杆曲线
} else {
// XBOX和罗技手柄死区较大无需设置中位附近
// 若手柄存在中位漂移或抖动就改成 v*=9
// 这里的9是上面的0.09/0.01=9
v = 0;
}
return v;
}
这对程序没有任何影响。
Last updated