ハセオムニのプログラム

Dependencies:   vnh5019 SerialMultiByte omni_wheel PID jy901 MotorSMLAP PS3

main.cpp

Committer:
LVRhase01
Date:
2020-12-15
Revision:
23:de19f4304f11
Parent:
21:f563d813b5c5

File content as of revision 23:de19f4304f11:

#define BEAT 140
#include "mbed.h"
#include "math.h"
#include "omni_wheel.h"
#include "motorsmlap.h"
#include "PID.h"
#include "Pixy.h"

PID pixydate_x(2.0,0,0,0.01);
PID pixydate_y(2.0,0,0,0.01);
Serial pc(USBTX, USBRX, 115200);
SPI spi(PB_15, PB_14, PB_13);
PixySPI pixy(&spi, &pc);
PwmOut beep(PA_0);
DigitalOut led0(PB_5);
DigitalOut led1(PA_1);
DigitalOut led2(LED2);

motorSmLap motor[] = {
    motorSmLap(PC_6, PC_9, PC_8),
    motorSmLap(PB_6, PA_9, PC_7),
    motorSmLap(PA_8, PB_4, PB_7)
    };

const double PII = 3.14159265358979;
OmniWheel omni(3);

void setup(){
        omni.wheel[0].setRadian(PII/4.0);
        omni.wheel[1].setRadian(3.0/4.0*PII);
        omni.wheel[2].setRadian(3.0/2.0*PII);

        beep.period(1.0/3136);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/2960);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/2489);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/1760);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/1661);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/2637);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/3322);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.period(1.0/4186);
        beep.write(0.4f);
        wait_ms(BEAT);

        beep.write(0.0f);
        wait_ms(BEAT);
}
int main() {
    setup();
    float x, y,now_angle;
    int pixy_x,pixy_y;

    pixydate_x.setInputLimits(0,255.0);
    pixydate_x.setOutputLimits(-1,1);
    pixydate_x.setBias(0);
    pixydate_x.setMode(1);
    pixydate_x.setSetPoint(175);

    pixydate_y.setInputLimits(0,255.0);
    pixydate_y.setOutputLimits(-1,1);
    pixydate_y.setBias(0);
    pixydate_y.setMode(1);
    pixydate_y.setSetPoint(180);

    ServoLoop panLoop(-150, -300);
    ServoLoop tiltLoop(200, 250);
    static int i = 0;
    int j;
    uint16_t blocks;
    int32_t panError, tiltError;
    pixy.init();

    while (true) {
        led0=1;
        led1=0;
        blocks = pixy.getBlocks();
        if (blocks) {
            panError = X_CENTER - pixy.blocks[0].x;
            tiltError = pixy.blocks[0].y - Y_CENTER;

            panLoop.update(panError);
            tiltLoop.update(tiltError);

            pixy.setServos(panLoop.m_pos, tiltLoop.m_pos);
            i++;

            if (i % 50 == 0 && pc != NULL) {
                pc.printf("Detected %d:\n", blocks);
                pc.printf("x=%d: ", pixy.getxxx(pixy.blocks[0]));
                pc.printf("Y=%d: ", pixy.getyyy(pixy.blocks[0]));
                pixy.printBlock(pixy.blocks[0]);
            }
        }
        
        pixydate_x.setProcessValue(pixy.getxxx(pixy.blocks[0]));
        pixydate_y.setProcessValue(pixy.getyyy(pixy.blocks[0]));
        
        omni.computeXY(
            pixydate_x.compute(),
            pixydate_y.compute(),
            0,
            0,
            0
            );
        for(int i=0; i<3; i++){
          motor[i].setMotorSpeed(omni.wheel[i].getOutput()*0.8);
        }
      }
}