Ramię CTE#
Wstęp#
Klasa arm zapewnia sterowanie ramieniem 6-osiowym używanym w komórce roboczej CTE. W VEX V5 C++ ramię 6-osiowe może przesuwać efektor końcowy do pozycji w przestrzeni trójwymiarowej, obracać efektor końcowy, sprawdzać, czy ruchy są możliwe, oraz sterować dołączonymi narzędziami, takimi jak narzędzie z magnesem lub uchwyt na długopis.
Ramię 6-osiowe nie jest skonfigurowane jako urządzenie w VEXcode V5. Aby użyć go w projekcie VEX V5 C++, należy ręcznie utworzyć obiekt arm w kodzie z portem Smart Port, do którego podłączone jest ramię 6-osiowe.
Przykłady na tej stronie wykorzystują ręcznie skonstruowane ramię 6-osiowe o nazwie Arm.
Konstruktorzy#
arm#
arm tworzy obiekt ramienia 6-osiowego.
Dostępna funkcja
arm(int32_t index);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Port Smart Port, do którego podłączony jest 6-osiowy uchwyt, zapisany jako |
Przykład
// Create a 6-Axis Arm named Arm on Port 1
arm Arm = arm(PORT1);
Burzyciel#
~arm#
~arm niszczy obiekt arm i uwalnia powiązane zasoby.
Dostępna funkcja
~arm();
Funkcje członkowskie#
Klasa arm zawiera następujące funkcje członkowskie:
Działania — przesuwanie ramienia 6-osiowego do różnych pozycji lub orientacji.
moveTo— Przesuwa efektor końcowy do określonej współrzędnej x, y i z.moveInc— Przesuwa efektor końcowy o określoną odległość od jego bieżącej pozycji.moveEndEffectorTo— Obraca efektor końcowy o określony kąt odchylenia, przechyłu i pochylenia.moveEndEffectorInc— Obraca efektor końcowy o określoną wartość odchylenia, przechyłu i pochylenia.
Mutatory — konfiguracja ustawień ruchu, narzędzi i sterowania.
setSpeed— Ustawia prędkość ruchu używaną przez ramię 6-osiowe.setEndEffectorType— Ustawia typ efektora końcowego przymocowanego do ramienia 6-osiowego.setEndEffectorMagnet— Włącza lub wyłącza narzędzie do odbioru magnesów.setPenOffset— Ustawia przesunięcie osi Z używane z narzędziem uchwytu pióra.setControlStop— Włącza lub wyłącza zatrzymanie sterowania ramieniem 6-osiowym.setTimeout— Ustawia limit czasu używany przez funkcje ruchu ramienia 6-osiowego.
Gettery — zwracają wartości stanu ruchu, pozycji, orientacji i połączenia.
isDone— Zwraca informację, czy ramię 6-osiowe zakończyło ruch.isCrashed— Zwraca informację, czy ramię 6-osiowe uległo awarii podczas ruchu.getX— Zwraca aktualną pozycję x efektora końcowego.getY— Zwraca aktualną pozycję y efektora końcowego.getZ— Zwraca aktualną pozycję z efektora końcowego.getYaw— Zwraca aktualne odchylenie efektora końcowego.getRoll— Zwraca aktualny obrót efektora końcowego.getPitch— Zwraca aktualny skok efektora końcowego.canArmReachTo— Zwraca informację, czy ramię 6-osiowe może osiągnąć określoną pozycję.canArmReachInc— Zwraca informację, czy ramię 6-osiowe może się poruszać o określoną odległość.canEndEffectorReachTo— Zwraca informację, czy efektor końcowy może osiągnąć określoną orientację.canEndEffectorReachInc— Zwraca informację, czy efektor końcowy może obracać się o określoną wartość.isConnected— Zwraca informację, czy ramię 6-osiowe jest połączone z mózgiem V5.timestamp— Zwraca znacznik czasu ostatniego odebranego pakietu stanu z ramienia 6-osiowego.zainstalowano
installed— Zwraca informację, czy ramię 6-osiowe jest podłączone.
Wywołania zwrotne — uruchamiają funkcje, gdy wystąpią zdarzenia arm.
controlStopped— Rejestruje funkcję, która ma zostać uruchomiona po włączeniu zatrzymania sterowania.crashed— Rejestruje funkcję, która zostanie uruchomiona po wykryciu awarii.
Akcje#
moveTo#
moveTo przesuwa ramię 6-osiowe do określonej współrzędnej x, y i z.
Współrzędne x, y i z opisują położenie efektora końcowego w przestrzeni trójwymiarowej. Przed tą funkcją należy użyć canArmReachTo, jeśli położenie docelowe może znajdować się poza dostępnym obszarem roboczym ramienia 6-osiowego.
Dostępna funkcja
bool moveTo(
double x,
double y,
double z,
bool waitForCompletion = true
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Współrzędna x pozycji docelowej w milimetrach. |
|
|
Współrzędna y pozycji docelowej w milimetrach. |
|
|
Współrzędna z pozycji docelowej w milimetrach. |
|
|
Opcjonalnie. |
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe osiągnęło pozycję docelową.false— Ramię 6-osiowe nie osiągnęło pozycji docelowej lubwaitForCompletionzostało ustawione nafalse.
Przykłady
// 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 przesuwa ramię 6-osiowe o określoną odległość od jego bieżącej pozycji wzdłuż osi x, y i z.
Użyj tej funkcji, aby przesunąć się względem miejsca, w którym obecnie znajduje się efektor końcowy. Użyj canArmReachInc przed tą funkcją, jeśli ruch może umieścić ramię 6-osiowe poza jego dostępnym obszarem roboczym.
Dostępna funkcja
bool moveInc(
double x,
double y,
double z,
bool waitForCompletion = true
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Odległość, jaką należy pokonać wzdłuż osi x, podana w milimetrach. |
|
|
Odległość, jaką należy pokonać wzdłuż osi Y, podana w milimetrach. |
|
|
Odległość, jaką należy pokonać wzdłuż osi Z, podana w milimetrach. |
|
|
Opcjonalnie. |
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe osiągnęło żądaną pozycję.false— Ramię 6-osiowe nie osiągnęło żądanej pozycji lubwaitForCompletionzostało ustawione nafalse.
Przykład
// Move the 6-Axis Arm 100 millimeters along the y-axis
Arm.moveInc(0, 100, 0);
moveEndEffectorTo#
moveEndEffectorTo obraca efektor końcowy ramienia 6-osiowego o określony kąt odchylenia, przechyłu i pochylenia.
Orientacja opisuje sposób obracania efektora końcowego. yaw oznacza obrót wokół osi z, roll oznacza obrót wokół osi x, a pitch.
Dostępna funkcja
bool moveEndEffectorTo(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Docelowy kąt odchylenia w stopniach. |
|
|
Opcjonalnie. Docelowy kąt przechyłu w stopniach. Wartość domyślna to |
|
|
Opcjonalnie. Docelowy kąt nachylenia w stopniach. Wartość domyślna to |
|
|
Opcjonalnie. |
Wartość zwracana
Zwraca wartość logiczną.
true— Efektor końcowy osiągnął orientację docelową.false— Efektor końcowy nie osiągnął orientacji docelowej lubwaitForCompletionzostało ustawione nafalse.
Przykład
// Rotate the end effector to 90 degrees of roll
Arm.moveEndEffectorTo(0, 90, 0);
moveEndEffectorInc#
moveEndEffectorInc obraca efektor końcowy ramienia 6-osiowego o określoną wartość odchylenia, przechyłu i pochylenia od jego bieżącej orientacji.
Użyj tej funkcji, aby obrócić się względem aktualnego odchylenia, pochylenia lub pochylenia efektora końcowego.
Dostępna funkcja
bool moveEndEffectorInc(
double yaw,
double roll = 0,
double pitch = 0,
bool waitForCompletion = true
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Zmiana odchylenia w stopniach. |
|
|
Opcjonalnie. Zmiana przechyłu w stopniach. Wartość domyślna to |
|
|
Opcjonalnie. Zmiana wysokości dźwięku w stopniach. Domyślnie |
|
|
Opcjonalnie. |
Wartość zwracana
Zwraca wartość logiczną.
true— Efektor końcowy osiągnął żądaną orientację.false— Efektor końcowy nie osiągnął żądanej orientacji lubwaitForCompletionzostało ustawione nafalse.
Przykład
// Rotate the end effector -50 degrees in pitch
Arm.moveEndEffectorInc(0, 0, -50);
Mutatory#
setSpeed#
setSpeed ustawia prędkość ruchu używaną przez ramię 6-osiowe.
Dostępna funkcja
void setSpeed(uint32_t speed);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Prędkość, z jaką powinno poruszać się ramię 6-osiowe, w milimetrach na sekundę. |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Set the 6-Axis Arm movement speed
Arm.setSpeed(100);
setEndEffectorType#
setEndEffectorType ustawia typ efektora końcowego przymocowanego do ramienia 6-osiowego.
Po zmianie typu chwytaka ramię 6-osiowe automatycznie dostosowuje przesunięcie w osi Z do wybranego narzędzia.
Dostępna funkcja
bool setEndEffectorType(
endEffectorType type,
bool waitForCompletion = true
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Narzędzie przymocowane do ramienia 6-osiowego: |
|
|
Opcjonalnie. |
Wartość zwracana
Zwraca wartość logiczną.
true— Żądany typ został ustawiony.false— Żądany typ nie został ustawiony lubwaitForCompletionzostał ustawiony nafalse.
Przykład
// Set the end effector type to the Magnet Pickup Tool
Arm.setEndEffectorType(magnet);
setEndEffectorMagnet#
setEndEffectorMagnet włącza lub wyłącza narzędzie do pomiaru magnesu.
Dostępna funkcja
void setEndEffectorMagnet(bool enabled);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
|
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Pick up objects and then drop them
Arm.setEndEffectorType(magnet);
Arm.setEndEffectorMagnet(true);
wait(2, seconds);
Arm.setEndEffectorMagnet(false);
setPenOffset#
setPenOffset ustawia przesunięcie osi Z używane, gdy uchwyt na pióro jest przymocowany do ramienia 6-osiowego.
Przed użyciem tej funkcji ustaw typ efektora końcowego na pen . Jeśli narzędzie uchwytu pióra nie jest wybrane, ta funkcja nie będzie działać.
Przesunięcie pióra to odległość od górnej części uchwytu pióra do końcówki markera suchościeralnego. Dodatnia wartość osi Z przesuwa przesunięcie w górę od punktu mocowania narzędzia.
Dostępna funkcja
void setPenOffset(double zOffset);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Wartość przesunięcia pióra w milimetrach. |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Set the end effector type to the Pen Holder Tool and set the pen offset
Arm.setEndEffectorType(pen);
Arm.setPenOffset(25);
setControlStop#
setControlStop włącza lub wyłącza zatrzymanie sterowania ramieniem 6-osiowym.
Po włączeniu zatrzymania sterowania ramię 6-osiowe natychmiast zatrzymuje ruch i zapobiega dalszym ruchom liniowym lub przegubowym.
Dostępna funkcja
void setControlStop(bool state = true);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Opcjonalnie. |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Stop the 6-Axis Arm and prevent further movement
Arm.setControlStop();
setTimeout#
setTimeout ustawia wartość limitu czasu używaną podczas przesuwania ramienia 6-osiowego.
Jeśli ruch nie zakończy się przed upływem limitu czasu, projekt przechodzi do następnego wiersza kodu.
Dostępna funkcja
void setTimeout(
int32_t timeout,
timeUnits units
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Nowa wartość limitu czasu. |
|
|
Jednostka czasu: |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Set the 6-Axis Arm timeout to 2 seconds
Arm.setTimeout(2, sec);
Getters#
isDone#
isDone zwraca informację o tym, czy ramię 6-osiowe zakończyło ruch.
Funkcja ta jest użyteczna po wywołaniu funkcji ruchu z wartością waitForCompletion ustawioną na false.
Dostępna funkcja
bool isDone();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe zakończyło ruch.false— Ramię 6-osiowe nadal się porusza.
Przykład
// 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 zwraca informację, czy ramię 6-osiowe uległo awarii podczas ruchu.
W przypadku wykrycia zderzenia, ramię 6-osiowe zatrzymuje ruch silnika i może sprawiać wrażenie bezwładnego. Zmniejsza to obciążenie i pomaga chronić silniki przed przypadkowym uszkodzeniem.
Dostępna funkcja
bool isCrashed();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe uległo awarii.false— Ramię 6-osiowe nie uległo awarii.
Przykład
// 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 Brain screen
Brain.Screen.print("Crash Detected");
break;
}
wait(5, msec);
}
getX#
getX zwraca aktualną pozycję x efektora końcowego w milimetrach.
Użyj tej funkcji, aby odczytać aktualne położenie efektora końcowego na osi x.
Dostępna funkcja
float getX();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą położenie x efektora końcowego w milimetrach.
Przykład
// Print the current x position of the 6-Axis Arm
Brain.Screen.print(Arm.getX());
getY#
getY zwraca aktualną pozycję y efektora końcowego w milimetrach.
Użyj tej funkcji, aby odczytać aktualne położenie efektora końcowego na osi Y.
Dostępna funkcja
float getY();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą położenie y efektora końcowego w milimetrach.
Przykład
// Print the current y position of the 6-Axis Arm
Brain.Screen.print(Arm.getY());
getZ#
getZ zwraca aktualną pozycję z efektora końcowego w milimetrach.
Użyj tej funkcji, aby odczytać aktualne położenie efektora końcowego wzdłuż osi Z.
Dostępna funkcja
float getZ();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą położenie z efektora końcowego w milimetrach.
Przykład
// Print the current z position of the 6-Axis Arm
Brain.Screen.print(Arm.getZ());
getYaw#
getYaw zwraca aktualne odchylenie efektora końcowego w stopniach.
Dostępna funkcja
float getYaw();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą bieżące odchylenie efektora końcowego w stopniach.
Przykład
// Print the current yaw of the end effector
Brain.Screen.print(Arm.getYaw());
getRoll#
getRoll zwraca aktualny obrót efektora końcowego w stopniach.
Dostępna funkcja
float getRoll();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą bieżący obrót efektora końcowego w stopniach.
Przykład
// Print the current roll of the end effector
Brain.Screen.print(Arm.getRoll());
getPitch#
getPitch zwraca aktualny skok efektora końcowego w stopniach.
Dostępna funkcja
float getPitch();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość zmiennoprzecinkową float reprezentującą aktualny skok efektora końcowego w stopniach.
Przykład
// Print the current pitch of the end effector
Brain.Screen.print(Arm.getPitch());
canArmReachTo#
canArmReachTo zwraca informację, czy ramię 6-osiowe może przesunąć efektor końcowy do określonej współrzędnej x, y i z.
Użyj tej funkcji, aby sprawdzić pozycję docelową przed użyciem moveTo.
Dostępna funkcja
bool canArmReachTo(
double x,
double y,
double z
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Współrzędna x pozycji docelowej w milimetrach. |
|
|
Współrzędna y pozycji docelowej w milimetrach. |
|
|
Współrzędna z pozycji docelowej w milimetrach. |
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe może osiągnąć żądaną pozycję.false— Ramię 6-osiowe nie może osiągnąć żądanej pozycji.
Przykład
// 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 zwraca informację, czy ramię 6-osiowe może przesunąć efektor końcowy o określoną odległość x, y i z od jego bieżącej pozycji.
Użyj tej funkcji, aby sprawdzić względny ruch przed użyciem moveInc.
Dostępna funkcja
bool canArmReachInc(
double x,
double y,
double z
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Odległość, jaką należy pokonać wzdłuż osi x, podana w milimetrach. |
|
|
Odległość, jaką należy pokonać wzdłuż osi Y, podana w milimetrach. |
|
|
Odległość, jaką należy pokonać wzdłuż osi Z, podana w milimetrach. |
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe może wykonać żądany ruch.false— Ramię 6-osiowe nie może wykonać żądanego ruchu.
Przykład
// 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 zwraca informację, czy efektor końcowy może obracać się do określonego odchylenia, przechyłu i pochylenia.
Użyj tej funkcji, aby sprawdzić orientację celu przed użyciem moveEndEffectorTo.
Dostępna funkcja
bool canEndEffectorReachTo(
double yaw,
double roll = 0,
double pitch = 0
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Docelowy kąt odchylenia w stopniach. |
|
|
Opcjonalnie. Docelowy kąt przechyłu w stopniach. Wartość domyślna to |
|
|
Opcjonalnie. Docelowy kąt nachylenia w stopniach. Wartość domyślna to |
Wartość zwracana
Zwraca wartość logiczną.
true— Efektor końcowy może osiągnąć żądaną orientację.false— Efektor końcowy nie może osiągnąć żądanej orientacji.
Przykład
// Rotate the end effector to 90 degrees of roll if possible
if (Arm.canEndEffectorReachTo(0, 90, 0)) {
Arm.moveEndEffectorTo(0, 90, 0);
}
canEndEffectorReachInc#
canEndEffectorReachInc zwraca informację, czy efektor końcowy może obracać się o określoną wartość odchylenia, przechyłu i pochylenia od bieżącej orientacji.
Użyj tej funkcji, aby sprawdzić względny ruch orientacji przed użyciem moveEndEffectorInc.
Dostępna funkcja
bool canEndEffectorReachInc(
double yaw,
double roll = 0,
double pitch = 0
);
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Zmiana odchylenia w stopniach. |
|
|
Opcjonalnie. Zmiana przechyłu w stopniach. Wartość domyślna to |
|
|
Opcjonalnie. Zmiana wysokości dźwięku w stopniach. Domyślnie |
Wartość zwracana
Zwraca wartość logiczną.
true— Efektor końcowy może wykonać żądany obrót.false— Efektor końcowy nie może wykonać żądanego obrotu.
Przykład
// Increment the end effector by 10 degrees of pitch if possible
if (Arm.canEndEffectorReachInc(0, 0, 10)) {
Arm.moveEndEffectorInc(0, 0, 10);
}
isConnected#
isConnected zwraca informację, czy ramię 6-osiowe jest połączone z mózgiem V5.
Jest to funkcja zgodności, która zwraca tę samą wartość co installed.
Dostępna funkcja
bool isConnected();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe jest połączone z mózgiem V5.false— Ramię 6-osiowe nie jest połączone z mózgiem V5.
Przykład
// Print whether the 6-Axis Arm is connected
Brain.Screen.print(Arm.isConnected());
timestamp#
timestamp zwraca znacznik czasu ostatniego odebranego pakietu stanu z ramienia 6-osiowego.
Dostępna funkcja
uint32_t timestamp();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca znacznik czasu ostatniego pakietu stanu jako uint32_t w milisekundach.
installed#
installed zwraca informację, czy ramię 6-osiowe jest podłączone.
Dostępna funkcja
bool installed();
Parametry
Ta funkcja nie ma parametrów.
Wartość zwracana
Zwraca wartość logiczną.
true— Ramię 6-osiowe jest podłączone.false— Ramię 6-osiowe nie jest podłączone.
Wywołania zwrotne#
controlStopped#
controlStopped rejestruje funkcję, która jest uruchamiana po włączeniu funkcji zatrzymania sterowania.
Dostępna funkcja
void controlStopped(void (* callback)(void));
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Funkcja uruchamiana po włączeniu funkcji zatrzymania sterowania. |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Called when the 6-Axis Arm is control stopped
void onControlStopped() {
Brain.Screen.print("Arm control stopped");
}
int main() {
Arm.controlStopped(onControlStopped);
}
crashed#
crashed rejestruje funkcję uruchamianą, gdy ramię 6-osiowe ulegnie awarii podczas ruchu.
W przypadku wykrycia zderzenia, ramię 6-osiowe zatrzymuje ruch silnika i może sprawiać wrażenie bezwładnego. Zmniejsza to obciążenie i pomaga chronić silniki przed przypadkowym uszkodzeniem.
Dostępna funkcja
void crashed(void (* callback)(void));
Parametr |
Typ |
Opis |
|---|---|---|
|
|
Funkcja uruchamiana w przypadku, gdy ramię 6-osiowe ulegnie uszkodzeniu podczas ruchu. |
Wartość zwracana
Ta funkcja nie zwraca wartości.
Przykład
// Called when the 6-Axis Arm crashes while moving
void onArmCrashed() {
Brain.Screen.print("Crash detected");
}
int main() {
Arm.crashed(onArmCrashed);
}