void RobotDrive::SetLeftRightMotorSpeeds?

Hi all-

Our robot drive-train is consisting of a total of 6 motors, meaning 3 motors per side, meaning 3 jaguars per side.

After looking through the RobotDrive class, I noticed there is not consturctor for a 6 wheel drive-train. So I made a constructor for 6 wheels, which I think should work…

RobotDrive::RobotDrive(SpeedController *rearLeftMotor, SpeedController *middleLeftMotor,
						SpeedController *frontLeftMotor, SpeedController *rearRightMotor,
						SpeedController *middleRightMotor,
						SpeedController *frontRightMotor,
						float sensitivity)
{
	if (frontLeftMotor == NULL || middleLeftMotor == NULL || rearLeftMotor == NULL || frontRightMotor == NULL || frontMiddleMotor == NULL|| rearRightMotor == NULL)
	{
		wpi_fatal(NullParameter);
		m_frontLeftMotor = m_rearLeftMotor = m_frontRightMotor = m_rearRightMotor = NULL;
		return;
	}
	m_rearLeftMotor = rearLeftMotor;
	m_middleLeftMotor = middleLeftMotor;
	m_frontLeftMotor = frontLeftMotor;
	m_rearRightMotor = rearRightMotor;
	m_middleRightMotor = middleLeftMotor;
	m_frontRightMotor = frontRightMotor;
	m_sensitivity = sensitivity;
	for (INT32 i=0; i < kMaxNumberOfMotors; i++)
	{
		m_invertedMotors* = 1;
	}
	m_deleteSpeedControllers = false;
}

Anyway, I looked into the TankDrive function I am using, because I want to ensure that when I move my joysticks, it moves all the motors, not just the first 2. So after looking through the TankDrive, it calls another function called SetLeftRightMotorSpeeds. After reading that, it makes me THINK that it will only set the first 2 Jaguars (on each side) to drive, not the third.

Here is that function

void RobotDrive::SetLeftRightMotorSpeeds(float leftSpeed, float rightSpeed)
{
	wpi_assert(m_rearLeftMotor != NULL && m_rearRightMotor != NULL);

	leftSpeed = Limit(leftSpeed);
	rightSpeed = Limit(rightSpeed);

	if (m_frontLeftMotor != NULL)
		m_frontLeftMotor->Set(Limit(leftSpeed) * m_invertedMotors[kFrontLeftMotor]);
	m_rearLeftMotor->Set(Limit(leftSpeed) * m_invertedMotors[kRearLeftMotor]);

	if (m_frontRightMotor != NULL)
		m_frontRightMotor->Set(-Limit(rightSpeed) * m_invertedMotors[kFrontRightMotor]);
	m_rearRightMotor->Set(-Limit(rightSpeed) * m_invertedMotors[kRearRightMotor]);
}

Any help on how to edit that so all 3 will go, not just 2?

Edit: Im thinking i can just say m_middleRight/LeftMotor -> Set…, but Im not sure.

Thanks- 1771*

The simple and obvious solution is to duplicate the lines that control the front motors and change them to control the middle motors.

(But I’m not as strong in C++ as I could be, so keep in mind this adage: For every complex problem, there is usually a solution that is simple, obvious…and wrong.)

Yeah, that’s why I’m hesitant to do that.

One of those reasons is that first If statement is corresponding to the set command directly below it, but the next Set command is not…

I figure I can just try it, with the motors not hooked up, and just check the Jags.

but it is correct:
(change the 1 to -1 to invert the middle motors)

void RobotDrive::SetLeftRightMotorSpeeds(float leftSpeed, float rightSpeed)
{
	wpi_assert(m_rearLeftMotor != NULL && m_rearRightMotor != NULL);

	leftSpeed = Limit(leftSpeed);
	rightSpeed = Limit(rightSpeed);

	if (m_frontLeftMotor != NULL)
		m_frontLeftMotor->Set(Limit(leftSpeed) * m_invertedMotors[kFrontLeftMotor]);
	m_rearLeftMotor->Set(Limit(leftSpeed) * m_invertedMotors[kRearLeftMotor]);

	if (m_frontRightMotor != NULL)
		m_frontRightMotor->Set(-Limit(rightSpeed) * m_invertedMotors[kFrontRightMotor]);
	m_rearRightMotor->Set(-Limit(rightSpeed) * m_invertedMotors[kRearRightMotor]);

	if (m_middleRightMotor != NULL)
		m_middleRightMotor ->Set(-Limit(rightSpeed) * ***1***);
	if (m_middleLeftMotor != NULL)
		m_middleLeftMotor ->Set(Limit(leftSpeed) * ***1***);
}

I believe there is a reason that there is not a six wheel drive train option. To my knowledge, you are only allowed to use 5 CIMs. I would double check the rules on this before spending too much time programming it.

You are correct that only 5 CIMs are allowed. However, it’s likely that they are using 4 CIMs and 2 other motors (such as fisher price motors).