CTE Arm#

Zavedení#

Třída arm poskytuje ovládání 6osého ramene používaného v pracovní buňce CTE. V jazyce VEX EXP C++ může 6osé rameno pohybovat koncovým efektorem do pozic v trojrozměrném prostoru, otáčet koncovým efektorem, kontrolovat, zda jsou pohyby možné, a ovládat připojené nástroje, jako je nástroj pro magnetické snímání nebo nástroj pro držák pera.

Příklady na této stránce používají nakonfigurované 6osé rameno s názvem Arm.

Konstruktéři#

arm#

arm vytvoří objekt 6osého ramene.

Dostupná funkce

arm(int32_t index);

Parametr

Typ

Popis

index

int32_t

Inteligentní port, ke kterému je připojeno 6osé rameno, zapsaný jako PORTx, kde x je číslo portu. Například PORT1.

Příklad

// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);

Destruktor#

~arm#

~arm zničí objekt arm a uvolní přidružené zdroje.

Dostupná funkce

~arm();

Členské funkce#

Třída arm obsahuje následující členské funkce:

Akce – Pohyb 6osého ramene do pozic nebo orientací.

  • moveTo — Přesune koncový efektor na zadanou souřadnici x, y a z.

  • moveInc — Přesune koncový efektor o zadanou vzdálenost od jeho aktuální polohy.

  • moveEndEffectorTo — Otočí koncový efektor do zadané orientace stáčení, klopení a stoupání.

  • moveEndEffectorInc — Otočí koncový efektor o zadanou hodnotu stáčení, klopení a stoupání.

Mutátory – Konfigurace pohybu, nástrojů a nastavení ovládání.

  • setSpeed — Nastavuje rychlost pohybu používanou 6osým ramenem.

  • setEndEffectorType — Nastaví typ koncového efektoru připojeného k 6osému ramenu.

  • setEndEffectorMagnet — Povolí nebo zakáže nástroj pro snímání magnetu.

  • setPenOffset — Nastaví posun osy z použitý s nástrojem Držák pera.

  • setControlStop — Povolí nebo zakáže zastavení řízení pro 6osé rameno.

  • setTimeout — Nastavuje časový limit používaný funkcemi pohybu 6osého ramene.

Gettery – Vracejí stav pohybu, pozici, orientaci a hodnoty připojení.

  • isDone — Vrátí, zda se pohyb 6osého ramene dokončil.

  • isCrashed — Vrátí, zda došlo k havárii 6osého ramene během pohybu.

  • getX — Vrátí aktuální pozici x koncového efektoru.

  • getY — Vrátí aktuální pozici y koncového efektoru.

  • getZ — Vrátí aktuální pozici z koncového efektoru.

  • getYaw — Vrátí aktuální natočení koncového efektoru.

  • getRoll — Vrátí aktuální hod koncového efektoru.

  • getPitch — Vrátí aktuální výšku tónu koncového efektoru.

  • canArmReachTo — Vrátí, zda 6osé rameno může dosáhnout zadané polohy.

  • canArmReachInc — Vrátí, zda se 6osé rameno může posunout o zadanou vzdálenost.

  • canEndEffectorReachTo — Vrátí, zda koncový efektor může dosáhnout zadané orientace.

  • canEndEffectorReachInc — Vrátí, zda se koncový efektor může otočit o zadanou hodnotu.

  • isConnected — Vrátí, zda je 6osé rameno připojeno k EXP Brainu.

  • timestamp — Vrátí časové razítko posledního přijatého stavového paketu z 6osého ramene.

  • installed — Vrátí, zda je připojeno 6osé rameno.

Zpětná volání — Spouštějí funkce, když dojde k událostem arm.

  • controlStopped — Registruje funkci, která se má spustit, když je povoleno zastavení řízení.

  • crashed — Zaregistruje funkci, která se spustí při detekci havárie.

Akce#

moveTo#

moveTo přesune 6osé rameno na zadanou souřadnici x, y a z.

Souřadnice x, y a z popisují polohu koncového efektoru v trojrozměrném prostoru. Pokud cílová poloha může být mimo dosažitelný pracovní prostor 6osého ramene, použijte před touto funkcí funkci canArmReachTo.

Dostupná funkce

bool moveTo(
  double x,
  double y,
  double z,
  bool   waitForCompletion = true
);

Parametr

Typ

Popis

x

double

Souřadnice x cílové polohy v milimetrech.

y

double

Souřadnice y cílové polohy v milimetrech.

z

double

Souřadnice z cílové polohy v milimetrech.

waitForCompletion

bool

Volitelné. true (výchozí) čeká na dokončení pohybu, než bude pokračovat. false spustí pohyb a okamžitě pokračuje na další řádek kódu.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno dosáhlo cílové polohy.

  • false — 6osé rameno nedosáhlo cílové polohy nebo waitForCompletion bylo nastaveno na false.

Příklady

// Move the 6-Axis Arm to (200, 0, 100)
Arm.moveTo(200, 0, 100);

// Start moving, then print the y-position while the arm moves
Arm.moveTo(-100, 200, 100, false);

while (!Arm.isDone()) {
  Brain.Screen.print(Arm.getY());
  Brain.Screen.newLine();
  wait(0.25, seconds);
}

moveInc#

moveInc posune 6osé rameno o zadanou vzdálenost od jeho aktuální polohy podél os x, y a z.

Tuto funkci použijte pro pohyb vzhledem k aktuálnímu umístění koncového efektoru. Pokud pohyb může umístit 6osé rameno mimo jeho dosažitelný pracovní prostor, použijte před touto funkcí funkci canArmReachInc.

Dostupná funkce

bool moveInc(
  double x,
  double y,
  double z,
  bool   waitForCompletion = true
);

Parametr

Typ

Popis

x

double

Vzdálenost, o kterou se má posunout podél osy x v milimetrech.

y

double

Vzdálenost, o kterou se má posunout podél osy y v milimetrech.

z

double

Vzdálenost, o kterou se má posunout podél osy z v milimetrech.

waitForCompletion

bool

Volitelné. true (výchozí) čeká na dokončení pohybu, než bude pokračovat. false spustí pohyb a okamžitě pokračuje na další řádek kódu.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno dosáhlo požadované polohy.

  • false — 6osé rameno nedosáhlo požadované polohy nebo waitForCompletion bylo nastaveno na false.

Příklad

// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);

moveEndEffectorTo#

moveEndEffectorTo otáčí koncový efektor 6osého ramene do zadané orientace stáčení, klopení a klopení.

Orientace popisuje, jak se koncový efektor otáčí. yaw otáčí kolem osy z, roll otáčí kolem osy x a pitch otáčí kolem osy y.

Dostupná funkce

bool moveEndEffectorTo(
  double yaw,
  double roll = 0,
  double pitch = 0,
  bool   waitForCompletion = true
);

Parametr

Typ

Popis

yaw

double

Cílový úhel stáčení ve stupních.

roll

double

Volitelné. Úhel náklonu cíle ve stupních. Výchozí hodnota je 0.

pitch

double

Volitelné. Cílový úhel sklonu ve stupních. Výchozí hodnota je 0.

waitForCompletion

bool

Volitelné. true (výchozí) čeká na dokončení pohybu, než bude pokračovat. false spustí pohyb a okamžitě pokračuje na další řádek kódu.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Koncový efektor dosáhl cílové orientace.

  • false — Koncový efektor nedosáhl cílové orientace nebo waitForCompletion byl nastaven na false.

Příklad

// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);

moveEndEffectorInc#

moveEndEffectorInc otočí koncový efektor 6osého ramene o zadanou hodnotu stáčení, klopení a stoupání oproti jeho aktuální orientaci.

Tuto funkci použijte k otočení vzhledem k aktuálnímu stáčení, klopení nebo stoupání koncového efektoru.

Dostupná funkce

bool moveEndEffectorInc(
  double yaw,
  double roll = 0,
  double pitch = 0,
  bool   waitForCompletion = true
);

Parametr

Typ

Popis

yaw

double

Změna stáčení ve stupních.

roll

double

Volitelné. Změna náklonu ve stupních. Výchozí hodnota je 0.

pitch

double

Volitelné. Změna výšky tónu ve stupních. Výchozí hodnota je 0.

waitForCompletion

bool

Volitelné. true (výchozí) čeká na dokončení pohybu, než bude pokračovat. false spustí pohyb a okamžitě pokračuje na další řádek kódu.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Koncový efektor dosáhl požadované orientace.

  • false — Koncový efektor nedosáhl požadované orientace nebo waitForCompletion byl nastaven na false.

Příklad

// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);

Mutátory#

setSpeed#

setSpeed nastavuje rychlost pohybu používanou 6osým ramenem.

Dostupná funkce

void setSpeed(uint32_t speed);

Parametr

Typ

Popis

speed

uint32_t

Rychlost, s jakou by se mělo 6osé rameno pohybovat, v milimetrech za sekundu.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);

setEndEffectorType#

setEndEffectorType nastavuje typ koncového efektoru připojeného k 6osému ramenu.

Při změně typu koncového efektoru šestiosé rameno automaticky upraví svůj z-offset tak, aby odpovídal vybranému nástroji.

Dostupná funkce

bool setEndEffectorType(
  endEffectorType type,
  bool            waitForCompletion = true
);

Parametr

Typ

Popis

type

endEffectorType

Nástroj připojený k 6osému ramenu: magnet (nástroj pro snímání magnetu) nebo pen (držák pera).

waitForCompletion

bool

Volitelné. true (výchozí) čeká na dokončení změny, než bude pokračovat. false spustí změnu a okamžitě pokračuje na další řádek kódu.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Požadovaný typ byl nastaven.

  • false — Požadovaný typ nebyl nastaven, nebo waitForCompletion byl nastaven na false.

Příklad

// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);

setEndEffectorMagnet#

setEndEffectorMagnet povoluje nebo zakazuje nástroj pro snímání magnetu.

Dostupná funkce

void setEndEffectorMagnet(bool enabled);

Parametr

Typ

Popis

enabled

bool

true umožňuje magnetu zvedat a držet předměty. false magnet deaktivuje a upustí jakýkoli držený předmět.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);

setPenOffset#

setPenOffset nastavuje posunutí osy z použité, když je nástroj Držák pera připojen k 6osému ramenu.

Před použitím této funkce nastavte typ koncového efektoru na pen Pokud není vybrán nástroj Držák pera, tato funkce nemá žádný účinek.

Offset pera je vzdálenost od horní části držáku pera k hrotu fixu stíratelného za sucha. Kladná hodnota z posouvá offset směrem nahoru od bodu uchycení nástroje.

Dostupná funkce

void setPenOffset(double zOffset);

Parametr

Typ

Popis

zOffset

double

Hodnota odsazení pera v milimetrech.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);

setControlStop#

setControlStop povoluje nebo zakazuje zastavení řízení pro 6osé rameno.

Když je aktivováno zastavení řízení, 6osé rameno okamžitě zastaví pohyb a zabrání dalším lineárním nebo kloubovým pohybům.

Dostupná funkce

void setControlStop(bool state = true);

Parametr

Typ

Popis

state

bool

Volitelné. true (výchozí) povoluje zastavení řízení a zabraňuje dalším lineárním nebo kloubovým pohybům. false zakazuje zastavení řízení.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();

setTimeout#

setTimeout nastavuje hodnotu časového limitu použitého při pohybu 6osého ramene.

Pokud pohyb nedokončí před uplynutím časového limitu, projekt pokračuje na další řádek kódu.

Dostupná funkce

void setTimeout(
  int32_t   timeout,
  timeUnits units
);

Parametr

Typ

Popis

timeout

int32_t

Nová hodnota časového limitu.

units

timeUnits

Časová jednotka: sec (sekundy) nebo msec (milisekundy).

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);

Gettery#

isDone#

isDone vrací, zda se pohyb 6osého ramene dokončil.

Tato funkce je užitečná po volání funkce pro přesun s parametrem waitForCompletion nastaveným na false.

Dostupná funkce

bool isDone();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Pohyb 6osého ramene byl dokončen.

  • false — 6osé rameno se stále pohybuje.

Příklad

// Display the 6-Axis Arm's y-position while it moves
Arm.moveTo(-100, 200, 100, false);

while (!Arm.isDone()) {
  Brain.Screen.print(Arm.getY());
  Brain.Screen.newLine();
  wait(0.25, seconds);
}

isCrashed#

isCrashed vrací, zda došlo k havárii 6osého ramene během pohybu.

Pokud je detekována havárie, 6osé rameno zastaví pohyb motoru a může se zdát, že se zablokovalo. To snižuje namáhání a pomáhá chránit motory před náhodným poškozením.

Dostupná funkce

bool isCrashed();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Došlo k havárii 6osého ramene.

  • false — 6osé rameno se nezhroutilo.

Příklad

// Quickly move to a new location
Arm.setSpeed(100);
Arm.moveTo(-40, 250, 40, false);

// While moving, check for a crash
while (true) {
  if (Arm.isCrashed()) {
    // Indicate a crash with the Signal Tower and Brain screen
    Brain.Screen.print("Crash Detected");
    SignalTower6.setColor(signaltower::green, signaltower::off);
    SignalTower6.setColor(signaltower::red, signaltower::on);
    break;
  }

  wait(5, msec);
}

getX#

Funkce getX vrací aktuální pozici x koncového efektoru v milimetrech.

Tato funkce slouží k přečtení aktuální polohy koncového efektoru podél osy x.

Dostupná funkce

float getX();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje pozici x koncového efektoru v milimetrech.

Příklad

// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());

getY#

getY vrací aktuální pozici y koncového efektoru v milimetrech.

Tato funkce slouží k přečtení aktuální polohy koncového efektoru podél osy y.

Dostupná funkce

float getY();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje pozici y koncového efektoru v milimetrech.

Příklad

// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());

getZ#

getZ vrací aktuální polohu z koncového efektoru v milimetrech.

Tato funkce slouží k přečtení aktuální polohy koncového efektoru podél osy z.

Dostupná funkce

float getZ();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje pozici z koncového efektoru v milimetrech.

Příklad

// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());

getYaw#

getYaw vrací aktuální natočení koncového efektoru ve stupních.

Dostupná funkce

float getYaw();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje aktuální natočení koncového efektoru ve stupních.

Příklad

// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());

getRoll#

getRoll vrací aktuální natočení koncového efektoru ve stupních.

Dostupná funkce

float getRoll();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje aktuální natočení koncového efektoru ve stupních.

Příklad

// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());

getPitch#

getPitch vrací aktuální sklon koncového efektoru ve stupních.

Dostupná funkce

float getPitch();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací hodnotu float která představuje aktuální sklon koncového efektoru ve stupních.

Příklad

// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());

canArmReachTo#

canArmReachTo vrací, zda 6osé rameno může pohybovat koncovým efektorem na zadanou souřadnici x, y a z.

Tuto funkci použijte ke kontrole cílové pozice před použitím moveTo.

Dostupná funkce

bool canArmReachTo(
  double x,
  double y,
  double z
);

Parametr

Typ

Popis

x

double

Souřadnice x cílové polohy v milimetrech.

y

double

Souřadnice y cílové polohy v milimetrech.

z

double

Souřadnice z cílové polohy v milimetrech.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno může dosáhnout požadované polohy.

  • false — 6osé rameno nemůže dosáhnout požadované polohy.

Příklad

// Move the 6-Axis Arm to (100, -20, 50) if it can reach
if (Arm.canArmReachTo(100, -20, 50)) {
  Arm.moveTo(100, -20, 50);
}

canArmReachInc#

canArmReachInc vrací, zda 6osé rameno může posunout koncový efektor o zadanou vzdálenost x, y a z od jeho aktuální polohy.

Tuto funkci použijte ke kontrole relativního pohybu před použitím moveInc.

Dostupná funkce

bool canArmReachInc(
  double x,
  double y,
  double z
);

Parametr

Typ

Popis

x

double

Vzdálenost, o kterou se má posunout podél osy x v milimetrech.

y

double

Vzdálenost, o kterou se má posunout podél osy y v milimetrech.

z

double

Vzdálenost, o kterou se má posunout podél osy z v milimetrech.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno může provést požadovaný pohyb.

  • false — 6osé rameno nemůže provést požadovaný pohyb.

Příklad

// Increment the 6-Axis Arm 100 mm along the x-axis if possible
if (Arm.canArmReachInc(100, 0, 0)) {
  Arm.moveInc(100, 0, 0);
}

canEndEffectorReachTo#

canEndEffectorReachTo vrací, zda se koncový efektor může otáčet do zadané orientace stáčení, klopení a stoupání.

Tuto funkci použijte ke kontrole orientace cíle před použitím moveEndEffectorTo.

Dostupná funkce

bool canEndEffectorReachTo(
  double yaw,
  double roll = 0,
  double pitch = 0
);

Parametr

Typ

Popis

yaw

double

Cílový úhel stáčení ve stupních.

roll

double

Volitelné. Úhel náklonu cíle ve stupních. Výchozí hodnota je 0.

pitch

double

Volitelné. Cílový úhel sklonu ve stupních. Výchozí hodnota je 0.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Koncový efektor může dosáhnout požadované orientace.

  • false — Koncový efektor nemůže dosáhnout požadované orientace.

Příklad

// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
  Arm.moveEndEffectorTo(0, 90, 0);
}

canEndEffectorReachInc#

canEndEffectorReachInc vrací, zda se koncový efektor může otočit o zadanou hodnotu stáčení, klopení a stoupání od své aktuální orientace.

Tuto funkci použijte ke kontrole relativní orientace pohybu před použitím moveEndEffectorInc.

Dostupná funkce

bool canEndEffectorReachInc(
  double yaw,
  double roll = 0,
  double pitch = 0
);

Parametr

Typ

Popis

yaw

double

Změna stáčení ve stupních.

roll

double

Volitelné. Změna náklonu ve stupních. Výchozí hodnota je 0.

pitch

double

Volitelné. Změna výšky tónu ve stupních. Výchozí hodnota je 0.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — Koncový efektor může provést požadovanou rotaci.

  • false — Koncový efektor nemůže provést požadovanou rotaci.

Příklad

// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
  Arm.moveEndEffectorInc(0, 0, 10);
}

isConnected#

isConnected vrací, zda je 6osé rameno připojeno k EXP Brainu.

Toto je funkce kompatibility, která vrací stejnou hodnotu jako installed.

Dostupná funkce

bool isConnected();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno je připojeno k EXP Brainu.

  • false — 6osé rameno není připojeno k EXP Brainu.

Příklad

// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());

timestamp#

timestamp vrací časové razítko posledního přijatého stavového paketu z 6osého ramene.

Dostupná funkce

uint32_t timestamp();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrátí časové razítko posledního stavového paketu jako uint32_t v milisekundách.

installed#

installed vrací, zda je 6osé rameno připojeno.

Dostupná funkce

bool installed();

Parametry

Tato funkce nemá parametry.

Návratová hodnota

Vrací booleovskou hodnotu.

  • true — 6osé rameno je připojeno.

  • false — 6osé rameno není připojeno.

Zpětná volání#

controlStopped#

controlStopped registruje funkci, která se spustí, když je povoleno zastavení řízení.

Dostupná funkce

void controlStopped(void (* callback)(void));

Parametr

Typ

Popis

callback

void (*)(void)

Funkce, která se spustí, když je povoleno zastavení řízení.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
  Brain.Screen.print("Arm control stopped");
}

int main() {
  vexcodeInit();

  Arm.controlStopped(onControlStopped);
}

crashed#

crashed registruje funkci, která se spustí, když 6osé rameno havaruje během pohybu.

Pokud je detekována havárie, 6osé rameno zastaví pohyb motoru a může se zdát, že se zablokovalo. To snižuje namáhání a pomáhá chránit motory před náhodným poškozením.

Dostupná funkce

void crashed(void (* callback)(void));

Parametr

Typ

Popis

callback

void (*)(void)

Funkce, která se spustí, když se 6osé rameno během pohybu zhroutí.

Návratová hodnota

Tato funkce nevrací hodnotu.

Příklad

// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
  Brain.Screen.print("Crash detected");
  SignalTower6.setColor(signaltower::green, signaltower::off);
  SignalTower6.setColor(signaltower::red, signaltower::on);
}

int main() {
  vexcodeInit();

  Arm.crashed(onArmCrashed);
}