smartdrive#
Introdução#
The smartdrive class controls how a robot drives and turns using motors, wheels, and a Gyro Sensor. A smartdrive uses a connected Gyro Sensor to track heading and rotation.
O sistema de acionamento inteligente A smartdrive utiliza o sensor giroscópio para auxiliar o robô a mover-se e a rodar com precisão. No início de cada projeto, o sistema de acionamento calibra o sensor giroscópio automaticamente. Mantenha o robô imóvel durante cerca de 2 segundos durante a calibração, para que se possa mover e rodar corretamente.
A classe smartdrive baseia-se na classe drivetrain. Um smartdrive pode utilizar as mesmas funções de direção e rotação que o drivetrain, e também adiciona funções baseadas em sensores como turnToHeading e turnToRotation.
Esta página utiliza myDrivetrain como exemplo do nome do smartdrive. Substitua-o pelo nome que configurou, se necessário.
Construtores de Classes#
1 — Cria um smartdrive utilizando
motor_groupexistentes para os lados esquerdo e direito, juntamente com um sensor giroscópio.smartdrive( motor_group &l, motor_group &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — Cria um smartdrive utilizando objetos existentes de
motorpara os lados esquerdo e direito, juntamente com um sensor giroscópio.smartdrive( motor &l, motor &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destrutor de classes#
Destrói o objeto smartdrive e liberta os recursos associados.
~smartdrive();
Parâmetros#
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
The left and right motors or motor groups. Both parameters must use the same type: either two |
|
|
O Sensor Giroscópio utilizado pelo smartdrive. |
|
|
A circunferência das rodas da transmissão. O valor predefinido é |
|
|
A distância entre as rodas esquerda e direita. O valor predefinido é |
|
|
A distância entre as rodas dianteiras e traseiras. O valor predefinido é |
|
|
A unidade para |
|
|
A relação de transmissão utilizada para ajustar as distâncias de acionamento, caso sejam utilizadas engrenagens. O predefinido é |
Exemplo#
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Funções de membro#
A classe smartdrive inclui as seguintes funções membro:
Ações — Rode o robô utilizando a direção ou a rotação.
turnToHeading— Roda o robô para enfrentar uma direção específica de -359 a 359 graus. O robô irá rodar na direção mais curta para alcançar a direção alvo.turnToRotation— Roda o robô para uma rotação específica.calibrateDrivetrain— Calibra o sensor giroscópio configurado com o smartdrive.
Definições — Ajuste os valores de direção e rotação.
setHeading— Altera a direção atual do robô para uma nova direção.setRotation— Altera a rotação atual do robô para uma nova rotação.
Valores — Verificar cabeçalho e rotação.
heading— Devolve a direção atual do robô de 0 a 359 graus.rotation— Retorna a rotação atual do robô.
Um smartdrive pode também utilizar as funções de membro herdadas de drivetrain, como drive, driveFor, turn, turnFor, stop, isDone, e isMoving.
Before calling any smartdrive member functions, a smartdrive object must be created.
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
A direção é a direção para a qual o robô está virado, medida em graus. turnToHeading roda o robô para uma direção específica entre -359 e 359 graus. O robô seguirá o caminho mais curto para alcançar a direção desejada.
A direção inicial do robô é de 0 graus.
O projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código.
Available Functions1 — Roda o robô para a direção especificada utilizando a velocidade de rotação atual.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Roda o robô para a direção especificada à velocidade especificada.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A direção para a qual o robô deve estar virado, em graus. Pode variar de -359 a 359 quando se utiliza |
|
|
A unidade de medida: |
|
|
A velocidade de rotação varia de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
|
|
|
Retorna um valor booleano indicando se o robô atingiu a direção desejada.
true— O robô atingiu a direção alvo.false— O robô não terminou o turno, ou a função regressou antes da conclusão do turno porquewaitForCompletionfoi definido comofalse.
A execução de outra função de movimento da transmissão enquanto a função
turnToHeadingestiver a ser executada irá interromper o movimento atual.turnToHeadingutiliza um rumo alvo, pelo queisDoneeisMovingpodem ser utilizados com ele.
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation roda o robô para uma rotação específica.
A rotação é o quanto o robô rodou, medida em graus ou revoluções. No início de um projeto, o valor de rotação é definido como 0 graus. A rotação também pode ser definida através da função setRotation.
Os valores de rotação são absolutos. Isto significa que a direção da viragem depende da rotação atual do robô. Virar para a direita aumenta a rotação, e virar para a esquerda diminui a rotação.
Por exemplo, se o robô começar a 0 graus e rodar 720 graus, este irá virar para a direita duas vezes. Se depois rodar 360 graus, virará para a esquerda uma vez, porque 360 é inferior a 720.
O projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código.
Available Functions1 — Roda o robô até à rotação especificada utilizando a velocidade de rotação atual.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — Roda o robô até à rotação especificada à velocidade especificada.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor de rotação para o qual o robô irá rodar. |
|
|
A unidade de rotação: |
|
|
A velocidade de rotação varia de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
|
|
|
Retorna um valor booleano indicando se o robô atingiu a rotação desejada.
true— O robô atingiu a rotação alvo.false— O robô não terminou o turno, ou a função regressou antes da conclusão do turno porquewaitForCompletionfoi definido comofalse.
A execução de outra função de movimento da transmissão enquanto a função
turnToRotationestiver a ser executada irá interromper o movimento atual.turnToRotationutiliza uma rotação alvo, pelo queisDoneeisMovingpodem ser utilizados com ele.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain calibra o sensor giroscópio configurado com o smartdrive.
A calibração ajuda o sensor giroscópio a medir o movimento corretamente. Mantenha o robô imóvel durante cerca de 2 segundos durante a calibração. Se o robô se mover durante a calibração, o sensor giroscópio pode não medir o movimento corretamente.
O projeto aguardará a conclusão da calibração antes de executar a linha de código seguinte.
O comando calibrateDrivetrain é gerado automaticamente pelo VEXcode quando um sistema de transmissão é configurado com um sensor giroscópio. É fornecido como parte do código-fonte do projeto e não faz parte da API C++ do VEX IQ.
void calibrateDrivetrain();
Esta função não aceita qualquer parâmetro.
Return ValuesEsta função não devolve qualquer valor.
NotesO robô realiza a calibração automática no início de cada projeto quando um smartdrive é configurado no VEXcode.
Mantenha o robô imóvel durante cerca de 2 segundos durante a calibração.
Segue-se um exemplo da implementação gerada automaticamente de calibrateDrivetrain criada pelo VEXcode:
bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
wait(200, msec);
Brain.Screen.print("Calibrating");
Brain.Screen.newLine();
Brain.Screen.print("Gyro");
DrivetrainGyro.calibrate();
while (DrivetrainGyro.isCalibrating()) {
wait(25, msec);
}
vexcode_initial_drivetrain_calibration_completed = true;
// Clears the screen and returns the cursor to row 1, column 1.
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
}
setHeading#
A direção é a direção para a qual o robô está virado, medida em graus. setHeading altera a direção atual do robô para um novo valor de direção.
Por exemplo, se o robô se virou para a direita, definir a direção para 0 graus faz com que essa posição virada para a direita se torne os novos 0 graus. De seguida, o robô pode rodar para outras posições com base nessa nova direção.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor de direção a definir para o robô. Pode ser de -359 a 359 quando se utiliza |
|
|
A unidade de medida: |
Esta função não devolve qualquer valor.
Examples// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
A rotação indica o quanto o robô rodou, medida em graus ou revoluções. No início de um projeto, o valor de rotação é definido como 0 graus. O comando setRotation altera a rotação actual do robô para um novo valor.
Por exemplo, se o robô tiver dado duas voltas completas para a direita, o seu valor de rotação será de 720 graus. Definir a rotação para 0 graus irá repor essa rotação de 720 para 0 graus. De seguida, o robô poderá rodar para rotações baseadas nesse novo valor.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O valor de rotação a definir para o robô. |
|
|
A unidade de rotação: |
Esta função não devolve qualquer valor.
Examples// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
A direção indica para onde o robô está virado, medida em graus. O comando heading devolve a direção atual do robô, de 0 a 359 graus.
A direção inicial do robô é de 0 graus.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Opcional. A unidade para devolver o rumo: |
Retorna a direção atual do robô como um duplo double na unidade selecionada.
// Show heading before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();
rotation#
A rotação indica o quanto o robô rodou, medida em graus ou revoluções. No início de um projeto, o valor de rotação é definido como 0 graus. O comando rotation devolve a rotação actual do robô.
Virar para a direita aumenta a rotação, e virar para a esquerda diminui a rotação. Por exemplo, duas voltas completas para a direita resultarão numa rotação de 720 graus.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Opcional. A unidade para devolver a rotação: |
Retorna a rotação atual do robô como um valor double na unidade selecionada.
// Show rotation before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();