mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-29 02:21:44 +00:00
Added Mecanum drive sample program
Change-Id: I0538c21116cd6c8836f76b6d4446b83d8723a20f
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#include "WPILib.h"
|
||||
|
||||
/**
|
||||
* This is a demo program showing how to use Mecanum control with the RobotDrive class.
|
||||
*/
|
||||
class Robot: public SampleRobot
|
||||
{
|
||||
|
||||
// Channels for the wheels
|
||||
const static int frontLeftChannel = 2;
|
||||
const static int rearLeftChannel = 3;
|
||||
const static int frontRightChannel = 1;
|
||||
const static int rearRightChannel = 0;
|
||||
|
||||
const static int joystickChannel = 0;
|
||||
|
||||
RobotDrive robotDrive; // robot drive system
|
||||
Joystick stick; // only joystick
|
||||
|
||||
public:
|
||||
Robot() :
|
||||
robotDrive(frontLeftChannel, rearLeftChannel,
|
||||
frontRightChannel, rearRightChannel), // these must be initialized in the same order
|
||||
stick(joystickChannel) // as they are declared above.
|
||||
{
|
||||
robotDrive.SetExpiration(0.1);
|
||||
robotDrive.SetInvertedMotor(RobotDrive::kFrontLeftMotor, true); // invert the left side motors
|
||||
robotDrive.SetInvertedMotor(RobotDrive::kRearLeftMotor, true); // you may need to change or remove this to match your robot
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the motors with Mecanum drive.
|
||||
*/
|
||||
void OperatorControl()
|
||||
{
|
||||
robotDrive.SetSafetyEnabled(false);
|
||||
while (IsOperatorControl())
|
||||
{
|
||||
// Use the joystick X axis for lateral movement, Y axis for forward movement, and Z axis for rotation.
|
||||
// This sample does not use field-oriented drive, so the gyro input is set to zero.
|
||||
robotDrive.MecanumDrive_Cartesian(stick.GetX(), stick.GetY(), stick.GetZ());
|
||||
|
||||
Wait(0.005); // wait 5ms to avoid hogging CPU cycles
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
START_ROBOT_CLASS(Robot);
|
||||
@@ -105,6 +105,24 @@
|
||||
</example>
|
||||
|
||||
|
||||
<example>
|
||||
<name>Mecanum Drive</name>
|
||||
<description>An example program which the use of Mecanum Drive with the RobotDrive class</description>
|
||||
<tags>
|
||||
<tag>Getting Started with C++</tag>
|
||||
<tag>Robot and Motor</tag>
|
||||
<tag>Joystick</tag>
|
||||
<tag>Complete List</tag>
|
||||
</tags>
|
||||
<packages>
|
||||
<package>src</package>
|
||||
</packages>
|
||||
<files>
|
||||
<file source="examples/MecanumDrive/src/Robot.cpp" destination="src/Robot.cpp"></file>
|
||||
</files>
|
||||
</example>
|
||||
|
||||
|
||||
<example>
|
||||
<name>Getting Started</name>
|
||||
<description>An example program which demonstrates the simplest autonomous and
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
|
||||
package org.usfirst.frc.team190.robot;
|
||||
|
||||
|
||||
import edu.wpi.first.wpilibj.Joystick;
|
||||
import edu.wpi.first.wpilibj.RobotDrive;
|
||||
import edu.wpi.first.wpilibj.RobotDrive.MotorType;
|
||||
import edu.wpi.first.wpilibj.SampleRobot;
|
||||
import edu.wpi.first.wpilibj.Timer;
|
||||
|
||||
/**
|
||||
* This is a demo program showing how to use Mecanum control with the RobotDrive class.
|
||||
*/
|
||||
public class Robot extends SampleRobot {
|
||||
|
||||
RobotDrive robotDrive;
|
||||
Joystick stick;
|
||||
|
||||
// Channels for the wheels
|
||||
final int frontLeftChannel = 2;
|
||||
final int rearLeftChannel = 3;
|
||||
final int frontRightChannel = 1;
|
||||
final int rearRightChannel = 0;
|
||||
|
||||
// The channel on the driver station that the joystick is connected to
|
||||
final int joystickChannel = 0;
|
||||
|
||||
public Robot() {
|
||||
robotDrive.setExpiration(0.1);
|
||||
robotDrive = new RobotDrive(frontLeftChannel, rearLeftChannel, frontRightChannel, rearRightChannel);
|
||||
robotDrive.setInvertedMotor(MotorType.kFrontLeft, true); // invert the left side motors
|
||||
robotDrive.setInvertedMotor(MotorType.kRearLeft, true); // you may need to change or remove this to match your robot
|
||||
|
||||
stick = new Joystick(joystickChannel);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Runs the motors with Mecanum drive.
|
||||
*/
|
||||
public void operatorControl() {
|
||||
robotDrive.setSafetyEnabled(true);
|
||||
while (isOperatorControl()) {
|
||||
|
||||
// Use the joystick X axis for lateral movement, Y axis for forward movement, and Z axis for rotation.
|
||||
// This sample does not use field-oriented drive, so the gyro input is set to zero.
|
||||
robotDrive.mecanumDrive_Cartesian(stick.getX(), stick.getY(), stick.getZ(), 0);
|
||||
|
||||
Timer.delay(0.005); // wait 5ms to avoid hogging CPU cycles
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -116,6 +116,25 @@
|
||||
</files>
|
||||
</example>
|
||||
|
||||
<example>
|
||||
<name>Mecanum Drive</name>
|
||||
<description>Demonstrate the use of the RobotDrive class doing teleop driving with Mecanum steering</description>
|
||||
<tags>
|
||||
<tag>Actuators</tag>
|
||||
<tag>Complete List</tag>
|
||||
<tag>Joystick</tag>
|
||||
<tag>Robot and Motor</tag>
|
||||
<tag>Safety</tag>
|
||||
</tags>
|
||||
<packages>
|
||||
<package>src/$package-dir</package>
|
||||
</packages>
|
||||
<files>
|
||||
<file source="examples/MecanumDrive/src/org/usfirst/frc/team190/robot/Robot.java"
|
||||
destination="src/$package-dir/Robot.java"></file>
|
||||
</files>
|
||||
</example>
|
||||
|
||||
|
||||
<example>
|
||||
<name>Motor Controller</name>
|
||||
|
||||
Reference in New Issue
Block a user