|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
|||
|
|||
|
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... Code:
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[i] = 1;
}
m_deleteSpeedControllers = false;
}
Here is that function Code:
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]);
}
Edit: Im thinking i can just say m_middleRight/LeftMotor -> Set...., but Im not sure. Thanks- 1771 Last edited by nighterfighter : 08-02-2010 at 15:58. Reason: Thought of something |
|
#2
|
|||||
|
|||||
|
Re: void RobotDrive::SetLeftRightMotorSpeeds?
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.) |
|
#3
|
|||
|
|||
|
Re: void RobotDrive::SetLeftRightMotorSpeeds?
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. |
|
#4
|
||||
|
||||
|
Re: void RobotDrive::SetLeftRightMotorSpeeds?
but it is correct:
(change the 1 to -1 to invert the middle motors) Code:
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);
}
|
|
#5
|
||||
|
||||
|
Re: void RobotDrive::SetLeftRightMotorSpeeds?
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.
|
|
#6
|
||||||
|
||||||
|
Re: void RobotDrive::SetLeftRightMotorSpeeds?
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).
|
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| RobotDrive Bug? | Bryscus | Programming | 5 | 03-02-2010 10:29 |
| RobotDrive + PIDController = possible? | oddjob | C/C++ | 4 | 14-01-2010 23:33 |
| editing robotDrive class help | mikelowry | C/C++ | 2 | 07-10-2009 13:25 |
| void* pointer to object in C++ | byteit101 | C/C++ | 6 | 14-01-2009 17:15 |
| problem with void Process_Data_From_Local_IO | CmptrGk | Programming | 2 | 29-01-2005 17:14 |