added gy80 dcm

Dependencies:   mbed DCM_AHRS_GY80 PID MMA8451Q

Fork of quadCommand by Greg Abdo

Committer:
gabdo
Date:
Mon Jun 10 01:46:43 2013 +0000
Revision:
43:e2fc699e8e8c
Parent:
42:9b5d58070e92
Child:
44:a30ba531f614
Child:
46:f1eb22f41ebc
Success
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gabdo 0:8681037b9a18 1 /************************ quadCommand.cpp ********************************/
gabdo 0:8681037b9a18 2 /* */
gabdo 0:8681037b9a18 3 /*************************************************************************/
gabdo 0:8681037b9a18 4
gabdo 0:8681037b9a18 5 #include "quadCommand.h"
dereklmc 32:3d180aa938ba 6 #include "debug.h"
gabdo 0:8681037b9a18 7
dereklmc 15:92ecb025fbc5 8 const float quadCommand::MOTOR_UPDATE(20.0f);
dereklmc 8:72791d8c36b7 9
dereklmc 17:d73944c3c945 10 quadCommand::quadCommand() :
dereklmc 17:d73944c3c945 11 pidThrottle(1.5,0.1,1.20,DEFAULT_WINDUP_GUARD),
dereklmc 17:d73944c3c945 12 pidPitch(1.5,0.1,1.20,DEFAULT_WINDUP_GUARD),
dereklmc 17:d73944c3c945 13 pidRoll(1.5,0.1,1.20,DEFAULT_WINDUP_GUARD),
dereklmc 17:d73944c3c945 14 pidYaw(1.5,0.1,1.20,DEFAULT_WINDUP_GUARD)
gabdo 0:8681037b9a18 15 {
gabdo 40:8c01bf294768 16 Ticker sensorProcess;
gabdo 43:e2fc699e8e8c 17 //sensorProcess.attach( this,&quadCommand::sendTelemetry, 2 );
gabdo 43:e2fc699e8e8c 18 sensorProcess.attach( this, &quadCommand::updateCurrent, .002 );
gabdo 43:e2fc699e8e8c 19
gabdo 0:8681037b9a18 20 myCom = new com( TXPIN, RXPIN ); // Setup com object.
gabdo 0:8681037b9a18 21 world = new sensors(); // Setup the sensors.
gabdo 0:8681037b9a18 22
gabdo 0:8681037b9a18 23 myMotors[0] = new motor( MOTOR1 ); // Connect motor 0 to PTD4 pin.
gabdo 0:8681037b9a18 24 myMotors[1] = new motor( MOTOR2 ); // Connect motor 1 to PTA12 pin.
gabdo 0:8681037b9a18 25 myMotors[2] = new motor( MOTOR3 ); // Connect motor 2 to PTA4 pin.
gabdo 0:8681037b9a18 26 myMotors[3] = new motor( MOTOR4 ); // Connect motor 3 to PTA5 pin.
gabdo 0:8681037b9a18 27 }
gabdo 0:8681037b9a18 28
gabdo 9:9e0d0ba5b6b1 29 /******************************* run() ***********************************/
oprospero 26:826448361267 30 /* Called from main */
gabdo 9:9e0d0ba5b6b1 31 /*************************************************************************/
gabdo 9:9e0d0ba5b6b1 32
gabdo 0:8681037b9a18 33 void quadCommand::run()
gabdo 0:8681037b9a18 34 {
gabdo 0:8681037b9a18 35 while(1)
gabdo 43:e2fc699e8e8c 36 {
oprospero 26:826448361267 37 if( myCom->isData() )
gabdo 0:8681037b9a18 38 rxInput();
gabdo 0:8681037b9a18 39 }
gabdo 0:8681037b9a18 40 }
gabdo 0:8681037b9a18 41
gabdo 9:9e0d0ba5b6b1 42 /***************************** rxInput() *********************************/
oprospero 26:826448361267 43 /*Call from run() */
gabdo 9:9e0d0ba5b6b1 44 /*************************************************************************/
gabdo 9:9e0d0ba5b6b1 45
gabdo 0:8681037b9a18 46 void quadCommand::rxInput()
gabdo 0:8681037b9a18 47 {
gabdo 0:8681037b9a18 48 short * command = myCom->read();
gabdo 0:8681037b9a18 49
gabdo 0:8681037b9a18 50 if( command[0] == 1 ) // Throttle command.
gabdo 9:9e0d0ba5b6b1 51 targetThrottle = command[1];
gabdo 0:8681037b9a18 52
gabdo 0:8681037b9a18 53 if( command[0] == 2 ) // Pitch command.
gabdo 9:9e0d0ba5b6b1 54 targetPitch = command[1];
gabdo 0:8681037b9a18 55
gabdo 0:8681037b9a18 56 if( command[0] == 3 ) // Roll command.
gabdo 9:9e0d0ba5b6b1 57 targetRoll = command[1];
gabdo 0:8681037b9a18 58
gabdo 0:8681037b9a18 59 if( command[0] == 4 ) // Yaw command.
gabdo 9:9e0d0ba5b6b1 60 targetYaw = command[1];
gabdo 12:15d129d681e9 61
gabdo 12:15d129d681e9 62 delete[] command;
dereklmc 8:72791d8c36b7 63 }
dereklmc 8:72791d8c36b7 64
gabdo 9:9e0d0ba5b6b1 65 /*************************** updateMotors() ******************************/
oprospero 26:826448361267 66 /*Called in main by motorprocess */
gabdo 9:9e0d0ba5b6b1 67 /*************************************************************************/
gabdo 9:9e0d0ba5b6b1 68
dereklmc 8:72791d8c36b7 69 void quadCommand::updateMotors() {
dereklmc 15:92ecb025fbc5 70 float throttle, pitch, roll, yaw;
dereklmc 15:92ecb025fbc5 71
dereklmc 15:92ecb025fbc5 72 throttle = pidThrottle.correct(currentThrottle, targetThrottle, MOTOR_UPDATE);
dereklmc 15:92ecb025fbc5 73 pitch = pidPitch.correct(currentPitch, targetPitch, MOTOR_UPDATE);
dereklmc 15:92ecb025fbc5 74 roll = pidRoll.correct(currentRoll, targetRoll, MOTOR_UPDATE);
dereklmc 15:92ecb025fbc5 75 yaw = 0.0; //pidYaw.correct(currentYaw, targetYaw, MOTOR_UPDATE);
dereklmc 32:3d180aa938ba 76
dereklmc 41:40e432c5cbe6 77 DEBUG(pc.printf("att : { t : %f, p : %f, r : %f, y : %f }\r\n", throttle, pitch, roll, yaw);)
dereklmc 15:92ecb025fbc5 78
dereklmc 33:4f62a7a46e71 79 int speed0 = throttle + pitch - roll - yaw;
dereklmc 33:4f62a7a46e71 80 int speed1 = throttle + pitch + roll + yaw;
dereklmc 33:4f62a7a46e71 81 int speed2 = throttle - pitch + roll - yaw;
dereklmc 33:4f62a7a46e71 82 int speed3 = throttle - pitch - roll + yaw;
dereklmc 33:4f62a7a46e71 83
dereklmc 41:40e432c5cbe6 84 DEBUG(pc.printf("motor : [ %f , %f , %f , %f ]\r\n", speed0, speed1, speed2, speed3);)
dereklmc 33:4f62a7a46e71 85
dereklmc 33:4f62a7a46e71 86 myMotors[ 0 ]->setSpeed(speed0); // Motor 1
dereklmc 33:4f62a7a46e71 87 myMotors[ 1 ]->setSpeed(speed1); // Motor 2
dereklmc 33:4f62a7a46e71 88 myMotors[ 2 ]->setSpeed(speed2); // Motor 3
dereklmc 33:4f62a7a46e71 89 myMotors[ 3 ]->setSpeed(speed3); // Motor 4
gabdo 40:8c01bf294768 90 }
gabdo 40:8c01bf294768 91
gabdo 40:8c01bf294768 92 /**************************** sendData() *********************************/
gabdo 40:8c01bf294768 93 /* */
gabdo 40:8c01bf294768 94 /*************************************************************************/
gabdo 40:8c01bf294768 95
gabdo 40:8c01bf294768 96 void quadCommand::sendTelemetry()
gabdo 40:8c01bf294768 97 {
gabdo 40:8c01bf294768 98
gabdo 43:e2fc699e8e8c 99 }
gabdo 43:e2fc699e8e8c 100
gabdo 43:e2fc699e8e8c 101 /************************** updateCurrent() ******************************/
gabdo 43:e2fc699e8e8c 102 /* */
gabdo 43:e2fc699e8e8c 103 /*************************************************************************/
gabdo 43:e2fc699e8e8c 104
gabdo 43:e2fc699e8e8c 105 void quadCommand::updateCurrent()
gabdo 43:e2fc699e8e8c 106 {
gabdo 43:e2fc699e8e8c 107 currentPitch = world->getAbsoluteX();
gabdo 43:e2fc699e8e8c 108 currentRoll = world->getAbsoluteY();
gabdo 0:8681037b9a18 109 }