Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   C/C++ (http://www.chiefdelphi.com/forums/forumdisplay.php?f=183)
-   -   void RobotDrive::SetLeftRightMotorSpeeds? (http://www.chiefdelphi.com/forums/showthread.php?t=82179)

nighterfighter 02-08-2010 03:49 PM

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;
}

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
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]);
}

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

Alan Anderson 02-08-2010 03:59 PM

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.)

nighterfighter 02-08-2010 04:18 PM

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.

byteit101 02-08-2010 04:54 PM

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);
}


JacobC 02-09-2010 10:33 AM

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.

Joe Ross 02-09-2010 10:47 AM

Re: void RobotDrive::SetLeftRightMotorSpeeds?
 
Quote:

Originally Posted by JacobC (Post 916316)
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).


All times are GMT -5. The time now is 10:42 AM.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi