|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: windriver c++?
hello Eric
Thank you for your help we were able to insert the code you sent us into RobotDemo however we are not sure if the mecanum wheels are fully doing all the right moves (it works fine in all direction except to the sides) we think that it could be a problem with not having a gray area specified ?!!! Let us know what you think!! the code, Code:
#include "WPILib.h"
/**
* This is a demo program showing the use of the RobotBase class.
* The SimpleRobot class is the base of a robot application that will automatically call your
* Autonomous and OperatorControl methods at the right time as controlled by the switches on
* the driver station or the field controls.
*/
class RobotDemo : public SimpleRobot
{
RobotDrive myRobot; // robot drive system
Joystick stick; // only joystick
{
public:
typedef enum
{
kFrontLeftMotor = 0,
kFrontRightMotor = 1,
kRearLeftMotor = 2,
kRearRightMotor = 3
} MotorType;
public:
RobotDemo(void):
myRobot(1, 2, 3, 4), // these must be initialized in the same order
stick(1) // as they are declared above.
{
GetWatchdog().SetExpiration(0.1);
}
/**
* Drive left & right motors for 2 seconds then stop
*/
void Autonomous(void)
{
GetWatchdog().SetEnabled(false);
myRobot.Drive(0.5, 0.0); // drive forwards half speed
Wait(2.0); // for 2 seconds
myRobot.Drive(0.0, 0.0); // stop robot
}
/**
* Runs the motors with arcade steering.
*/
void OperatorControl(void)
{
GetWatchdog().SetEnabled(true);
while (IsOperatorControl())
{
GetWatchdog().Feed();
myRobot.ArcadeDrive(stick); // drive with arcade style (use right stick)
Wait(0.005); // wait for a motor update time
}
//INSERT IN: TeleopPeriodic or main loop
float X = m_leftStick->GetZ();
float Y = m_leftStick->GetY();
float Z = m_leftStick->GetX();
Y *= -1;
X *= -1;
float FrontLeft = Y + X + Z;
float FrontRight = Y - X - Z;
float RearLeft = Y - X + Z;
float RearRight = Y + X - Z;
FrontRight *= -1;
KFrontLeftMotor->Set(FrontLeft);
KFrontRightMotor->Set(FrontRight);
KRearLeftMotor->Set(RearLeft);
KRearRigtMotor->Set(RearRigt);
}
};
START_ROBOT_CLASS(RobotDemo);
ps open the attachment Thank you again from 1946 programming team |
|
#2
|
||||
|
||||
|
Re: windriver c++?
Quote:
If you're not sure replace the joystick mapping code with the following, then support the robot with its wheels in the air, and report how each wheel is moving. Then move the constant to each of the other values in turn, and post the result. This will confirm motor mappings, and wiring to the motors. Code:
float X = 0.2; float Y = 0.0; float Z= 0.0; I assure you no additional code is necessary for a basic mecanum drive. I've used that piece of code many times. Last edited by EHaskins : 06-01-2010 at 08:54. |
|
#3
|
|||
|
|||
|
Re: windriver c++?
The RobotDrive class has a HolonomicDrive method that does the calculations for you based on a 4 motor drive base. You supply a magnitude and direction of travel (that's speed, direction), and a rotation value. To use it, you have to create a RobotDrive object with the 4 motors.
Check out the documenation to determine what order to list the motors. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| WindRiver purchase | karatekid | C/C++ | 7 | 21-01-2010 17:04 |
| Windriver | Scarra3 | C/C++ | 1 | 31-12-2009 03:10 |
| WindRiver Errors | ExarKun666 | C/C++ | 7 | 04-03-2009 20:32 |
| compiling in windriver | koreabell | Programming | 4 | 05-01-2009 15:32 |