Пример #1
0
        public virtual void OnAsservissementModeStatusFromRobot(AsservissementMode asservMode)
        {
            var handler = OnAsservissementModeStatusFromRobotGeneratedEvent;

            if (handler != null)
            {
                handler(this, new AsservissementModeEventArgs {
                    mode = asservMode
                });
            }
        }
        public void SetAsservissementMode(AsservissementMode mode)
        {
            asservissementMode = mode;

            switch (asservissementMode)
            {
            case AsservissementMode.Disabled:
                LabelConsigneX.Visibility     = Visibility.Hidden;
                LabelConsigneY.Visibility     = Visibility.Hidden;
                LabelConsigneTheta.Visibility = Visibility.Hidden;
                LabelErreurX.Visibility       = Visibility.Hidden;
                LabelErreurY.Visibility       = Visibility.Hidden;
                LabelErreurTheta.Visibility   = Visibility.Hidden;
                LabelCommandX.Visibility      = Visibility.Hidden;
                LabelCommandY.Visibility      = Visibility.Hidden;
                LabelCommandTheta.Visibility  = Visibility.Hidden;

                LabelConsigneM1.Visibility = Visibility.Hidden;
                LabelConsigneM2.Visibility = Visibility.Hidden;
                LabelConsigneM3.Visibility = Visibility.Hidden;
                LabelConsigneM4.Visibility = Visibility.Hidden;
                LabelErreurM1.Visibility   = Visibility.Hidden;
                LabelErreurM2.Visibility   = Visibility.Hidden;
                LabelErreurM3.Visibility   = Visibility.Hidden;
                LabelErreurM4.Visibility   = Visibility.Hidden;
                LabelCommandM1.Visibility  = Visibility.Hidden;
                LabelCommandM2.Visibility  = Visibility.Hidden;
                LabelCommandM3.Visibility  = Visibility.Hidden;
                LabelCommandM4.Visibility  = Visibility.Hidden;

                LabelCorrPX.Visibility     = Visibility.Hidden;
                LabelCorrPY.Visibility     = Visibility.Hidden;
                LabelCorrPTheta.Visibility = Visibility.Hidden;
                LabelCorrIX.Visibility     = Visibility.Hidden;
                LabelCorrIY.Visibility     = Visibility.Hidden;
                LabelCorrITheta.Visibility = Visibility.Hidden;
                LabelCorrDX.Visibility     = Visibility.Hidden;
                LabelCorrDY.Visibility     = Visibility.Hidden;
                LabelCorrDTheta.Visibility = Visibility.Hidden;

                LabelCorrPM1.Visibility = Visibility.Hidden;
                LabelCorrPM2.Visibility = Visibility.Hidden;
                LabelCorrPM3.Visibility = Visibility.Hidden;
                LabelCorrPM4.Visibility = Visibility.Hidden;
                LabelCorrIM1.Visibility = Visibility.Hidden;
                LabelCorrIM2.Visibility = Visibility.Hidden;
                LabelCorrIM3.Visibility = Visibility.Hidden;
                LabelCorrIM4.Visibility = Visibility.Hidden;
                LabelCorrDM1.Visibility = Visibility.Hidden;
                LabelCorrDM2.Visibility = Visibility.Hidden;
                LabelCorrDM3.Visibility = Visibility.Hidden;
                LabelCorrDM4.Visibility = Visibility.Hidden;
                break;

            case AsservissementMode.Polar:
                LabelConsigneX.Visibility     = Visibility.Visible;
                LabelConsigneY.Visibility     = Visibility.Visible;
                LabelConsigneTheta.Visibility = Visibility.Visible;
                LabelErreurX.Visibility       = Visibility.Visible;
                LabelErreurY.Visibility       = Visibility.Visible;
                LabelErreurTheta.Visibility   = Visibility.Visible;
                LabelCommandX.Visibility      = Visibility.Visible;
                LabelCommandY.Visibility      = Visibility.Visible;
                LabelCommandTheta.Visibility  = Visibility.Visible;

                LabelConsigneM1.Visibility = Visibility.Hidden;
                LabelConsigneM2.Visibility = Visibility.Hidden;
                LabelConsigneM3.Visibility = Visibility.Hidden;
                LabelConsigneM4.Visibility = Visibility.Hidden;
                LabelErreurM1.Visibility   = Visibility.Hidden;
                LabelErreurM2.Visibility   = Visibility.Hidden;
                LabelErreurM3.Visibility   = Visibility.Hidden;
                LabelErreurM4.Visibility   = Visibility.Hidden;
                LabelCommandM1.Visibility  = Visibility.Hidden;
                LabelCommandM2.Visibility  = Visibility.Hidden;
                LabelCommandM3.Visibility  = Visibility.Hidden;
                LabelCommandM4.Visibility  = Visibility.Hidden;

                LabelCorrPX.Visibility     = Visibility.Visible;
                LabelCorrPY.Visibility     = Visibility.Visible;
                LabelCorrPTheta.Visibility = Visibility.Visible;
                LabelCorrIX.Visibility     = Visibility.Visible;
                LabelCorrIY.Visibility     = Visibility.Visible;
                LabelCorrITheta.Visibility = Visibility.Visible;
                LabelCorrDX.Visibility     = Visibility.Visible;
                LabelCorrDY.Visibility     = Visibility.Visible;
                LabelCorrDTheta.Visibility = Visibility.Visible;

                LabelCorrPM1.Visibility = Visibility.Hidden;
                LabelCorrPM2.Visibility = Visibility.Hidden;
                LabelCorrPM3.Visibility = Visibility.Hidden;
                LabelCorrPM4.Visibility = Visibility.Hidden;
                LabelCorrIM1.Visibility = Visibility.Hidden;
                LabelCorrIM2.Visibility = Visibility.Hidden;
                LabelCorrIM3.Visibility = Visibility.Hidden;
                LabelCorrIM4.Visibility = Visibility.Hidden;
                LabelCorrDM1.Visibility = Visibility.Hidden;
                LabelCorrDM2.Visibility = Visibility.Hidden;
                LabelCorrDM3.Visibility = Visibility.Hidden;
                LabelCorrDM4.Visibility = Visibility.Hidden;
                break;

            case AsservissementMode.Independant:
                LabelConsigneX.Visibility     = Visibility.Hidden;
                LabelConsigneY.Visibility     = Visibility.Hidden;
                LabelConsigneTheta.Visibility = Visibility.Hidden;
                LabelErreurX.Visibility       = Visibility.Hidden;
                LabelErreurY.Visibility       = Visibility.Hidden;
                LabelErreurTheta.Visibility   = Visibility.Hidden;
                LabelCommandX.Visibility      = Visibility.Hidden;
                LabelCommandY.Visibility      = Visibility.Hidden;
                LabelCommandTheta.Visibility  = Visibility.Hidden;

                LabelConsigneM1.Visibility = Visibility.Visible;
                LabelConsigneM2.Visibility = Visibility.Visible;
                LabelConsigneM3.Visibility = Visibility.Visible;
                LabelConsigneM4.Visibility = Visibility.Visible;
                LabelErreurM1.Visibility   = Visibility.Visible;
                LabelErreurM2.Visibility   = Visibility.Visible;
                LabelErreurM3.Visibility   = Visibility.Visible;
                LabelErreurM4.Visibility   = Visibility.Visible;
                LabelCommandM1.Visibility  = Visibility.Visible;
                LabelCommandM2.Visibility  = Visibility.Visible;
                LabelCommandM3.Visibility  = Visibility.Visible;
                LabelCommandM4.Visibility  = Visibility.Visible;

                LabelCorrPX.Visibility     = Visibility.Hidden;
                LabelCorrPY.Visibility     = Visibility.Hidden;
                LabelCorrPTheta.Visibility = Visibility.Hidden;
                LabelCorrIX.Visibility     = Visibility.Hidden;
                LabelCorrIY.Visibility     = Visibility.Hidden;
                LabelCorrITheta.Visibility = Visibility.Hidden;
                LabelCorrDX.Visibility     = Visibility.Hidden;
                LabelCorrDY.Visibility     = Visibility.Hidden;
                LabelCorrDTheta.Visibility = Visibility.Hidden;

                LabelCorrPM1.Visibility = Visibility.Visible;
                LabelCorrPM2.Visibility = Visibility.Visible;
                LabelCorrPM3.Visibility = Visibility.Visible;
                LabelCorrPM4.Visibility = Visibility.Visible;
                LabelCorrIM1.Visibility = Visibility.Visible;
                LabelCorrIM2.Visibility = Visibility.Visible;
                LabelCorrIM3.Visibility = Visibility.Visible;
                LabelCorrIM4.Visibility = Visibility.Visible;
                LabelCorrDM1.Visibility = Visibility.Visible;
                LabelCorrDM2.Visibility = Visibility.Visible;
                LabelCorrDM3.Visibility = Visibility.Visible;
                LabelCorrDM4.Visibility = Visibility.Visible;
                break;
            }
        }
Пример #3
0
        //Processeur de message en provenance du robot...
        //Une fois processé, le message sera transformé en event sortant
        public void ProcessDecodedMessage(Int16 command, Int16 payloadLength, byte[] payload)
        {
            byte[] tab;
            uint   timeStamp;

            switch (command)
            {
            case (short)Commands.R2PC_WelcomeMessage:
            {
                OnWelcomeMessageFromRobot();
            }
            break;

            case (short)Commands.R2PC_SpeedPolarAndIndependantOdometry:
            {
                nbMessageSpeedReceived++;
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float vX = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float vY = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float vTheta = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float vM1 = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float vM2 = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float vM3 = tab.GetFloat();
                tab = payload.GetRange(28, 4);
                float vM4 = tab.GetFloat();
                OnPolarOdometrySpeedFromRobot(robotID, timeStamp, vX, vY, vTheta);
                OnIndependantOdometrySpeedFromRobot(timeStamp, vM1, vM2, vM3, vM4);
            }
            break;

            case (short)Commands.R2PC_IMUData:
            {
                float accelX = 0, accelY = 0, accelZ = 0, gyroX = 0, gyroY = 0, gyroZ = 0;
                timeStamp = 0;
                switch (competition)
                {
                case GameMode.RoboCup:
                    nbMessageIMUReceived++;
                    timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                    tab       = payload.GetRange(4, 4);
                    accelX    = tab.GetFloat();
                    tab       = payload.GetRange(8, 4);
                    accelY    = tab.GetFloat();
                    tab       = payload.GetRange(12, 4);
                    accelZ    = tab.GetFloat();
                    tab       = payload.GetRange(16, 4);
                    gyroX     = tab.GetFloat();
                    tab       = payload.GetRange(20, 4);
                    gyroY     = tab.GetFloat();
                    tab       = payload.GetRange(24, 4);
                    gyroZ     = tab.GetFloat();
                    break;

                case GameMode.Eurobot:             //La carte de mesure est placée verticalement
                    nbMessageIMUReceived++;
                    timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                    tab       = payload.GetRange(4, 4);
                    accelY    = -tab.GetFloat();
                    tab       = payload.GetRange(8, 4);
                    accelZ    = tab.GetFloat();
                    tab       = payload.GetRange(12, 4);
                    accelX    = -tab.GetFloat();
                    tab       = payload.GetRange(16, 4);
                    gyroY     = -tab.GetFloat();
                    tab       = payload.GetRange(20, 4);
                    gyroZ     = tab.GetFloat();
                    tab       = payload.GetRange(24, 4);
                    gyroX     = -tab.GetFloat();
                    break;
                }

                Point3D accelXYZ = new Point3D(accelX, accelY, accelZ);
                Point3D gyroXYZ  = new Point3D(gyroX, gyroY, gyroZ);

                //On envois l'event aux abonnés
                OnIMUDataFromRobot(timeStamp, accelXYZ, gyroXYZ);
            }
            break;

            case (short)Commands.R2PC_MotorCurrentsMonitoring:
            {
                uint   time2         = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                byte[] tab2          = payload.GetRange(4, 4);
                float  motor1Current = tab2.GetFloat();
                tab2 = payload.GetRange(8, 4);
                float motor2Current = tab2.GetFloat();
                tab2 = payload.GetRange(12, 4);
                float motor3Current = tab2.GetFloat();
                tab2 = payload.GetRange(16, 4);
                float motor4Current = tab2.GetFloat();
                tab2 = payload.GetRange(20, 4);
                float motor5Current = tab2.GetFloat();
                tab2 = payload.GetRange(24, 4);
                float motor6Current = tab2.GetFloat();
                tab2 = payload.GetRange(28, 4);
                float motor7Current = tab2.GetFloat();
                //On envois l'event aux abonnés
                OnMotorsCurrentsFromRobot(time2, motor1Current, motor2Current, motor3Current, motor4Current, motor5Current, motor6Current, motor7Current);
            }
            break;

            case (short)Commands.R2PC_SpeedAuxiliaryOdometry:
                uint time = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab = payload.GetRange(4, 4);
                float vitesseMotor5 = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float vitesseMotor6 = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float vitesseMotor7 = tab.GetFloat();
                //On envois l'event aux abonnés

                OnAuxiliaryOdometrySpeedFromRobot(time, vitesseMotor5, vitesseMotor6, vitesseMotor7);
                break;

            case (short)Commands.R2PC_SpeedAuxiliaryMotorsConsignes:
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float consigneMotor5 = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float consigneMotor6 = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float consigneMotor7 = tab.GetFloat();
                //On envois l'event aux abonnés
                OnAuxiliarySpeedConsigneDataFromRobot(timeStamp, consigneMotor5, consigneMotor6, consigneMotor7);
                break;

            case (short)Commands.R2PC_EncoderRawData:
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                int enc1RawVal = (int)(payload[7] | payload[6] << 8 | payload[5] << 16 | payload[4] << 24);
                int enc2RawVal = (int)(payload[11] | payload[10] << 8 | payload[9] << 16 | payload[8] << 24);
                int enc3RawVal = (int)(payload[15] | payload[14] << 8 | payload[13] << 16 | payload[12] << 24);
                int enc4RawVal = (int)(payload[19] | payload[18] << 8 | payload[17] << 16 | payload[16] << 24);
                int enc5RawVal = (int)(payload[23] | payload[22] << 8 | payload[21] << 16 | payload[20] << 24);
                int enc6RawVal = (int)(payload[27] | payload[26] << 8 | payload[25] << 16 | payload[24] << 24);
                int enc7RawVal = (int)(payload[31] | payload[30] << 8 | payload[29] << 16 | payload[28] << 24);

                //On envois l'event aux abonnés
                OnEncoderRawDataFromRobot(timeStamp, enc1RawVal, enc2RawVal, enc3RawVal, enc4RawVal, enc5RawVal, enc6RawVal, enc7RawVal);
                break;

            case (short)Commands.R2PC_IOMonitoring:
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                byte ioValue = payload[4];
                OnIOValuesFromRobot(timeStamp, ioValue);
                break;

            case (short)Commands.R2PC_PowerMonitoring:
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float battCMDVoltage = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float battCMDCurrent = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float battPWRVoltage = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float battPWRCurrent = tab.GetFloat();
                OnPowerMonitoringValuesFromRobot(timeStamp, battCMDVoltage, battCMDCurrent, battPWRVoltage, battPWRCurrent);
                break;

            case (short)Commands.R2PC_4WheelsSpeedPolarPidCommandErrorCorrectionConsigne:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float xError = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float yError = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float thetaError = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float xCorrection = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float yCorrection = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float thetaCorrection = tab.GetFloat();

                tab = payload.GetRange(28, 4);
                float xconsigne = tab.GetFloat();
                tab = payload.GetRange(32, 4);
                float yConsigne = tab.GetFloat();
                tab = payload.GetRange(36, 4);
                float thetaConsigne = tab.GetFloat();
                //On envois l'event aux abonnés
                On4WheelsPolarPidErrorCorrectionConsigneDataFromRobot(timeStamp, xError, yError, thetaError, xCorrection, yCorrection, thetaCorrection, xconsigne, yConsigne, thetaConsigne);
            }
            break;

            case (short)Commands.R2PC_4WheelsSpeedIndependantPidCommandErrorCorrectionConsigne:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float M1Error = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float M2Error = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float M3Error = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float M4Error = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float M1Correction = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float M2Correction = tab.GetFloat();

                tab = payload.GetRange(28, 4);
                float M3Correction = tab.GetFloat();
                tab = payload.GetRange(32, 4);
                float M4Correction = tab.GetFloat();
                tab = payload.GetRange(36, 4);
                float M1Consigne = tab.GetFloat();
                tab = payload.GetRange(40, 4);
                float M2Consigne = tab.GetFloat();
                tab = payload.GetRange(44, 4);
                float M3Consigne = tab.GetFloat();
                tab = payload.GetRange(48, 4);
                float M4Consigne = tab.GetFloat();
                //On envois l'event aux abonnés
                On4WheelsSpeedIndependantPidDebugDataFromRobot(timeStamp,
                                                               M1Error, M2Error, M3Error, M4Error,
                                                               M1Correction, M2Correction, M3Correction, M4Correction,
                                                               M1Consigne, M2Consigne, M3Consigne, M4Consigne);
            }
            break;

            case (short)Commands.R2PC_2WheelsSpeedPolarPidCommandErrorCorrectionConsigne:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float xError = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float thetaError = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float xCorrection = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float thetaCorrection = tab.GetFloat();

                tab = payload.GetRange(20, 4);
                float xconsigne = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float thetaConsigne = tab.GetFloat();
                //On envois l'event aux abonnés
                On2WheelsPolarPidErrorCorrectionConsigneDataFromRobot(timeStamp, xError, thetaError, xCorrection, thetaCorrection, xconsigne, thetaConsigne);
            }
            break;

            case (short)Commands.R2PC_2WheelsSpeedIndependantPidCommandErrorCorrectionConsigne:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float M1Error = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float M2Error = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float M1Correction = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float M2Correction = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float M1Consigne = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float M2Consigne = tab.GetFloat();

                //On envois l'event aux abonnés
                On2WheelsSpeedIndependantPidDebugDataFromRobot(timeStamp,
                                                               M1Error, M2Error,
                                                               M1Correction, M2Correction,
                                                               M1Consigne, M2Consigne);
            }
            break;

            case (short)Commands.R2PC_4WheelsSpeedPolarPidCorrections:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float CorrPx = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float CorrIx = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float CorrDx = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float CorrPy = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float CorrIy = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float CorrDy = tab.GetFloat();
                tab = payload.GetRange(28, 4);
                float CorrPTheta = tab.GetFloat();
                tab = payload.GetRange(32, 4);
                float CorrITheta = tab.GetFloat();
                tab = payload.GetRange(36, 4);
                float CorrDTheta = tab.GetFloat();
                //On envois l'event aux abonnés
                On4WheelsSpeedPolarPidCorrectionDataFromRobot(CorrPx, CorrIx, CorrDx, CorrPy, CorrIy, CorrDy, CorrPTheta, CorrITheta, CorrDTheta);
            }
            break;

            case (short)Commands.R2PC_4WheelsSpeedIndependantPidCorrections:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float CorrPM1 = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float CorrIM1 = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float CorrDM1 = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float CorrPM2 = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float CorrIM2 = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float CorrDM2 = tab.GetFloat();
                tab = payload.GetRange(28, 4);
                float CorrPM3 = tab.GetFloat();
                tab = payload.GetRange(32, 4);
                float CorrIM3 = tab.GetFloat();
                tab = payload.GetRange(36, 4);
                float CorrDM3 = tab.GetFloat();
                tab = payload.GetRange(40, 4);
                float CorrPM4 = tab.GetFloat();
                tab = payload.GetRange(44, 4);
                float CorrIM4 = tab.GetFloat();
                tab = payload.GetRange(48, 4);
                float CorrDM4 = tab.GetFloat();
                //On envois l'event aux abonnés
                On4WheelsSpeedIndependantPidCorrectionDataFromRobot(CorrPM1, CorrIM1, CorrDM1, CorrPM2, CorrIM2, CorrDM2, CorrPM3, CorrIM3, CorrDM3, CorrPM4, CorrIM4, CorrDM4);
            }
            break;

            case (short)Commands.R2PC_2WheelsSpeedPolarPidCorrections:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float CorrPx = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float CorrIx = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float CorrDx = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float CorrPTheta = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float CorrITheta = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float CorrDTheta = tab.GetFloat();
                //On envois l'event aux abonnés
                On2WheelsSpeedPolarPidCorrectionDataFromRobot(CorrPx, CorrIx, CorrDx, CorrPTheta, CorrITheta, CorrDTheta);
            }
            break;

            case (short)Commands.R2PC_2WheelsSpeedIndependantPidCorrections:
            {
                timeStamp = (uint)(payload[3] | payload[2] << 8 | payload[1] << 16 | payload[0] << 24);
                tab       = payload.GetRange(4, 4);
                float CorrPM1 = tab.GetFloat();
                tab = payload.GetRange(8, 4);
                float CorrIM1 = tab.GetFloat();
                tab = payload.GetRange(12, 4);
                float CorrDM1 = tab.GetFloat();
                tab = payload.GetRange(16, 4);
                float CorrPM2 = tab.GetFloat();
                tab = payload.GetRange(20, 4);
                float CorrIM2 = tab.GetFloat();
                tab = payload.GetRange(24, 4);
                float CorrDM2 = tab.GetFloat();
                //On envois l'event aux abonnés
                On2WheelsSpeedIndependantPidCorrectionDataFromRobot(CorrPM1, CorrIM1, CorrDM1, CorrPM2, CorrIM2, CorrDM2);
            }
            break;

            case (short)Commands.R2PC_MotorsEnableDisableStatus:
                bool value = Convert.ToBoolean(payload[0]);
                OnEnableDisableMotorsACKFromRobot(value);
                break;

            case (short)Commands.R2PC_TirEnableDisableStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnableDisableTirACKFromRobot(value);
                break;

            case (short)Commands.R2PC_AsservissementModeStatus:
                AsservissementMode asservMode = (AsservissementMode)payload[0];
                OnAsservissementModeStatusFromRobot(asservMode);
                break;

            case (short)Commands.R2PC_SpeedPIDEnableDebugInternalStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnableAsservissementDebugDataACKFromRobot(value);
                break;

            case (short)Commands.R2PC_MotorCurrentMonitoringEnableStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnableMotorCurrentACKFromRobot(value);
                break;

            case (short)Commands.R2PC_EncoderRawMonitoringEnableStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnableEncoderRawDataACKFromRobot(value);
                break;

            case (short)Commands.R2PC_SpeedConsigneMonitoringEnableStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnableMotorSpeedConsigneDataACKFromRobot(value);
                break;

            case (short)Commands.R2PC_PowerMonitoringEnableStatus:
                value = Convert.ToBoolean(payload[0]);
                OnEnablePowerMonitoringDataACKFromRobot(value);
                break;

            case (short)Commands.R2PC_ErrorMessage:
                string errorMsg = Encoding.UTF8.GetString(payload);
                OnErrorTextFromRobot(errorMsg);
                break;

            default: break;
            }
        }
        public void SetAsservissementMode(AsservissementMode mode)
        {
            asservissementMode = mode;

            switch (asservissementMode)
            {
            case AsservissementMode.Off2Wheels:
                LabelConsigneX.Visibility     = Visibility.Hidden;
                LabelConsigneTheta.Visibility = Visibility.Hidden;
                LabelErreurX.Visibility       = Visibility.Hidden;
                LabelErreurTheta.Visibility   = Visibility.Hidden;
                LabelCommandX.Visibility      = Visibility.Hidden;
                LabelCommandTheta.Visibility  = Visibility.Hidden;

                LabelConsigneM1.Visibility = Visibility.Hidden;
                LabelConsigneM2.Visibility = Visibility.Hidden;
                LabelErreurM1.Visibility   = Visibility.Hidden;
                LabelErreurM2.Visibility   = Visibility.Hidden;
                LabelCommandM1.Visibility  = Visibility.Hidden;
                LabelCommandM2.Visibility  = Visibility.Hidden;

                LabelCorrPX.Visibility     = Visibility.Hidden;
                LabelCorrPTheta.Visibility = Visibility.Hidden;
                LabelCorrIX.Visibility     = Visibility.Hidden;
                LabelCorrITheta.Visibility = Visibility.Hidden;
                LabelCorrDX.Visibility     = Visibility.Hidden;
                LabelCorrDTheta.Visibility = Visibility.Hidden;

                LabelCorrPM1.Visibility = Visibility.Hidden;
                LabelCorrPM2.Visibility = Visibility.Hidden;
                LabelCorrIM1.Visibility = Visibility.Hidden;
                LabelCorrIM2.Visibility = Visibility.Hidden;
                LabelCorrDM1.Visibility = Visibility.Hidden;
                LabelCorrDM2.Visibility = Visibility.Hidden;
                break;

            case AsservissementMode.Polar2Wheels:
                LabelConsigneX.Visibility     = Visibility.Visible;
                LabelConsigneTheta.Visibility = Visibility.Visible;
                LabelErreurX.Visibility       = Visibility.Visible;
                LabelErreurTheta.Visibility   = Visibility.Visible;
                LabelCommandX.Visibility      = Visibility.Visible;
                LabelCommandTheta.Visibility  = Visibility.Visible;

                LabelConsigneM1.Visibility = Visibility.Hidden;
                LabelConsigneM2.Visibility = Visibility.Hidden;
                LabelErreurM1.Visibility   = Visibility.Hidden;
                LabelErreurM2.Visibility   = Visibility.Hidden;
                LabelCommandM1.Visibility  = Visibility.Hidden;
                LabelCommandM2.Visibility  = Visibility.Hidden;

                LabelCorrPX.Visibility     = Visibility.Visible;
                LabelCorrPTheta.Visibility = Visibility.Visible;
                LabelCorrIX.Visibility     = Visibility.Visible;
                LabelCorrITheta.Visibility = Visibility.Visible;
                LabelCorrDX.Visibility     = Visibility.Visible;
                LabelCorrDTheta.Visibility = Visibility.Visible;

                LabelCorrPM1.Visibility = Visibility.Hidden;
                LabelCorrPM2.Visibility = Visibility.Hidden;
                LabelCorrIM1.Visibility = Visibility.Hidden;
                LabelCorrIM2.Visibility = Visibility.Hidden;
                LabelCorrDM1.Visibility = Visibility.Hidden;
                LabelCorrDM2.Visibility = Visibility.Hidden;
                break;

            case AsservissementMode.Independant2Wheels:
                LabelConsigneX.Visibility     = Visibility.Hidden;
                LabelConsigneTheta.Visibility = Visibility.Hidden;
                LabelErreurX.Visibility       = Visibility.Hidden;
                LabelErreurTheta.Visibility   = Visibility.Hidden;
                LabelCommandX.Visibility      = Visibility.Hidden;
                LabelCommandTheta.Visibility  = Visibility.Hidden;

                LabelConsigneM1.Visibility = Visibility.Visible;
                LabelConsigneM2.Visibility = Visibility.Visible;
                LabelErreurM1.Visibility   = Visibility.Visible;
                LabelErreurM2.Visibility   = Visibility.Visible;
                LabelCommandM1.Visibility  = Visibility.Visible;
                LabelCommandM2.Visibility  = Visibility.Visible;

                LabelCorrPX.Visibility     = Visibility.Hidden;
                LabelCorrPTheta.Visibility = Visibility.Hidden;
                LabelCorrIX.Visibility     = Visibility.Hidden;
                LabelCorrITheta.Visibility = Visibility.Hidden;
                LabelCorrDX.Visibility     = Visibility.Hidden;
                LabelCorrDTheta.Visibility = Visibility.Hidden;

                LabelCorrPM1.Visibility = Visibility.Visible;
                LabelCorrPM2.Visibility = Visibility.Visible;
                LabelCorrIM1.Visibility = Visibility.Visible;
                LabelCorrIM2.Visibility = Visibility.Visible;
                LabelCorrDM1.Visibility = Visibility.Visible;
                LabelCorrDM2.Visibility = Visibility.Visible;
                break;

            default:
                break;
            }
        }