Transmissão#
Introdução#
O sistema de transmissão (classe drivetrain controla a forma como um robô se move e gira. Um sistema de transmissão é composto por motores e rodas que trabalham em conjunto para movimentar o robô.
Um sistema de transmissão drivetrain não utiliza um Sensor Inercial, Sensor Giroscópio ou Sensor GPS para curvas baseadas na direcção ou rotação. Pode conduzir para a frente ou para trás e virar para a esquerda ou para a direita, mas não pode virar para uma direção ou rotação específica. Para curvas baseadas na direção e rotação, utilize a classe smartdrive.
Classes Derivadas#
A classe drivetrain serve de classe base para as seguintes classes derivadas:
smartdrive- Esta classe adiciona suporte para sensor inercial, sensor GPS ou sensor giroscópio para permitir curvas baseadas na direção e rotação.
Construtores de Classes#
1 - Cria um grupo motopropulsor utilizando
motor_groupexistentes para os lados esquerdo (&l) e direito (&r).drivetrain( motor_group &l, motor_group &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 - Cria um grupo motopropulsor utilizando os objectos existentes
motorpara os lados esquerdo (&l) e direito (&r).drivetrain( motor &l, motor &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destrutor de classes#
Destrói o objeto drivetrain e liberta os recursos associados.
virtual ~drivetrain();
Parâmetros#
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
The left and right motors or motor groups. Both parameters must use the same type: either two |
|
|
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#
// Create the left and right motor objects
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Funções de membro#
A classe drivetrain inclui as seguintes funções membro:
Ações - Mova e rode o robô.
drive- Move o robô para a frente ou para trás indefinidamente.driveFor- Move o robô para a frente ou para trás por uma distância específica.turn- Vira o robô para a esquerda ou para a direita para sempre.turnFor- Roda o robô para a esquerda ou para a direita de um número específico de graus.stop- Interrompe o movimento do robô.
Definições - Ajustar as definições da transmissão.
setDriveVelocity- Informa o robô a que velocidade deve conduzir.setTurnVelocity- Diz ao robô a velocidade a que deve virar.setStopping- Indica como o robô irá parar de se mover: travando, deslizando ou parando.setTimeout- Define quantos segundos o robô tentará terminar um movimento.
Valores - Verificar estado de movimentação.
isDone- Retorna se o robô terminou de se mover, como um valor booleano.isMoving- Retorna se o robô se está a mover, como um valor booleano.velocity- Devolve a velocidade de deslocação do robô.current- Devolve a quantidade de corrente elétrica que o grupo motopropulsor está a utilizar.power- Devolve a rapidez com que o grupo motopropulsor está a utilizar energia.torque- Retorna quanto binário a transmissão está a utilizar.efficiency- Devolve a eficiência com que o grupo motopropulsor está a utilizar energia.temperature- Devolve a temperatura da transmissão.voltage- Devolve a tensão eléctrica fornecida ao grupo motopropulsor.
Antes de chamar qualquer função membro do conjunto de transmissão drivetrain , deve ser criado um objeto do conjunto de transmissão drivetrain , como se mostra abaixo:
/* 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 drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Ações#
conduzir#
drive moves the robot forward or reverse forever. The robot will continue to move until it is given another action, like turning or stopping. For RPM or DPS, the limit is changed by the gear ratio of the drivetrain.
1 - Acionamentos utilizando a velocidade de acionamento configurada.
void drive( directionType dir );
Parameters2 - Aciona à velocidade especificada.
void drive( directionType dir, double velocity, velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A direção em que o robô se move: |
|
|
A velocidade de deslocação varia de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
Esta função não devolve qualquer valor.
NotesA unidade
drivenão está em espera; o projeto continuará a executar a próxima linha de código imediatamente após a chamada.O grupo motopropulsor continuará a mover-se até que
stopseja chamado ou outra função de movimento do grupo motopropulsor (comodriveForouturn) seja executada.Funções como
isDoneeisMovingnão são aplicáveis adrive, uma vez que não usa movimento baseado em alvo (não tem um parâmetrodistance).
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
conduzirPara#
O comando drive driveFor controla o movimento do robô para a frente ou para trás, a uma distância específica. Por predefinição, o projeto aguardará até que o robô termine de se mover antes de executar a próxima linha de código. Para RPM ou DPS, o limite é alterado pela relação de transmissão do sistema de tração.
1 - Desloca-se na direção especificada por uma distância utilizando a velocidade de movimento configurada.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Move-se numa direção dependente da distância utilizando a velocidade de movimento configurada.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Desloca-se numa direção que depende da distância, à velocidade especificada.
bool driveFor( double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Desloca-se na direção especificada por uma distância à velocidade especificada.
bool driveFor( directionType dir, double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A direção em que o robô se move: |
|
|
A distância percorrida pelo robô. |
|
|
A unidade de distância: |
|
|
A velocidade de deslocação varia de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
|
|
|
Retorna um valor booleano indicando se o robô atingiu a distância alvo.
true- O robô atingiu a distância alvo.false- O robô não terminou o movimento, ou a função retornou antes de o movimento estar concluído porquewaitForCompletionfoi definido comofalse.
A execução de outra função de movimento do grupo motopropulsor (como
driveouturnFor) enquantodriveForestá em curso irá interromper o movimento atual.Como
driveForé baseado no alvo (utiliza um parâmetro de distânciadistance), funções comoisDoneeisMovingfuncionam comdriveFor.
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
virar#
O comando turn a esquerda ou para a direita indefinidamente. O robô continuará a rodar até receber outra ação, como conduzir ou parar. Para RPM ou DPS, o limite é alterado pela relação de transmissão do sistema de tração.
1 - Curvas utilizando a velocidade de curva configurada.
void turn( turnType dir );
Parameters2 - Gira à velocidade especificada.
void turn( turnType dir, double velocity, velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A direção para a qual o robô vira: |
|
|
A velocidade de rotação varia de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
A chamada
turnnão espera; o projeto continuará a executar a próxima linha de código imediatamente após a chamada.O grupo motopropulsor continuará a rodar até que
stopseja chamado ou outra função de movimento do grupo motopropulsor (comoturnForoudrive) seja executada.Funções como
isDoneeisMovingnão são aplicáveis aturn, uma vez que não usa movimento baseado em alvo (não tem um parâmetroangle).
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
virarPara#
turnFor , o robô roda para a esquerda ou para a direita durante um número específico de graus. O giro é relativo à posição atual do robô. Por predefinição, o projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código. Para RPM ou DPS, o limite é alterado pela relação de transmissão do sistema de tração.
1 - Roda para o ângulo especificado utilizando a velocidade de rotação configurada.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Gira na direção especificada por um ângulo utilizando a velocidade de rotação configurada.
bool turnFor( turnType dir, double angle, rotationUnits units, bool waitForCompletion = true );
3 - Realiza rotações no ângulo especificado com a velocidade especificada.
bool turnFor( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Gira na direção especificada por um ângulo à velocidade especificada.
bool turnFor( turnType dir, 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ô vira: |
|
|
O ângulo de rotação do robô. |
|
|
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 o ângulo alvo.
true- O robô atingiu o ângulo 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 do grupo motopropulsor (como
turnoudrive) enquantoturnForestá em curso irá interromper o movimento atual.Como
turnForé baseado no alvo (utiliza um parâmetro de ânguloangle), funções comoisDoneeisMovingfuncionam comturnFor.
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);
parar#
stop interrompe o movimento do robô. Se for fornecido um modo de paragem, este controla a forma como o robô pára para esta chamada de função.
1 - Interrompe o grupo motopropulsor utilizando o modo de paragem atualmente configurado.
void stop();
Parameters2 - Interrompe a transmissão utilizando o modo de travagem especificado.
void stop( brakeType mode );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Como o robô irá parar:
|
Esta função não devolve qualquer valor.
Examples// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
Mutantes#
definirVelocidadeDeAcionamento#
O parâmetro setDriveVelocity define a velocidade de deslocação do robô. Uma percentagem maior aumenta a velocidade, enquanto uma percentagem menor diminui. Em relação à rotação por minuto (RPM), o limite é determinado pela relação de transmissão do sistema de acionamento.
Todos os projetos começam com o robô a deslocar-se a 50% da velocidade por defeito.
Nota: Uma velocidade mais elevada faz com que o robô se mova mais rapidamente, mas pode ser menos preciso. Uma velocidade mais baixa faz com que o robô se mova mais devagar, mas pode ser mais preciso.
Available Functionsvoid setDriveVelocity(
double velocity,
velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A velocidade de condução varia de 0% a 100% quando se utilizam |
|
|
A unidade de velocidade: |
Esta função não devolve qualquer valor.
NotesA velocidade de acionamento aplica-se a todas as funções subsequentes de movimento do grupo motopropulsor (como
driveedriveFor), a menos que seja fornecida uma velocidade específica na chamada da função.
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
definirVelocidadeDeTurno#
O parâmetro setTurnVelocity define a velocidade de rotação do robô. Uma percentagem mais elevada faz com que o robô gire mais rápido, enquanto uma percentagem mais baixa faz com que gire mais devagar.
Todos os projetos começam com o robô a rodar a 50% da velocidade por defeito.
Nota: Uma velocidade mais elevada faz com que o robô gire mais rápido, mas pode ser menos preciso. Uma velocidade mais baixa faz com que o robô gire mais devagar, mas pode ser mais preciso.
Available Functionsvoid setTurnVelocity(
double velocity,
velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A velocidade de rotação de 0% a 100% quando se utiliza |
|
|
A unidade de velocidade: |
Esta função não devolve qualquer valor.
NotesA velocidade de rotação aplica-se a todas as funções de rotação subsequentes do grupo motopropulsor (como
turneturnFor), a menos que seja fornecida uma velocidade específica na chamada da função.
// Try default, slow, then fast
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(20, percent);
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(100, percent);
myDrivetrain.turnFor(right, 360, degrees);
definirParar#
setStopping define a forma como o robô irá parar de se mover: travando, deslizando ou parando.
void setStopping(
brakeType mode );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
Como o robô irá parar:
|
Esta função não devolve qualquer valor.
NotesO modo de paragem aplica-se a todas as chamadas subsequentes
stopa menos que seja fornecido um modo de paragem específico na chamada da função.
setTimeout#
O parâmetro setTimeout setTimeout define quantos segundos o robô tentará completar um movimento. Se o robô não conseguir completar dentro deste tempo, interromperá a tentativa e passará para a linha de código seguinte. Isto evita que o robô fique preso num movimento.
void setTimeout(
int32_t time,
timeUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
O tempo que o robô pode tentar para completar um movimento. Deve ser um número inteiro positivo. |
|
|
A unidade de tempo: |
Esta função não devolve qualquer valor.
NotesO tempo limite só se aplica a funções de movimento do grupo motopropulsor baseadas no alvo (como
driveForeturnFor).
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);
Getters#
está concluído#
isDone devolve um valor booleano indicando se o robô terminou de se mover. Isto pode ser utilizado para controlar o tempo de outros comportamentos com base no movimento do robô.
bool isDone( void );
Esta função não aceita qualquer parâmetro.
Return Valuestrue- O robô terminou de se mover.false- O robô ainda se está a mover.
está em movimento#
isMoving retorna se o robô se está a mover, como um valor booleano. Isto pode ser utilizado para controlar o tempo de outros comportamentos com base no movimento do robô.
virtual bool isMoving( void );
Esta função não aceita qualquer parâmetro.
Return Valuestrue- O robô está em movimento.false- O robô não se está a mover.
velocidade#
A velocidade velocity indica a velocidade de deslocação do robô.
Um valor positivo significa que o robô se está a mover para a frente. Um valor negativo significa que o robô se está a mover para trás.
Available Functionsdouble velocity(
velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade de velocidade: |
Retorna a velocidade da transmissão como um valor double na unidade selecionada.
// Show velocity before and during motion
Brain.Screen.print("Resting: %f", myDrivetrain.velocity(percent));
myDrivetrain.drive(forward, 100, velocityUnits::pct);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("Moving: %f", myDrivetrain.velocity(percent));
myDrivetrain.stop();
atual#
current devolve a quantidade de corrente eléctrica que a transmissão está a utilizar. A corrente é a quantidade de eletricidade que flui através da transmissão. Pode ser devolvida em amperes (ampères) ou como percentagem, dependendo da unidade.
Um valor de corrente mais elevado significa que o sistema de transmissão está a consumir mais corrente elétrica. Isto pode acontecer quando o robô está a empurrar um objeto ou a tentar mover-se quando está preso.
Este pode ser utilizado para verificar se a transmissão está a apresentar dificuldades durante o movimento. Se a corrente permanecer elevada, a transmissão pode sobreaquecer ou utilizar a energia de forma menos eficiente.
Available Functions1 - Devolve a corrente elétrica da transmissão em amperes.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Devolve a corrente elétrica da transmissão em percentagem do valor máximo.
double current( percentUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para retornar corrente de entrada: |
|
|
A unidade para devolver corrente em: |
Devolve a corrente da transmissão como um valor double na unidade selecionada.
poder#
A potência power indica a potência que o sistema de transmissão está a utilizar, medida em watts. A potência mostra a rapidez com que o sistema de transmissão está a consumir energia.
Um valor de potência mais elevado significa que o sistema de transmissão está a consumir energia mais rapidamente. Isto pode acontecer quando o robô está a empurrar um objeto ou a tentar mover-se quando está preso.
Este pode ser utilizado para comparar movimentos ou verificar se a transmissão está a apresentar dificuldades. Se a potência permanecer elevada, a transmissão pode sobreaquecer ou utilizar a energia de forma menos eficiente.
Available Functionsdouble power(
powerUnits units = powerUnits::watt );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade de potência: |
Devolve a potência da transmissão como um valor double em watts.
binário#
O binário indica a força que o sistema de transmissão consegue exercer força de tração ou empurrar enquanto as rodas giram.
torque devolve a quantidade de binário que a transmissão está a utilizar, medida em Newton-metros (Nm) ou polegadas-libras (InLb).
Um valor de binário mais elevado significa que o sistema de transmissão está a empurrar ou a puxar com mais força. Isto pode acontecer quando o robô está a empurrar contra um objeto ou a tentar mover-se quando está preso.
Isto pode ser utilizado para verificar se a transmissão está com dificuldades ou para comparar quanta força é necessária para diferentes movimentos.
Available Functionsdouble torque(
torqueUnits units = torqueUnits::nm );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para devolver o binário: |
Devolve o binário da transmissão como double na unidade selecionada.
eficiência#
A eficiência efficiency indica a eficiência com que o sistema de transmissão utiliza a energia, numa percentagem de 0% a 100%.
A eficiência indica quanta potência do sistema de transmissão está a ser utilizada para o movimento. Um valor de eficiência mais elevado significa que está a ser utilizada mais potência do sistema de transmissão para movimentar o robô. Um valor de eficiência mais baixo pode ocorrer quando o sistema de transmissão está a trabalhar muito, mas não se move muito, como quando o robô está preso ou a empurrar um objeto.
Isto pode ser utilizado para comparar movimentos ou verificar se a transmissão está a desperdiçar energia em vez de a utilizar para movimento.
Available Functionsdouble efficiency(
percentUnits units = percentUnits::pct );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade de medida da eficiência a expressar é: |
Devolve a eficiência da transmissão como double na unidade selecionada.
temperatura#
A opção temperature devolve a temperatura média da transmissão como uma percentagem de 0% a 100%.
A temperatura indica o quão aquecidos estão os motores da transmissão. Uma temperatura mais elevada significa que os motores estão a aquecer durante o funcionamento. Os motores devem permanecer abaixo dos 55°C para continuarem a funcionar com o máximo desempenho.
Se os motores aquecerem demasiado, reduzirão a corrente máxima para se protegerem. A 70°C, os motores deixarão de funcionar até arrefecerem.
Isto pode ser utilizado para verificar se a transmissão está a sobreaquecer durante movimentos repetidos, percursos longos ou quando está a empurrar contra um objeto.
Available Functionsdouble temperature(
percentUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para voltar a temperatura em: |
Retorna a temperatura média da transmissão como um valor double na unidade selecionada.
Um valor devolvido de
50%indica que a temperatura média do motor é de aproximadamente45°C(113°F).A gama de temperatura de funcionamento típica para o grupo motopropulsor é de aproximadamente
20°C(68°F) a70°C(158°F).
tensão#
voltage returns the electrical voltage supplied to the drivetrain.
A tensão é a pressão elétrica fornecida aos motores da transmissão. Pode ser utilizada em conjunto com os valores de corrente e potência para compreender como a transmissão está a utilizar energia elétrica.
Available Functionsdouble voltage(
voltageUnits units = voltageUnits::volt );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para devolver a tensão: |
Devolve a tensão da transmissão como um duplo double na unidade selecionada.