慣性センサー#
導入#
inertial クラスは、EXP慣性センサーの制御とデータアクセスに使用されます。EXPは、Brainに内蔵された慣性センサー、またはスマートポートに接続された外部慣性センサーを使用できます。
慣性センサーは、ロボットの移動と旋回を測定します。ジャイロスコープは、方位、回転、ジャイロレート、向きなどの旋回を測定します。加速度計は、x軸、y軸、z軸に沿った加速や減速などの動きの変化を測定します。
クラスコンストラクタ#
inertial(
int32_t index,
turnType dir = turnType::right );
クラスデストラクタ#
Destroys the inertial object and releases associated resources.
~inertial();
パラメータ#
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
オプション。外部慣性センサーが接続されているスマートポート。0 |
|
|
オプション。正の値を返す方向:
|
例#
// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();
// Use an external Inertial Sensor connected to Port 1.
inertial Inertial1 = inertial(PORT1);
メンバーの機能#
inertial クラスには、以下のメンバ関数が含まれます。
heading— センサーが向いている方向を返します。rotation— センサーがどれだけ回転したかを返します。setHeading— センサーの現在の方位を新しい方位値に設定します。setRotation— センサーの現在の回転を新しい回転値に設定します。calibrate— 慣性センサーを校正します。resetHeading— センサーの現在の方位を0度にリセットします。resetRotation— センサーの現在の回転を0度にリセットします。isCalibrating— 慣性センサーが現在キャリブレーション中かどうかを返します。changed— 見出しが変更されたときに呼び出される関数を登録します。installed— 慣性センサーがインストールされているかどうかを返します。acceleration— センサーが選択された軸でどれだけ速く加速または減速しているかを返します。gyroRate— センサーが選択された軸を中心に回転する速度を返します。orientation— 慣性センサーのロール、ピッチ、またはヨー角を返します。collision— 衝突が検出されたときに実行される関数を登録します。setTurnType— 正の値を返す旋回方向を設定します。getTurnType— 正の値を生成する旋回方向を返します。
inertial メンバー関数を呼び出す前に、以下に示すように inertial インスタンスを作成する必要があります。
/* This constructor is required when using VS Code.
Inertial Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Use the Brain's built-in Inertial Sensor.
inertial BrainInertial = inertial();
heading#
慣性センサーの現在の方位角を返します。
方位とは、センサーが向いている方向のことで、0度から359.99度までの角度で表されます。センサーが359.99度を超えて回転すると、方位は0度に戻ります。
Available Functionsdouble heading( rotationUnits units = degrees );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
方位単位:
|
指定された単位でセンサーの現在の方位を表す double を返します。
方位角の値は 0 ~ 359.99 度の範囲でラップされています。
rotationを使用して連続回転値にアクセスします。
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));
rotation#
慣性センサーの現在の回転角度を返します。
回転とは、センサーがどれだけ回転したかを示すものです。方位とは異なり、回転は359.99度を超えて増加したり、0度を下回ったりすることがあります。例えば、右に2回転すると720度の回転になります。0度から左に1回転すると-360度の回転になります。
Available Functionsdouble rotation( rotationUnits units = degrees );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
回転単位:
|
指定された単位での現在の回転を表す、 double 倍精度浮動小数点数を返します。
回転値は連続しており、0度から359.99度の間では折り返しません。折り返された方位値にアクセスするには、
headingを使用します。
// Turn, then show the current rotation
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.rotation(degrees));
setHeading#
方位とは、センサーが向いている方向のことで、0度から359.99度までの度数で表されます。この機能は、慣性センサーの現在の方位を新しい方位値に変更します。
例えば、センサーが右を向いた場合、方位を0度に設定すると、その右向きの位置が新たな0度になります。その後、センサーはその新たな方向に基づいて他の方位を追跡できます。
Available Functionsvoid setHeading( double value, rotationUnits units );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
センサーに設定する方位角の値(度単位)。0~359.99の範囲の値を指定できます。 |
|
|
方位単位:
|
この関数は値を返しません。
Examples// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);
setRotation#
回転とは、センサーがどれだけ回転したかを示す度数です。方位とは異なり、回転は359.99度を超えて増加したり、0度未満に減少したりすることがあります。プロジェクトの開始時には、回転値は0度に設定されます。この機能は、慣性センサーの現在の回転を新しい値に変更します。
例えば、センサーが右に2回転した場合、回転値は720度になります。回転を0度に設定すると、回転値は720度から0度にリセットされます。その後、センサーはその新しい値に基づいて回転を追跡できます。
Available Functionsvoid setRotation( double value, rotationUnits units );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
センサーに設定する回転角度(度数)。整数または小数を指定できます。 |
|
|
The rotation unit:
|
この関数は値を返しません。
Examples// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);
calibrate#
慣性センサーを校正します。
キャリブレーションは、センサーが回転を正確に測定するのに役立ちます。キャリブレーション中はセンサーを動かさないでください。キャリブレーション中にセンサーが動くと、方位、回転、ジャイロレート、および姿勢の値が正しく測定されない可能性があります。
Available Functionsvoid calibrate( );
この関数は引数を受け付けません。
Return Valuesこの関数は値を返しません。
Notesキャリブレーション中は、センサーを動かさないようにしてください。
キャリブレーションが完了したかどうかを判断するには、
isCalibratingを使用します。
resetHeading#
慣性センサーの現在の方位を0度にリセットします。
この機能を使用すると、センサーの現在の方向が新しい0度の方向になります。
Available Functionsvoid resetHeading();
この関数は引数を取りません。
Return Valuesこの関数は値を返しません。
resetRotation#
慣性センサーの現在の回転角度を0度にリセットします。
この機能を使用すると、センサーは新しい0度の回転値から今後の回転を追跡します。
Available Functionsvoid resetRotation();
この関数は引数を取りません。
Return Valuesこの関数は値を返しません。
isCalibrating#
慣性センサーが現在キャリブレーション中かどうかを返します。
Available Functionsbool isCalibrating();
この関数は引数を取りません。
Return Values慣性センサーがキャリブレーション中かどうかを示すブール値を返します。
-
true— The sensor is currently calibrating. -
false— The sensor is not currently calibrating.
changed#
慣性センサーの進行方向の値が変化したときに実行されるコールバック関数を登録します。
Available Functionsvoid changed( void (* callback)(void) );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
見出しの値が変更されたときに呼び出される関数へのポインタ。関数はパラメータを受け取らず、 |
この関数は値を返しません。
Examplesコールバック関数を定義します(
int main()の外側)// Called when the inertial sensor's heading value changes void onHeadingChanged() { Brain.Screen.clearScreen(); Brain.Screen.setCursor(1, 1); Brain.Screen.print("Heading: %.2f", myInertial.heading()); }コールバックを登録する
int main()/* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ int main() { // Turn the robot by hand briefly // to change the robot's heading myInertial.changed(onHeadingChanged); }
installed#
慣性センサーがインストールされ、接続されているかどうかを返します。
Available Functionsbool installed();
この関数は引数を取りません。
Return Values慣性センサーがインストールされ、接続されているかどうかを示すブール値を返します。
-
true— The sensor is connected and responding. -
false— The sensor is not connected or not detected.
acceleration#
加速度とは、センサーが加速または減速する速さのことです。この関数は、選択した軸における慣性センサーの加速度を-4.0Gから4.0Gの範囲で返します。
G 加速度を測定するための単位です。1Gは、静止しているときに重力によって感じる加速度に相当します。値は、選択した軸上の加速度の方向に応じて、正にも負にもなります。
double acceleration( axisType axis );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
加速度を測定する軸:
|
指定された軸に沿った加速度をG(重力単位)で表す double を返します。
加速度の値は
Gの単位で報告されます。
gyroRate#
ジャイロレートとは、慣性センサーの回転速度のことです。この関数は、選択した軸における慣性センサーの現在の回転速度を返します。
センサーがその軸を中心に回転する方向によって、値は正にも負にもなり得る。
Available Functionsdouble gyroRate( axisType axis, velocityUnits units );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
ジャイロレートを返す軸:
|
|
|
ジャイロレート単位:
|
指定された軸に沿った現在の回転速度を、選択された単位で表す double を返します。
// Display the rate of change of rotation while turning in dps
Drivetrain.turn(right);
wait(1, seconds);
Brain.Screen.print(myInertial.gyroRate(zaxis, dps));
Drivetrain.stop();
orientation#
方向とは、慣性センサーが選択した軸に対して現在保持している角度のことです。この関数は、慣性センサーの方向を-180.00度から180.00度の範囲で返します。
選択されたx軸、y軸、またはz軸は、センサーの方向軸のいずれかに対応します。
Available Functionsdouble orientation(
axisType axis,
rotationUnits units );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
方向が返される軸:
|
|
|
The rotation unit:
|
指定された単位で選択された方向角度を表す、 double を返します。
while (true) {
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1,1);
// Show the Inertial Sensor's orientation value
// for roll in degrees
double orient = myInertial.orientation(xaxis, deg);
Brain.Screen.print("%f", orient);
wait(0.1, seconds);
}
collision#
慣性センサーが突然の衝撃や衝突を検出したときに実行されるコールバック関数を登録します。
Available Functionsvoid collision( void (* callback)(axisType, double, double, double) );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
衝突が検出されたときに呼び出される関数へのポインタ。コールバック関数は、次のパラメータを受け入れる必要があります。
void。 |
この関数は値を返しません。
Examplesコールバック関数を定義します(
int main()の外側)// Called when the Inertial Sensor detects a collision void onCollision(axisType axis, double x, double y, double z) { Brain.Screen.print("Collision detected!"); }コールバックを登録する
int main()/* vexcodeInit() is only required when using VEXcode. Remove vexcodeInit() if compiling in VS Code. */ int main() { // Firmly move the robot by hand briefly to simulate // a collision and call the onCollision function myInertial.collision(onCollision); }
setTurnType#
回転方向が正の値を返すセット。
Available Functionsvoid setTurnType( turnType dir );
パラメータ |
タイプ |
説明 |
|---|---|---|
|
|
正の値を返す方向:
|
この関数は値を返しません。
Notesこの関数を呼び出すと、
inertialの構築時に指定されたdir値が上書きされます。
getTurnType#
回転方向が正の値を生成するかどうかを返します。
Available FunctionsturnType getTurnType();
この関数は引数を取りません。
Return ValuesturnType は、どちらの方向が正の値を生成するかを示します。
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
この値は、
inertialオブジェクトの構築 中、またはsetTurnTypeを呼び出すことによって設定されます。