مستشعر القصور الذاتي#
مقدمة#
تُستخدم فئة inertial للتحكم في البيانات والوصول إليها من مستشعر القصور الذاتي المدمج في دماغ IQ (الجيل الثاني). يقيس هذا المستشعر كيفية تحرك الدماغ ودورانه.
يستخدم المستشعر بالقصور الذاتي جزأين للقيام بذلك. يقيس الجيروسكوب الدوران، مثل الاتجاه والدوران ومعدل الدوران والاتجاه. ويقيس مقياس التسارع التغيرات في الحركة، مثل التسارع أو التباطؤ على طول المحاور س، ص، ع.
مُنشئات الفئات#
inertial(
turnType dir = turnType::right );
مُدمِّر الفئة#
Destroys the inertial object and releases associated resources.
~inertial();
حدود#
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
اختياري. الاتجاه الذي يُرجع قيمًا موجبة:
|
أمثلة#
// 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 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 درجة. على سبيل المثال، الدوران دورتين كاملتين إلى اليمين ينتج عنه دوران مقداره 720 درجة. أما الدوران دورة كاملة واحدة إلى اليسار من 0 درجة فينتج عنه دوران مقداره -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 درجة.
Available Functionsvoid setRotation( double value,
rotationUnits units );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
قيمة الدوران، بالدرجات، التي يجب ضبطها للمستشعر. يمكن أن تكون هذه القيمة عددًا صحيحًا أو عددًا عشريًا. |
|
|
وحدة الدوران:
|
هذه الدالة لا تُرجع قيمة.
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())// 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 Functionsbool installed();
لا تأخذ هذه الدالة أي معلمات.
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 التسارع الذي تشعر به من الجاذبية الأرضية وأنت جالس بلا حراك. ويمكن أن تكون القيمة موجبة أو سالبة حسب اتجاه التسارع على المحور المحدد.
double acceleration( axisType axis );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
المحاور المستخدمة لقياس التسارع:
|
تُرجع قيمة double تمثل التسارع على طول المحور المحدد بوحدة G (وحدات الجاذبية).
يتم الإبلاغ عن قيم التسارع بوحدات
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#
الاتجاه هو الزاوية الحالية لمستشعر القصور الذاتي على محور الدوران المحدد. تُعيد هذه الدالة الاتجاه الحالي لمستشعر القصور الذاتي للمحور المحدد.
يصف كل من الدوران والانحراف والالتفاف الطرق المختلفة التي يمكن للمستشعر من خلالها أن يميل أو يدور.
Available Functionsdouble orientation(
orientationType type,
rotationUnits units );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
زاوية التوجيه للعودة:
|
|
|
وحدة التوجيه:
|
تُرجع قيمة 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(roll, deg);
Brain.Screen.print("%f", orient);
wait(0.1, seconds);
}
collision#
يسجل دالة رد نداء يتم تشغيلها عندما يكتشف المستشعر بالقصور الذاتي تأثيرًا مفاجئًا أو تصادمًا.
Available Functionsvoid collision( void (* callback)(axisType, double, double, double) );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
مؤشر إلى دالة تُستدعى عند اكتشاف تصادم. يجب أن تقبل دالة الاستدعاء المعاملات التالية:
void. |
هذه الدالة لا تُرجع قيمة.
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 Functionsvoid setTurnType( turnType dir );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
الاتجاه الذي يُرجع قيمًا موجبة:
|
هذه الدالة لا تُرجع قيمة.
Notesيؤثر هذا الإعداد على كيفية قيام
headingوrotationبالإبلاغ عن القيم الموجبة والسالبة.يؤدي استدعاء هذه الوظيفة إلى تجاوز قيمة
dirالمحددة عند إنشاء الكائنinertial.
getTurnType#
تُحدد هذه النتائج اتجاه الدوران الذي ينتج عنه قيم موجبة.
Available FunctionsturnType getTurnType();
لا تأخذ هذه الدالة أي معلمات.
Return Valuesيُرجع قيمة turnType مما يشير إلى الاتجاه الذي ينتج عنه قيم موجبة:
-
right— Clockwise rotation returns positive values. -
left— Counterclockwise rotation returns positive values.
يتم تعيين هذه القيمة أثناء إنشاء الكائن
inertialأو عن طريق استدعاءsetTurnType.