As of today, the below is our program to operate Liberty. This instructs the bot’s mecanum wheels to operate in the desired manner. The lander lift motor is controlled. This program will be updated as other functions are added.

package org.firstinspires.ftc.teamcode;

import com.qualcomm.robotcore.eventloop.opmode.LinearOpMode;

import com.qualcomm.robotcore.hardware.HardwareMap;

import com.qualcomm.robotcore.hardware.Servo;

import com.qualcomm.robotcore.eventloop.opmode.TeleOp;

import com.qualcomm.robotcore.eventloop.opmode.Disabled;

import com.qualcomm.robotcore.hardware.DcMotor;

import com.qualcomm.robotcore.hardware.DcMotorSimple;

import com.qualcomm.robotcore.util.ElapsedTime;

@TeleOp(name=”Fenix Example”, group=”Linear Opmode”)  // @Autonomous(…) is the other common choice

public class Fenix extends LinearOpMode {

    /* Declare OpMode members. */

    private ElapsedTime runtime = new ElapsedTime();

    DcMotor FrontLeft = null;

    DcMotor FrontRight = null;

    DcMotor RearRight = null;

    DcMotor RearLeft = null;

    DcMotor Lift = null;

    DcMotor SpinnerLeft = null;

    DcMotor SpinnerRight = null;

    Servo LeftFlip = null;

    Servo RightFlip = null;

    Servo LeftKick = null;

    Servo RightKick = null;

    Servo rjt = null;

    Servo ljt = null;

    Servo rjp = null;

    Servo ljp = null;

    @Override

    public void runOpMode() {

        telemetry.addData(“Status”, “Initialized”);

        telemetry.update();

        FrontRight = hardwareMap.dcMotor.get(“fr”);

        FrontLeft = hardwareMap.dcMotor.get(“fl”);

        RearLeft = hardwareMap.dcMotor.get(“rl”);

        RearRight = hardwareMap.dcMotor.get(“rr”);

        LeftFlip = hardwareMap.servo.get(“leftFlipperServo”);

        RightFlip = hardwareMap.servo.get(“rightFlipperServo”);

        LeftKick = hardwareMap.servo.get(“glyphPusherServoLeft”);

        RightKick = hardwareMap.servo.get(“glyphPusherServoRight”);

        SpinnerRight = hardwareMap.dcMotor.get(“inwheelR”);

        SpinnerLeft = hardwareMap.dcMotor.get(“inwheelL”);

        Lift = hardwareMap.dcMotor.get(“PlatformLift”);

        RearLeft.setDirection(DcMotor.Direction.REVERSE);

        FrontLeft.setDirection(DcMotor.Direction.REVERSE);

        FrontRight.setDirection(DcMotor.Direction.FORWARD);

        RearRight.setDirection(DcMotor.Direction.FORWARD);

        rjt = hardwareMap.servo.get(“rightJewelTilt”);

        rjp = hardwareMap.servo.get(“rightJewelPan”);

        ljt = hardwareMap.servo.get(“leftJewelTilt”);

        ljp = hardwareMap.servo.get(“leftJewelPan”);

        //Init

        rjt.setPosition(.25);

        rjp.setPosition(.75);

        ljt.setPosition(.25);

        ljp.setPosition(.25);

        LeftFlip.setPosition(0);

        RightFlip.setPosition(0);

        LeftKick.setPosition(.2);

        RightKick.setPosition(.8);

        // Wait for the game to start (driver presses PLAY)

        waitForStart();

        runtime.reset();

        // run until the end of the match (driver presses STOP)

        while (opModeIsActive()) {

            telemetry.addData(“Status”, “Run Time: ” + runtime.toString());

            telemetry.update();

            //Mekanum v0.0.1

            // The left joystick Y-axis controls the robot’s forward and backward movement.

            // The left joystick X-axis controls the robot’s left and right movement.

            // The right joystick X-axis controls the robot’s rotation.

            FrontRight  .setPower(gamepad1.left_stick_y – -gamepad1.right_stick_x – gamepad1.left_stick_x);

            FrontLeft    .setPower(gamepad1.left_stick_y + -gamepad1.right_stick_x + gamepad1.left_stick_x);

            RearRight    .setPower(gamepad1.left_stick_y – -gamepad1.right_stick_x + gamepad1.left_stick_x);

            RearLeft    .setPower(gamepad1.left_stick_y + -gamepad1.right_stick_x – gamepad1.left_stick_x);

            if (gamepad1.right_trigger != 0 )

            {

                Spinners(gamepad1.right_trigger);

            }

            else

            {

                Spinners(-gamepad1.left_trigger);

            }

            Flippy(gamepad1.a);

            if(gamepad1.right_bumper)

            {

                Lift.setPower(1);

            }

            else if (gamepad1.left_bumper)

            {

             Lift.setPower(-1);  

            }

            else

            {

                Lift.setPower(0);

            }

            Kicky(gamepad1.x);

        }

    }

    public void Spinners(double power)

    {

     SpinnerRight   .setPower(power);

     SpinnerLeft    .setPower(-power);

    }

    public void Flippy(boolean bumper)

    {

        if (bumper == true)

        {

            LeftFlip    .setPosition(0.5);

            RightFlip   .setPosition(0.0);

        }

        else

        {

            LeftFlip    .setPosition(0.0);

            RightFlip   .setPosition(0.5);

        }

    }

    public void Kicky(boolean bumper)

    {

        if (bumper == true)

        {

            LeftKick    .setPosition(1);

            RightKick   .setPosition(.0);

        }   

         else

         {

             LeftKick   .setPosition(.4);

             RightKick  .setPosition(.6);

         }   

    } 

}

We installed a power switch between the battery and the expansion hubs as seen below. This position is somewhat protected from accidental contact yet is easy to reach.