teleop:手动阶段程序

概要

路径:

Teamcode/java/org.firsinspires.ftc.teamcode/opmode/teleop

我们在询问过操作员后,发现按键按下、放开、一直按着和切换比较常用,所以封装了keyPresskeyDownkeyUpkeyToggle,简化了手柄按键的检测,并且实现了链式调用,让代码更加简洁、易懂。

具体介绍

参数列表

  • 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