مستشعر القصور الذاتي#

مقدمة#

تُستخدم فئة inertial للتحكم في البيانات والوصول إليها من مستشعر القصور الذاتي المدمج في دماغ IQ (الجيل الثاني). يقيس هذا المستشعر كيفية تحرك الدماغ ودورانه.

يستخدم المستشعر بالقصور الذاتي جزأين للقيام بذلك. يقيس الجيروسكوب الدوران، مثل الاتجاه والدوران ومعدل الدوران والاتجاه. ويقيس مقياس التسارع التغيرات في الحركة، مثل التسارع أو التباطؤ على طول المحاور س، ص، ع.

مُنشئات الفئات#

inertial(
  turnType dir = turnType::right );

مُدمِّر الفئة#

Destroys the inertial object and releases associated resources.

~inertial();

حدود#

المعلمة

يكتب

وصف

dir

turnType

اختياري. الاتجاه الذي يُرجع قيمًا موجبة:

  • right (افتراضي) — الانعطافات إلى اليمين تُرجع قيمًا موجبة.
  • left — الانعطافات إلى اليسار تُرجع قيمًا موجبة.

أمثلة#

// Create the inertial instance
inertial myInertial = inertial(
    right);     // dir

الدوال الأعضاء#

تتضمن الفئة 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 with the IQ (2nd gen) Brain. Replace the values
as needed. */

// Create the inertial instance
inertial myInertial = inertial();

heading#

الاتجاه هو الاتجاه الذي يواجهه المستشعر، ويتم قياسه بالدرجات من 0 إلى 359.99. هذه الدالة تُرجع الاتجاه الحالي للمستشعر.

الاتجاه الابتدائي هو 0 درجة. إذا تجاوز المستشعر 359.99 درجة، فسيعود الاتجاه إلى 0 درجة.

Available Functions
double heading( rotationUnits units = degrees );

Parameters

المعلمة

يكتب

وصف

units

rotationUnits

وحدة الاتجاه:

  • deg / degrees (افتراضي) — درجات
  • turns / rev — دورات

Return Values

يُرجع قيمة double تمثل الاتجاه الحالي للمستشعر بالوحدات المحددة.

Notes
  • تتراوح قيمة الاتجاه بين 0 و359.99 درجة. استخدم rotation للوصول إلى قيمة الدوران المستمر.

Examples
// Turn, then show the current heading
Drivetrain.turnFor(right, 450, degrees);
Brain.Screen.print("%f", myInertial.heading(degrees));

rotation#

يعيد الدوران الحالي للمستشعر بالقصور الذاتي.

الدوران هو مقدار دوران المستشعر. على عكس الاتجاه، يمكن أن يزيد الدوران عن 359.99 درجة أو ينقص عن 0 درجة. على سبيل المثال، الدوران دورتين كاملتين إلى اليمين ينتج عنه دوران مقداره 720 درجة. أما الدوران دورة كاملة واحدة إلى اليسار من 0 درجة فينتج عنه دوران مقداره -360 درجة.

Available Functions
double rotation( rotationUnits units = degrees );

Parameters

المعلمة

يكتب

وصف

units

rotationUnits

وحدة الدوران:

  • deg / degrees (افتراضي) — درجات
  • turns / rev — دورات كاملة

Return Values

تُرجع قيمة double تمثل الدوران الحالي بالوحدات المحددة.

Notes
  • قيمة الدوران متصلة ولا تتغير بين 0 و359.99 درجة. استخدم heading للوصول إلى قيمة العنوان بعد تغيير الزاوية.

Examples
// 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 Functions
void setHeading( double        value,
                 rotationUnits units );

Parameters

المعلمة

يكتب

وصف

value

double

قيمة الاتجاه، بالدرجات، التي يجب ضبطها للمستشعر. يمكن أن تكون هذه القيمة من 0 إلى 359.99.

units

rotationUnits

وحدة التوجيه:

  • deg / degrees — درجات
  • turns / rev — دورات

Return Values

هذه الدالة لا تُرجع قيمة.

Examples
// Turn the robot around
myInertial.setHeading(180, degrees);
Drivetrain.turnToHeading(0, degrees);

setRotation#

يضبط الدوران الحالي لمستشعر القصور الذاتي على قيمة محددة.

الدوران هو مقدار دوران المستشعر. على عكس الاتجاه، يمكن أن يزيد الدوران عن 359.99 درجة أو ينخفض ​​عن 0 درجة.

Available Functions
void setRotation( double        value,
                  rotationUnits units );

Parameters

المعلمة

يكتب

وصف

value

double

قيمة الدوران، بالدرجات، التي يجب ضبطها للمستشعر. يمكن أن تكون هذه القيمة عددًا صحيحًا أو عددًا عشريًا.

units

rotationUnits

وحدة الدوران:

  • deg / degrees — درجات
  • turns / rev — دورات

Return Values

هذه الدالة لا تُرجع قيمة.

Examples
// Turn the robot around
myInertial.setRotation(-180, degrees);
Drivetrain.turnToRotation(0, degrees);

calibrate#

يقوم بمعايرة المستشعر بالقصور الذاتي.

تساعد المعايرة المستشعر على قياس الانعطافات بدقة. حافظ على ثبات المستشعر أثناء المعايرة. إذا تحرك المستشعر أثناء المعايرة، فقد لا تُقاس قيم الاتجاه والدوران ومعدل الدوران الجيروسكوبي والاتجاه بشكل صحيح.

Available Functions
void calibrate( );

Parameters

لا تقبل هذه الدالة أي معلمات.

Return Values

هذه الدالة لا تُرجع قيمة.

Notes
  • يجب أن يبقى المستشعر ثابتًا أثناء عملية المعايرة.

  • استخدم isCalibrating لتحديد متى اكتملت عملية المعايرة.

resetHeading#

يعيد ضبط اتجاه مستشعر القصور الذاتي الحالي إلى 0 درجة.

بعد استخدام هذه الوظيفة، يصبح اتجاه المستشعر الحالي هو الاتجاه الجديد بزاوية 0 درجة.

Available Functions
void resetHeading();

Parameters

لا تأخذ هذه الدالة أي معلمات.

Return Values

هذه الدالة لا تُرجع قيمة.

resetRotation#

يعيد ضبط دوران مستشعر القصور الذاتي الحالي إلى 0 درجة.

بعد استخدام هذه الوظيفة، يقوم المستشعر بتتبع الانعطافات المستقبلية انطلاقاً من قيمة الدوران الجديدة البالغة 0 درجة.

Available Functions
void resetRotation();

Parameters

لا تأخذ هذه الدالة أي معلمات.

Return Values

هذه الدالة لا تُرجع قيمة.

isCalibrating#

يُرجع ما إذا كان مستشعر القصور الذاتي قيد المعايرة حاليًا.

Available Functions
bool isCalibrating();

Parameters

لا تأخذ هذه الدالة أي معلمات.

Return Values

يُرجع قيمة منطقية تشير إلى ما إذا كان مستشعر القصور الذاتي قيد المعايرة أم لا:

  • true — The sensor is currently calibrating.
  • false — The sensor is not currently calibrating.

changed#

يسجل دالة رد نداء يتم تشغيلها عند تغيير قيمة اتجاه مستشعر القصور الذاتي.

Available Functions
void changed( void (* callback)(void) );

Parameters

المعلمة

يكتب

وصف

callback

void (*)(void)

مؤشر إلى دالة سيتم استدعاؤها عند تغيير قيمة العنوان. يجب ألا تأخذ الدالة أي معلمات وأن تُرجع القيمة void

Return Values

هذه الدالة لا تُرجع قيمة.

Examples

عرّف دالة الاستدعاء (خارج نطاق int main())

// Display the heading 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()

int main() {
  // Run onHeadingChanged when the Inertial Sensor's heading value changes.
  myInertial.changed(onHeadingChanged);
}

installed#

يُحدد ما إذا كان مستشعر القصور الذاتي مثبتًا ومتصلًا.

Available Functions
bool installed();

Parameters

لا تأخذ هذه الدالة أي معلمات.

Return Values

يُرجع قيمة منطقية تشير إلى ما إذا كان مستشعر القصور الذاتي مثبتًا ومتصلًا أم لا:

  • true — The sensor is connected and responding.
  • false — The sensor is not connected or not detected.

acceleration#

التسارع هو مدى سرعة تسارع أو تباطؤ المستشعر. تُعيد هذه الدالة تسارع مستشعر القصور الذاتي على المحور المُحدد، من -4.0 G إلى 4.0 G.

وحدة قياس التسارع هي G يمثل 1G التسارع الذي تشعر به من الجاذبية الأرضية وأنت جالس بلا حراك. ويمكن أن تكون القيمة موجبة أو سالبة حسب اتجاه التسارع على المحور المحدد.

Available Functions
double acceleration( axisType axis );

Parameters

المعلمة

يكتب

وصف

axis

axisType

المحاور المستخدمة لقياس التسارع:

  • xaxis
  • yaxis
  • zaxis

Return Values

تُرجع قيمة double تمثل التسارع على طول المحور المحدد بوحدة G (وحدات الجاذبية).

Notes
  • يتم الإبلاغ عن قيم التسارع بوحدات G.

gyroRate#

معدل الدوران هو سرعة دوران مستشعر القصور الذاتي. تُعيد هذه الدالة سرعة الدوران الحالية لمستشعر القصور الذاتي على المحور المحدد.

يمكن أن تكون القيمة موجبة أو سالبة اعتمادًا على اتجاه دوران المستشعر على ذلك المحور.

Available Functions
double gyroRate( axisType      axis,
                 velocityUnits units );

Parameters

المعلمة

يكتب

وصف

axis

axisType

المحور الذي يُعاد منه معدل الدوران:

  • xaxis
  • yaxis
  • zaxis

units

velocityUnits

وحدة معدل الدوران الجيروسكوبي:

  • dps — درجة في الثانية
  • rpm — دورة في الدقيقة

Return Values

تُرجع قيمة double تمثل سرعة الدوران الحالية على طول المحور المحدد بالوحدات المختارة.

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

الاتجاه هو الزاوية الحالية لمستشعر القصور الذاتي على محور الدوران المحدد. تُعيد هذه الدالة الاتجاه الحالي لمستشعر القصور الذاتي للمحور المحدد.

يصف كل من الدوران والانحراف والالتفاف الطرق المختلفة التي يمكن للمستشعر من خلالها أن يميل أو يدور.

Available Functions
double orientation(
  orientationType type,
  rotationUnits   units );

Parameters

المعلمة

يكتب

وصف

type

orientationType

زاوية التوجيه للعودة:

  • pitch
  • roll
  • yaw

units

rotationUnits

وحدة التوجيه:

  • deg / degrees — درجات
  • turns / rev — دورات

Return Values

تُرجع قيمة double تمثل زاوية التوجيه المحددة بالوحدات المحددة.

Examples
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(roll, deg);
  Brain.Screen.print("%f", orient);
  wait(0.1, seconds);
}

collision#

يسجل دالة رد نداء يتم تشغيلها عندما يكتشف المستشعر بالقصور الذاتي تأثيرًا مفاجئًا أو تصادمًا.

Available Functions
void collision( void (* callback)(axisType, double, double, double) );

Parameters

المعلمة

يكتب

وصف

callback

void (*)(axisType, double, double, double)

مؤشر إلى دالة تُستدعى عند اكتشاف تصادم. يجب أن تقبل دالة الاستدعاء المعاملات التالية:

  • axisType — المحور الذي تم اكتشاف التصادم عليه.
  • قيم التسارع لحظة الاصطدام، بالترتيب:
    • double — التسارع على طول المحور السيني (بوحدة G).
    • double — التسارع على طول المحور الصادي (بوحدة G).
    • double — التسارع على طول المحور العيني (بوحدة G).
يجب أن تُرجع الدالة قيمة فارغة void.

Return Values

هذه الدالة لا تُرجع قيمة.

Examples

عرّف دالة الاستدعاء (خارج نطاق int main())

// Display a message when the Inertial Sensor detects a collision.
void onCollision(axisType axis, double x, double y, double z) {
  Brain.Screen.print("Collision detected!");
}

قم بتسجيل دالة الاستدعاء داخل الدالة الرئيسية int main()

int main() {
  // Run onCollision when the Inertial Sensor detects a collision.
  myInertial.collision(onCollision);
}

setTurnType#

تحدد هذه المجموعات اتجاه الدوران الذي يُرجع قيمًا موجبة.

Available Functions
void setTurnType( turnType dir );

Parameters

المعلمة

يكتب

وصف

dir

turnType

الاتجاه الذي يُرجع قيمًا موجبة:

  • right
  • left

Return Values

هذه الدالة لا تُرجع قيمة.

Notes
  • يؤثر هذا الإعداد على كيفية قيام heading و rotation بالإبلاغ عن القيم الموجبة والسالبة.

  • يؤدي استدعاء هذه الوظيفة إلى تجاوز قيمة dir المحددة عند إنشاء الكائن inertial .

getTurnType#

تُحدد هذه النتائج اتجاه الدوران الذي ينتج عنه قيم موجبة.

Available Functions
turnType getTurnType();

Parameters

لا تأخذ هذه الدالة أي معلمات.

Return Values

يُرجع قيمة turnType مما يشير إلى الاتجاه الذي ينتج عنه قيم موجبة:

  • right — Clockwise rotation returns positive values.
  • left — Counterclockwise rotation returns positive values.
Notes