Flipping the X - axis

Ok. this a simple problem that I know I am just overlooking a small detail. For this years robot we what to be able to push a button to be able to make the back of the robot to become the front and vice versa during TeleOp mode. The only problem is that the x-axis of doesn’t adjust when the switch is made. when the robot is reversed and you move the joystick to the left the robot turns to the right and vice versa. Here is my code below:
MyBase->ArcadeDrive(Driver);
if(Driver->GetRawButton(6))// reverse direction of robot
{

  MyBase->SetInvertedMotor(RobotDrive::kRearLeftMotor, true);
  MyBase->SetInvertedMotor(RobotDrive::kFrontLeftMotor,true);
  MyBase->SetInvertedMotor(RobotDrive::kRearRightMotor, true);
  MyBase->SetInvertedMotor(RobotDrive::kFrontRightMotor,true);
			
}			
if(Driver->GetRawButton(7))// normal configuration
{
	
  MyBase->SetInvertedMotor(RobotDrive::kRearRightMotor, false);
  MyBase->SetInvertedMotor(RobotDrive::kFrontRightMotor,false);
  MyBase->SetInvertedMotor(RobotDrive::kRearLeftMotor, false);
  MyBase->SetInvertedMotor(RobotDrive::kFrontLeftMotor,false);
			
			
}

How can I get the X- axis to switch with the reversal? Thanks in advance. Also, I am using WindRiver.

You need to also switch around your motors.
left side & right side swaps
Left front becomes right rear
left rear becomes right front
ETC

For a simple tank drive might be easier to swap & invert the joy sticks inputs into the motors.

Instead of inverting the motors, just try changing the sign of the joystick X and Y values before feeding them into the arcade algorithm
*
*

I have looked into doing that but I have not had any success. any sample code would be helpful

sample code? not to be flippant, but this is what I meant:

Y = -Y;
X = -X;

Maybe you don’t realize that the single-argument ArcadeDrive() method he’s using doesn’t provide anywhere to do this inversion. The sample code he’s asking for is how to get around that lack. By the way, it’s only the Y axis that needs to be inverted. The originally posted code is already getting the effect of inverting both axes by running all the motors in the other direction.

Try this: (warning – untested)


if(Driver->GetRawButton(6)) // reversed direction of robot
{
    directionInverted = true;
}
if(Driver->GetRawButton(7)) // normal configuration
{
    directionInverted = false;
}
if(directionInverted)
{
    MyBase->ArcadeDrive(-Driver->GetY(),Driver->GetX(),false);
}
else
{
    MyBase->ArcadeDrive(Driver);
}

You’ll have to declare directionInverted as a static boolean variable, with an initial value of false.

This worked!!! Thanks!!!:slight_smile: