Advanced Robotics Programming

From TrcWiki
Jump to navigation Jump to search

The Advanced Robotics Programming Class focuses on teaching our Titan Robotics Framework (TRC Library). The target audience is for students who already know the Java language. Titan Robotics Framework is designed for both FTC and FRC. After finishing this class, you should be able to write code for both FTC and FRC robots with minimal platform specific changes.

Titan Robotics Framework

You can read about our Framework Library here

Class Curriculum

Session 0: Pre-Work

Before coming to the programming class, you need to install the required software on your laptop. Please do this at home before coming to class. We do not want to dedicate class time to install software because they are time consuming and require downloading gigabytes of data from the Internet which would overwhelm our Internet bandwidth if all students were downloading at the same time. Therefore, please make sure you finish these tasks at home before coming to class. FRC software installation instructions can be found here.

  • Create GitHub account if not already have one.
  • Download and install GitHub Desktop.
  • Clone FrcTemplate project.
  • Download and install WPILib with Visual Studio Code.
  • Download and install Git Command Line tools.

Session 1: Simple Motor

Topics

  • Introduce to Visual Studio Code.
    • Start Visual Studio Code.
    • Open FrcTemplate project in Visual Studio Code.
    • Brief walk through of FrcTemplate code: Code organization (team492, trclib, frclib)
      • autocommands: contains Autonomous code
      • autotasks: contains Auto-Assist tasks
      • commandbased: contains commandbased code (not used)
      • drivebases: contains standard supported drive bases (Differential, Mecanum, Swerve)
      • subsystems: contains code for all upper subsystems
      • Main.java: main entry point of robot code (provided by FIRST, do not change)
      • Robot.java: top level robot object
      • RobotParams.java: contains robot configurations and subsystem parameters
      • FrcAuto.java, FrcTeleOp.java, FrcTest.java, FrcDisabled.java: contain code for respective robot run mode
    • Brief walk through of Visual Studio Code.
      • WPILib Plug-in (commonly used operations)
        • Set Team Number: set our team number 492 (Very important: team number is used to find our robot for pushing code)
        • Check for WPILib Updates: Check for latest WPILib from the Internet
        • Manage Vendor Libraries: Install/Remove/CheckUpdate of various 3rd party vendor libraries
        • Build Robot Code: Compile your robot code
        • Depoloy Robot Code: Compile and push code to robot
        • Debug Robot Code: Compile, push code to robot and start real time debugger
      • Common Source Control Operations
        • Branches: Create/Remove/Switch code branches
        • Fetch: Sync latest changes from GitHub
        • Discard: Discard changes to a file and revert back to last committed version
        • Stage: Stage the changed file for commit
        • Compare changes: Compare the changes with last committed version
        • Commit: Commit changes to your local repository
        • Push: Push changes from your local repository to GitHub
  • Introduce to Simple Motor.
    • Exercise: Creating and Controlling a Simple Motor.
      • RobotParams.java: Add a switch for the Simple Motor in Preferences.
      • Robot.java: Instantiate and initialize a Simple Motor in the robotInit method.
        • Create FrcCANTalonSRX
        • Reset to factory default
        • Enable Voltage Compensation
        • Enable Brake Mode
        • Invert Motor Direction (if appropriate)
      • Robot.java: In the updateStatus method, add code to display the motor status: joystick value, actual motor power.
      • FrcTeleOp.java: Create code to control the Simple Motor in TeleOp.
        • In the periodic method, add code to read the gamepad joystick and set motor power with the value.

Hardware

  • Simple DC motor
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 2: Simple Servo

Topics

  • Introduce to Simple Servo.
    • Exercise: Creating and Controlling a Simple Servo.
      • RobotParams.java: Add a switch for the Simple Servo in Preferences.
      • Robot.java: Instantiate and initialize a Simple Servo in the robotInit method.
        • Create FrcServo
        • Set Logical Range
        • Set Physical Range
        • Set Maximum Step Rate
        • Add Servo Follower (if appropriate)
        • Invert Servo Direction (if appropriate)
        • Set Servo to initial position
      • Robot.java: In the updateStatus method, add code to display the servo status: servo power, servo position.
      • FrcTeleOp.java: Create code to control the Simple Servo in TeleOp.
        • In the driverControllerButtonEvent method, add code to move servo to a set position on a button press and back on a button release
        • In the periodic method, add code to read the gamepad joystick and set the servo power with the value

Hardware

  • Servo
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 3: Elevator Subsystem

Topics

  • Introduce to PID Control.
  • Introduce to the Motor Actuator class.
    • Motor Actuator Parameters:
      • setPrimaryMotor: Set the characteristics of the primary motor.
      • setFollowerMotor: Set the characteristics of the follower motor if there is one.
      • setLowerLimitSwitch: Set the characteristics of the lower limit switch if there is one.
      • setUpperLimitSwitch: Set the characteristics of the upper limit switch if there is one.
      • setExternalEncoder: Set the characteristics of the external encoder if there is one.
      • setPositionScaleAndOffset: Set motor position scale and offset for translating to real world units
      • setPositionPresets: Set position presets
    • Exercise: Creating and Controlling an Elevator as a Motor Actuator.
      • Elevator.java: Create a new class named Elevator.
        • Create the parameters for the Elevator
          • Set the characteristics of the primary motor
          • Set the characteristics of the follower motor if there is one
          • Set Elevator scale and offset to real world unit in inches
          • Set position presets if appropriate
        • Create the Elevator as a Motor Actuator using the parameters
        • Enable software PID control
        • Set PID Coefficients and Tolerance
        • Set PID Power Compensation
        • Optionally set Stall Protection
      • RobotParams.java: Add a switch for the Elevator in Preferences.
      • Robot.java: Instantiate and initialize the Elevator object in the robotInit method.
        • Create Elevator object
        • Add code to zero calibrate the Elevator
      • Robot.java: In the updateStatus method, add code to display the Elevator status: power, pos/target, state of limit switches.
      • FrcTeleOp.java: Create code to control the Elevator in TeleOp.
        • In the periodic method, add code to read the gamepad joystick and set Elevator power with the value (setPower and setPidPower)
        • In the driverControllerButtonEvent method, add code to use the DPad to move the Elevator up and down the preset positions
      • Calibrate Elevator Scale, Offset and Position Limits.
      • Tune Elevator position PID control.
      • Tune Elevator gravity compensation.

Hardware

  • Screw-driven elevator
  • DC motor with built-in encoder
  • Lower limit switch (optional)
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 4: Arm Subsystem

Topics

  • Introduce Arm Subsystem as a Motor Actuator.
    • Exercise: Creating and Controlling an Arm as a Motor Actuator.
      • Arm.java: Create a new class named Arm.
        • Create the parameters for the Arm
          • Set the characteristics of the primary motor
          • Set the characteristics of the follower motor if there is one
          • Set Arm scale and offset to real world unit in degrees
          • Set position presets if appropriate
        • Create the Arm as a Motor Actuator using the parameters
        • Enable software PID control
        • Set PID Coefficients and Tolerance
        • Set PID Power Compensation
        • Optionally set Stall Protection
      • Robot.java: Instantiate and initialize the Arm object. Add code to zero calibrate the Arm.
      • FrcTeleOp.java: Create code to control the Arm in TeleOp.
        • In the periodic method, add code to read the gamepad joystick and set Arm power with the value (setPower and setPidPower)
        • In the driverControllerButtonEvent method, add code to use the DPad to move the Arm up and down the preset positions
      • Robot.java: In the updateStatus method, add code to display the Arm status: power, pos/target, state of limit switches
      • Calibrate Arm Scale, Offset and Position Limits.
      • Tune Arm position PID control.
      • Tune Arm gravity compensation.
Hardware
  • Swing Arm with elbow
  • DC motor with built-in encoder to drive the elbow
  • Lower limit switch (optional)
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 5: Turret Subsystem

Topics

  • Introduce Turret Subsystem as a Motor Actuator.
    • Exercise: Creating and Controlling a Turret as a Motor Actuator.
      • Turret.java: Create a new class named Turret.
        • Create the parameters for the Turret
          • Set the characteristics of the primary motor
          • Set the characteristics of the follower motor if there is one
          • Set Turret scale and offset to real world unit in degrees
          • Set position presets if appropriate
        • Create the Turret as a Motor Actuator using the parameters
        • Enable software PID control
        • Set PID Coefficients and Tolerance
        • Optionally set Stall Protection
      • Robot.java: Instantiate and initialize the Turret object. Add code to zero calibrate the Turret.
      • FrcTeleOp.java: Create code to control the Turret in TeleOp.
        • In the periodic method, add code to read the gamepad joystick and set Turret power with the value (setPower and setPidPower)
        • In the driverControllerButtonEvent method, add code to use the DPad to move the Turret left and right of the preset positions
      • Robot.java: In the updateStatus method, add code to display the Turret status: power, pos/target, state of limit switches
      • Calibrate Turret Scale, Offset and Position Limits.
      • Tune Turret position PID control.

Hardware

  • Turret with rotating base
  • DC motor with built-in encoder to drive the rotating base
  • Zero position limit switch
  • Rotation direction limit switch
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 6: Shooter Subsystem

Topics

  • Introduce Shooter Subsystem (one/two-motor shooter with optional pan/tilt motor actuators).
    • Exercise: Creating and Controlling a Shooter.
      • Shooter.java: Create a new class named Shooter.
        • Create the parameters for the Shooter: one or two motors, optional pan/tilt motor actuators
          • Set the characteristics of the shooter motor 1
          • Set the characteristics of the shooter motor 2 if there is one
        • Create the Shooter using the parameters
        • Set Shooter scale to real world units in RPM
        • Enable software PID control
        • Set PID Coefficients and Tolerance
        • Optionally set Shooter Preset Velocities
      • Robot.java: Instantiate and initialize the Shooter object.
      • FrcTeleOp.java: Create code to control the Shooter in TeleOp.
        • In the driverControllerButtonEvent method, add code to use the DPad to increment/decrement the Shooter velocities
        • In the periodic method, add code to set the shooter velocity with the value set by the DPad
      • Robot.java: In the updateStatus method, add code to display the Shooter motor status: power, vel/target
      • Tune Shooter velocity PID control.

Hardware

  • Shooter with two motors
  • DC motor with built-in encoder as the shooter motors
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 7: Intake Subsystem

Topics

  • Introduce Smart Intake Subsystem (one/two motor intake with optional digital/analog sensor).
    • Exercise: Creating and Controlling a one/two motor Intake with digital sensor.
      • Intake.java: Create a new class named Intake.
        • Create the parameters for the Intake: one motor with optional follower motor and a digital sensor
        • Create the Intake using the parameters
      • Robot.java: Instantiate and initialize the Intake object.
      • FrcTeleOp.java: Create code to control the Intake in TeleOp.
        • In the driverControllerButtonEvent method, add code to press a button to turn AutoIntake ON and release to cancel the operation.
        • In the updateStatus method, add code to display the Shooter motor status: power, vel/target
      • Tune Shooter velocity PID control.
    • Ex
  • Create the Intake class.
  • Create code to instantiate an Intake subsystem.
  • Create code to control the intake in TeleOp.
  • Create code to display the state of the intake on the Dashboard.
  • Tune the analog threshold value if it is an analog sensor.

Hardware

  • Intake with rotating brushes or rollers (Build one based on FTC Centerstage Intake)
  • DC motor (no encoder needed) to drive the intake
  • Sensor to detect the presence of game element taken in
  • Robot-In-A-Box
  • Driver Station with a Gamepad

Session 8: Grabber Subsystem

Topics

Hardware

Session 9: Vision Subsystem

  • AprilTag Detection
  • Object Detection
  • Color Blob Detection

Session 10: DriveBase Subsystem

  • Swerve PID Tuning
  • Odometry Tuning
  • DriveBase PID Tuning

Session 11: Path Following

  • PurePursuit

Session 12: Auto-Assist Pickup

  • DriveBase
  • Intake
  • Vision

Session 13: Auto-Assist Shoot

  • DriveBase
  • Shooter
  • Vision

Session 14: Autonomous

  • Asynchronous operations
  • Synchronization
  • State machine