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 Giroscópio para curvas baseadas na direcção ou rotação. Pode mover-se 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.
Esta página utiliza myDrivetrain como exemplo do nome do grupo motopropulsor. Substitua-o pelo nome que configurou, se necessário.
Classes Derivadas#
A classe drivetrain serve de classe base para a seguinte classe derivada:
smartdrive- Cria um grupo motopropulsor com suporte para sensor giroscópio.
Construtores de Classes#
1 - Cria um grupo motopropulsor utilizando
motor_groupexistentes para os lados esquerdo e direito.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 sistema de transmissão utilizando os objectos existentes
motorpara os lados esquerdo e direito.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
rightMotor, // right motor
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 por um número específico de graus ou rotações.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 durante quanto tempo 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 o quão quente está o grupo motopropulsor.voltage- Devolve a tensão eléctrica do grupo motopropulsor.
Antes de chamar qualquer função membro drivetrain , deve ser criado um objeto drivetrain.
/* 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
rightMotor, // right motor
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.
1 - Acionamentos utilizando a velocidade de acionamento atual.
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 executará a próxima linha de código imediatamente.O robô continuará a mover-se até que
stopseja chamado ou outra função de movimento do grupo motopropulsor seja executada.isDoneeisMovingnão são utilizados comdriveporquedrivenão tem uma distância alvo.
// 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. O projeto aguardará até que o robô termine de se mover antes de executar a próxima linha de código.
1 - Desloca-se na direção especificada por uma distância utilizando a velocidade de deslocação atual.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Desloca-se numa direção baseada no valor da distância, utilizando a velocidade de deslocação atual.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Desloca-se numa direção baseada no valor 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 da transmissão enquanto a função
driveForestiver a ser executada irá interromper o movimento atual.driveForutiliza uma distância alvo, pelo queisDoneeisMovingpodem ser utilizados com ele.
// Drive 200 mm, then back 200 mm.
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
virar#
O comando turn o robô vire para a esquerda ou para a direita indefinidamente. O robô continuará a virar até receber outra ação, como conduzir ou parar.
1 - Faz curvas utilizando a velocidade de rotação atual.
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: |
Esta função não devolve qualquer valor.
NotesA opção
turnnão espera. O projeto executará a próxima linha de código imediatamente.O robô continuará a rodar até que
stopseja chamado ou outra função de movimento do grupo motopropulsor seja executada.isDoneeisMovingnão são utilizados comturnporqueturnnão tem um ângulo alvo.
// Turn right, then left, then stop.
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
virarPara#
turnFor o robô gira para a esquerda ou para a direita durante um número específico de graus, rotações ou unidades brutas. A rotação é relativa à posição atual do robô. O projeto aguardará até que o robô termine de rodar antes de executar a próxima linha de código.
1 - Faz curvas no ângulo especificado utilizando a velocidade de rotação atual.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Gira na direção especificada por um ângulo utilizando a velocidade de rotação atual.
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 número de voltas 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 da transmissão enquanto a função
turnForestiver a ser executada irá interromper o movimento atual.turnForutiliza um ângulo alvo, pelo queisDoneeisMovingpodem ser utilizados com ele.
// 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 a transmissão utilizando o modo de paragem atual.
void stop();
Parameters2 - Interrompe a transmissão utilizando o modo de paragem 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 mais elevada faz com que o robô se desloque mais rapidamente, enquanto uma percentagem mais baixa o faz deslocar-se mais lentamente.
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 é utilizada pelas funções de movimentação da transmissão subsequentes, 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 é utilizada pelas funções de rotação da transmissão posteriores, 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 é utilizado por chamadas posteriores
stopa menos que seja fornecido um modo de paragem específico na chamada da função.Se esta função não for utilizada, o robô utilizará o travão
brakeao parar.
setTimeout#
O parâmetro setTimeout setTimeout define durante quanto tempo 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 às funções do grupo motopropulsor que se deslocam para um alvo, como
driveForeturnFor.
// Turn right after driving forward.
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ô.
Pode devolver a velocidade em percentagem, a rpmou a dpsUm 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.
double velocity(
velocityUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para voltar a velocidade em: |
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.
double current( percentUnits units );
Parâmetro |
Tipo |
Descrição |
|---|---|---|
|
|
A unidade para devolver 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 para devolver a eficiência em: |
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%significa que a temperatura média do motor é de cerca de45°C(113°F).A gama de temperatura de funcionamento típica para o grupo motopropulsor é de cerca de
20°C(68°F) a70°C(158°F).
tensão#
voltage returns the electrical voltage of 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.