Tamandutech / LineFollower_Braia_Code

Repositório de códigos do robô segue linha Braia
5 stars 1 forks source link

Permitir a inversão da rotação dos motores e da leitura dos encoders pela Dashboard #61

Closed Matheus-de-Sousa closed 1 month ago

Matheus-de-Sousa commented 1 year ago

Incluir parâmetros "booleanos" no código para a inversão da rotação dos motores e da leitura dos encoders pela dashboard, esses parâmetros podem ser incluídos na classe de status do robô. Ao inicializar o robô carregará os parâmetros na dashboard apenas uma vez até a próxima inicialização.

Matheus-de-Sousa commented 1 year ago

Essa alteração pode ser feita adiconando ao arquivo RobotStatus.cpp adições ao código como o mostrado abaixo:

parameterName = new DataAbstract<bool>("parameterName", name, false); // Inicializa o parâmetro especificado e aloca memória para ele
dataManager->registerParamData(parameterName); // Registra o parâmetro especificado em uma lista para que ele possa ser identificado pela dashboard

E no arquivo RobotStatus.h adições ao código como o mostrado abaixo:

DataAbstract<bool> *parameterName; // Cria um novo parâmetro na classe

Com essas alterações feitas os novos parâmetros serão criados e identificados pela dashboard, faltando apenas adicionar a lógica ao código para que esses parâmetros sejam interpretados pelo robô. Isso será feito alterando o construtor da classe SpeedService.cpp em que será necessário desenvolver uma lógica para ao ler o parâmetro relacionado à inversão da leitura dos encoders, as portas utilizadas para ler os encoders são invertidas caso ele seja verdadeiro e caso contrário, serão mantidas como estão, como no código abaixo:

    if(robot->getStatus()->parameterName->getData()) // Lê parâmetro da dash
    {
        enc_motEsq.attachFullQuad(ENC_MOT_ESQ_B, ENC_MOT_ESQ_A); // Inverte leitura do encoder esquerdo
        enc_motDir.attachFullQuad(ENC_MOT_DIR_B, ENC_MOT_DIR_A); // Inverte leitura do encoder direito
    }
    else
    {
        enc_motEsq.attachFullQuad(ENC_MOT_ESQ_A, ENC_MOT_ESQ_B); // Mantém leitura do encoder esquerdo
        enc_motDir.attachFullQuad(ENC_MOT_DIR_A, ENC_MOT_DIR_B); // Mantém leitura do encoder direito
    }

Já a inversão da rotação dos motores será feita alterando o construtor da classe PIDService.cpp em que será necessário desenvolver uma lógica para ao ler o parâmetro relacionado à inversão da rotação dos motores as portas utilizadas para acionar os motores são invertidas, como no código abaixo:

    if(status->parameterName->getData()) // Lê parâmetro da dash
    {
       motors.attachMotors(DRIVER_AIN2, DRIVER_AIN1, DRIVER_PWMA, DRIVER_BIN1, DRIVER_BIN2, DRIVER_PWMB); // Inverte rotação
    }
    else
    {
        motors.attachMotors(DRIVER_AIN1, DRIVER_AIN2, DRIVER_PWMA, DRIVER_BIN2, DRIVER_BIN1, DRIVER_PWMB); // Mantém a rotação
    }

Portanto, devem ser adicionados 2 novos parâmetros editáveis pela dash no código do robô e a lógoca para a interpretação deles deve ser implementada nas classes descritas acima.