CTEアーム#

導入#

arm クラスは、CTE ワークセルで使用される 6 軸アームの制御を提供します。VEX EXP C++ では、6 軸アームはエンドエフェクタを 3 次元空間内の位置に移動したり、エンドエフェクタを回転させたり、移動が可能かどうかを確認したり、マグネットピックアップツールやペンホルダーツールなどのアタッチされたツールを制御したりすることができます。

このページに掲載されている例では、 Armという名前の構成済みの 6 軸アームを使用しています。

建設業者#

arm#

arm 、6軸アームオブジェクトを作成します。

利用可能な機能

arm(int32_t index);

パラメータ

タイプ

説明

index

int32_t

6軸アームが接続されているスマートポートは、 PORTxと表記され、 x はポート番号です。たとえば、 PORT1。

例

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

破壊者#

~arm#

~arm は arm オブジェクトを破壊し、関連するリソースを解放します。

利用可能な機能

~arm();

メンバーの機能#

arm クラスには、以下のメンバ関数が含まれています。

操作 — 6軸アームを所定の位置または向きに移動させます。

  • moveTo — エンドエフェクタを指定された x、y、z 座標に移動します。

  • moveInc — エンドエフェクタを現在の位置から指定された距離だけ移動します。

  • moveEndEffectorTo — エンドエフェクタを指定されたヨー、ロール、ピッチ方向に回転させます。

  • moveEndEffectorInc — エンドエフェクタを指定されたヨー、ロール、ピッチ量だけ回転させます。

ミューテーター — 移動、ツール、およびコントロール設定を構成します。

  • setSpeed — 6軸アームで使用される移動速度を設定します。

  • setEndEffectorType — 6軸アームに取り付けられているエンドエフェクタのタイプを設定します。

  • setEndEffectorMagnet — マグネットピックアップツールを有効または無効にします。

  • setPenOffset — ペンホルダーツールで使用するz軸オフセットを設定します。

  • setControlStop — 6軸アームの制御停止を有効または無効にします。

  • setTimeout — 6軸アームの動作機能で使用されるタイムアウトを設定します。

ゲッター — 動作状態、位置、向き、接続値を返します。

  • isDone — 6軸アームの移動が完了したかどうかを返します。

  • isCrashed — 6軸アームが移動中に衝突したかどうかを返します。

  • getX — エンドエフェクタの現在の x 位置を返します。

  • getY — エンドエフェクタの現在の y 位置を返します。

  • getZ — エンドエフェクタの現在のz位置を返します。

  • getYaw — エンドエフェクタの現在のヨー角を返します。

  • getRoll — エンドエフェクタの現在のロールを返します。

  • getPitch — エンドエフェクタの現在のピッチを返します。

  • canArmReachTo — 6軸アームが指定された位置に到達できるかどうかを返します。

  • canArmReachInc — 6軸アームが指定された距離だけ移動できるかどうかを返します。

  • canEndEffectorReachTo — エンドエフェクタが指定された向きに到達できるかどうかを返します。

  • canEndEffectorReachInc — エンドエフェクタが指定された量だけ回転できるかどうかを返します。

  • isConnected — 6軸アームがEXPブレインに接続されているかどうかを返します。

  • timestamp — 6軸アームから最後に受信したステータスパケットのタイムスタンプを返します。

  • installed — 6軸アームが接続されているかどうかを返します。

コールバック — アームイベントが発生したときに関数を実行します。

  • controlStopped — コントロールストップが有効になったときに実行する関数を登録します。

  • crashed — クラッシュが検出されたときに実行される関数を登録します。

行動#

moveTo#

moveTo は、6軸アームを指定されたx、y、z座標に移動します。

x、y、z座標は、エンドエフェクタの3次元空間における位置を表します。ターゲット位置が6軸アームの到達可能な作業空間外にある可能性がある場合は、この関数の前にcanArmReachToを使用してください。

利用可能な機能

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

パラメータ

タイプ

説明

x

double

目標位置のx座標(ミリメートル単位)。

y

double

目標位置のy座標(ミリメートル単位)。

z

double

目標位置のz座標(ミリメートル単位)。

waitForCompletion

bool

オプション。0 true (デフォルト) 動作が完了するまで待機してから続行します。2 false 動作を開始し、すぐに次のコード行に進みます。

戻り値

ブール値を返します。

  • true — 6軸アームが目標位置に到達しました。

  • false — 6軸アームが目標位置に到達しなかったか、 waitForCompletion が falseに設定されました。

例

// 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 は、6軸アームを現在の位置から指定された距離だけx、y、z軸に沿って移動させます。

この関数を使用して、エンドエフェクタの現在の位置を基準に移動させます。移動によって6軸アームが到達可能な作業空間外になる可能性がある場合は、この関数の前にcanArmReachIncを使用してください。

利用可能な機能

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

パラメータ

タイプ

説明

x

double

x軸方向に移動する距離(ミリメートル単位)。

y

double

y軸方向に移動する距離(ミリメートル単位)。

z

double

z軸方向に移動する距離(ミリメートル単位)。

waitForCompletion

bool

オプション。0 true (デフォルト) 動作が完了するまで待機してから続行します。2 false 動作を開始し、すぐに次のコード行に進みます。

戻り値

ブール値を返します。

  • true — 6軸アームが要求された位置に到達しました。

  • false — 6軸アームが要求された位置に到達しなかったか、 waitForCompletion falseに設定されました。

例

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

moveEndEffectorTo#

moveEndEffectorTo は、6軸アームのエンドエフェクタを、指定されたヨー、ロール、ピッチ方向に回転させます。

方向は yaw z 軸を中心に回転し、 roll x 軸を中心に回転し、 pitch y 軸を中心に回転します。

利用可能な機能

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

パラメータ

タイプ

説明

yaw

double

目標ヨー角(度)。

roll

double

オプション。目標ロール角度(度)。デフォルトは 0です。

pitch

double

オプション。目標ピッチ角(度)。デフォルトは 0です。

waitForCompletion

bool

オプション。0 true (デフォルト) 動作が完了するまで待機してから続行します。2 false 動作を開始し、すぐに次のコード行に進みます。

戻り値

ブール値を返します。

  • true — エンドエフェクタが目標の向きに到達しました。

  • false — エンドエフェクタが目標の向きに到達しなかったか、 waitForCompletion が falseに設定されました。

例

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

moveEndEffectorInc#

moveEndEffectorInc は、6軸アームのエンドエフェクタを現在の向きから指定されたヨー、ロール、ピッチ量だけ回転させます。

この機能を使用して、エンドエフェクタの現在のヨー、ロール、またはピッチを基準として回転します。

利用可能な機能

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

パラメータ

タイプ

説明

yaw

double

ヨー角の変化(度数)。

roll

double

オプション。ロール角の変化(度)。デフォルト値は 0です。

pitch

double

オプション。ピッチの変化(度数)。デフォルト値は 0です。

waitForCompletion

bool

オプション。0 true (デフォルト) 動作が完了するまで待機してから続行します。2 false 動作を開始し、すぐに次のコード行に進みます。

戻り値

ブール値を返します。

  • true — エンドエフェクタが要求された向きに到達しました。

  • false — エンドエフェクタが要求された向きに到達しなかったか、 waitForCompletion falseに設定されました。

例

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

変異誘発者#

setSpeed#

setSpeed は、6軸アームが使用する移動速度を設定します。

利用可能な機能

void setSpeed(uint32_t speed);

パラメータ

タイプ

説明

speed

uint32_t

6軸アームが移動する速度(ミリメートル/秒)。

戻り値

この関数は値を返しません。

例

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

setEndEffectorType#

setEndEffectorType は、6軸アームに取り付けられるエンドエフェクタのタイプを設定します。

エンドエフェクタの種類が変更されると、6軸アームは選択されたツールに合わせてZオフセットを自動的に調整します。

利用可能な機能

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

パラメータ

タイプ

説明

type

endEffectorType

6軸アームに取り付けられるツール: magnet (マグネットピックアップツール)または pen (ペンホルダーツール)。

waitForCompletion

bool

オプション。0 true (デフォルト) 変更が完了するまで待機してから続行します。2 false 変更を開始し、すぐに次のコード行に進みます。

戻り値

ブール値を返します。

  • true — 要求されたタイプが設定されました。

  • false — 要求されたタイプが設定されていないか、 waitForCompletion falseに設定されています。

例

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

setEndEffectorMagnet#

setEndEffectorMagnet はマグネットピックアップツールを有効または無効にします。

利用可能な機能

void setEndEffectorMagnet(bool enabled);

パラメータ

タイプ

説明

enabled

bool

true 磁石が物体を拾い上げて保持します。2 false 磁石が無効になり、保持している物体が落下します。

戻り値

この関数は値を返しません。

例

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

setPenOffset#

setPenOffset は、ペンホルダーツールが 6 軸アームに取り付けられているときに使用される z 軸オフセットを設定します。

この機能を使用する前に、エンドエフェクタタイプを pen に設定してください。ペンホルダーツールが選択されていない場合、この機能は効果がありません。

ペンオフセットとは、ペンホルダーツールの先端からホワイトボードマーカーの先端までの距離のことです。z軸の値が正の場合、オフセットはツールの取り付け位置から上方向に移動します。

利用可能な機能

void setPenOffset(double zOffset);

パラメータ

タイプ

説明

zOffset

double

ペンオフセット値(ミリメートル単位)。

戻り値

この関数は値を返しません。

例

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

setControlStop#

setControlStop は、6軸アームの制御停止を有効または無効にします。

制御停止が有効になると、6軸アームは直ちに動作を停止し、それ以上の直線運動や関節運動を防止します。

利用可能な機能

void setControlStop(bool state = true);

パラメータ

タイプ

説明

state

bool

オプション true (デフォルト) は制御停止を有効にし、それ以上の直線運動または関節運動を防止します。2 false 制御停止を無効にします。

戻り値

この関数は値を返しません。

例

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

setTimeout#

setTimeout は、6軸アームを移動する際に使用されるタイムアウト値を設定します。

タイムアウト時間内に動作が完了しない場合、プロジェクトは次のコード行に進みます。

利用可能な機能

void setTimeout(
  int32_t   timeout,
  timeUnits units
);

パラメータ

タイプ

説明

timeout

int32_t

新しいタイムアウト値。

units

timeUnits

時間の単位: sec (秒)または msec (ミリ秒)。

戻り値

この関数は値を返しません。

例

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

ゲッター#

isDone#

isDone 6軸アームの移動が完了したかどうかを返します。

This function is useful after a movement function is called with waitForCompletion set to false.

利用可能な機能

bool isDone();

パラメータ

この関数には引数がありません。

戻り値

ブール値を返します。

  • true — 6軸アームの動作が完了しました。

  • false — 6軸アームはまだ動いています。

例

// 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 は、6軸アームが移動中に衝突したかどうかを返します。

衝突が検出されると、6軸アームはモーターの動きを停止し、一時的に力が抜けたように見えることがあります。これにより、負荷が軽減され、モーターが偶発的な損傷を受けるのを防ぎます。

利用可能な機能

bool isCrashed();

パラメータ

この関数には引数がありません。

戻り値

ブール値を返します。

  • true — 6軸アームがクラッシュしました。

  • false — 6軸アームは衝突していません。

例

// 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#

getX getX は、エンドエフェクタの現在の x 位置をミリメートル単位で返します。

この関数を使用して、エンドエフェクタが現在x軸上のどの位置にあるかを読み取ります。

利用可能な機能

float getX();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタのx座標をミリメートル単位で表す float 浮動小数点数を返します。

例

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

getY#

getY getY は、エンドエフェクタの現在の y 位置をミリメートル単位で返します。

この関数を使用して、エンドエフェクタが現在y軸上のどの位置にあるかを読み取ります。

利用可能な機能

float getY();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタのy座標をミリメートル単位で表す、 float の浮動小数点数を返します。

例

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

getZ#

getZ getZ は、エンドエフェクタの現在の z 位置をミリメートル単位で返します。

この関数を使用して、エンドエフェクタが現在Z軸上のどの位置にあるかを読み取ります。

利用可能な機能

float getZ();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタのz座標をミリメートル単位で表す float の浮動小数点数を返します。

例

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

getYaw#

getYaw 、エンドエフェクタの現在のヨー角を度単位で返します。

利用可能な機能

float getYaw();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタの現在のヨー角(度)を表す float の浮動小数点数を返します。

例

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

getRoll#

getRoll getRoll は、エンドエフェクタの現在のロール角を度単位で返します。

利用可能な機能

float getRoll();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタの現在のロール角(度)を表す、 float 浮動小数点数を返します。

例

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

getPitch#

getPitch getPitch は、エンドエフェクタの現在のピッチを度単位で返します。

利用可能な機能

float getPitch();

パラメータ

この関数には引数がありません。

戻り値

エンドエフェクタの現在のピッチ角(度)を表す float 浮動小数点数を返します。

例

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

canArmReachTo#

canArmReachTo は、6軸アームがエンドエフェクタを指定されたx、y、z座標に移動できるかどうかを返します。

moveTo を使用する前に、この関数を使用してターゲット位置を確認します。

利用可能な機能

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

パラメータ

タイプ

説明

x

double

目標位置のx座標(ミリメートル単位)。

y

double

目標位置のy座標(ミリメートル単位)。

z

double

目標位置のz座標(ミリメートル単位)。

戻り値

ブール値を返します。

  • true — 6軸アームは要求された位置に到達できます。

  • false — 6軸アームは要求された位置に到達できません。

例

// 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 は、6軸アームがエンドエフェクタを現在の位置から指定されたx、y、z距離だけ移動できるかどうかを返します。

moveInc を使用する前に、この関数を使用して相対的な移動を確認します。

利用可能な機能

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

パラメータ

タイプ

説明

x

double

x軸方向に移動する距離(ミリメートル単位)。

y

double

y軸方向に移動する距離(ミリメートル単位)。

z

double

z軸方向に移動する距離(ミリメートル単位)。

戻り値

ブール値を返します。

  • true — 6軸アームは要求された動作を実行できます。

  • false — 6軸アームは要求された動作を実行できません。

例

// 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 は、エンドエフェクタが指定されたヨー、ロール、ピッチ方向に回転できるかどうかを返します。

moveEndEffectorTo を使用する前に、この関数を使用してターゲットの向きを確認します。

利用可能な機能

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

パラメータ

タイプ

説明

yaw

double

目標ヨー角(度)。

roll

double

オプション。目標ロール角度(度)。デフォルトは 0です。

pitch

double

オプション。目標ピッチ角(度)。デフォルトは 0です。

戻り値

ブール値を返します。

  • true — エンドエフェクタは要求された向きに到達できます。

  • false — エンドエフェクタが要求された向きに到達できません。

例

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

canEndEffectorReachInc#

canEndEffectorReachInc は、エンドエフェクタが現在の向きから指定されたヨー、ロール、ピッチ量だけ回転できるかどうかを返します。

moveEndEffectorInc を使用する前に、この関数を使用して相対的な方向移動を確認します。

利用可能な機能

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

パラメータ

タイプ

説明

yaw

double

ヨー角の変化(度数)。

roll

double

オプション。ロール角の変化(度)。デフォルト値は 0です。

pitch

double

オプション。ピッチの変化(度数)。デフォルト値は 0です。

戻り値

ブール値を返します。

  • true — エンドエフェクタは要求された回転を行うことができます。

  • false — エンドエフェクタは要求された回転を行うことができません。

例

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

isConnected#

isConnected は、6軸アームがEXPブレインに接続されているかどうかを返します。

これは互換性関数で、installed と同じ値を返します。

利用可能な機能

bool isConnected();

パラメータ

この関数には引数がありません。

戻り値

ブール値を返します。

  • true — 6軸アームはEXPブレインに接続されています。

  • false — 6軸アームはEXPブレインに接続されていません。

例

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

timestamp#

timestamp 、6軸アームから最後に受信したステータスパケットのタイムスタンプを返します。

利用可能な機能

uint32_t timestamp();

パラメータ

この関数には引数がありません。

戻り値

最後のステータスパケットのタイムスタンプを、ミリ秒単位で uint32_t uint32_t型で返します。

installed#

installed 、6軸アームが接続されているかどうかを返します。

利用可能な機能

bool installed();

パラメータ

この関数には引数がありません。

戻り値

ブール値を返します。

  • true — 6軸アームが接続されています。

  • false — 6軸アームが接続されていません。

コールバック#

controlStopped#

controlStopped 、コントロールストップが有効になったときに実行される関数を登録します。

利用可能な機能

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

パラメータ

タイプ

説明

callback

void (*)(void)

制御停止が有効になったときに実行される関数。

戻り値

この関数は値を返しません。

例

// 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 6 軸アームが移動中にクラッシュしたときに実行される関数を登録します。

衝突が検出されると、6軸アームはモーターの動きを停止し、一時的に力が抜けたように見えることがあります。これにより、負荷が軽減され、モーターが偶発的な損傷を受けるのを防ぎます。

利用可能な機能

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

パラメータ

タイプ

説明

callback

void (*)(void)

6軸アームが動作中に衝突した場合に実行される関数。

戻り値

この関数は値を返しません。

例

// 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);
}