القصور الذاتي#
مقدمة#
يحتوي معالج الذكاء الاصطناعي (الجيل الثاني) الدماغ على مستشعر قصور ذاتي مدمج. يقيس هذا المستشعر كيفية تحرك الدماغ ودورانه.
يستخدم المستشعر بالقصور الذاتي جزأين للقيام بذلك. يقيس الجيروسكوب الدوران، مثل الاتجاه والدوران ومعدل الدوران والاتجاه. ويقيس مقياس التسارع التغيرات في الحركة، مثل التسارع أو التباطؤ على طول المحاور س، ص، ع.
تستخدم هذه الصفحة الاسم brain_inertial كمثال لاسم مستشعر القصور الذاتي. استبدله بالاسم الذي قمت بتكوينه حسب الحاجة.
فيما يلي قائمة بجميع الطرق المتاحة:
التوجيه — قراءة والتحكم في الاتجاه والدوران ومعايرة المستشعر.
heading— يعيد الاتجاه الذي يواجهه المستشعر، من 0 إلى 359.99 درجة.rotation— تُرجع هذه الدالة مقدار دوران المستشعر.calibrate— معايرة المستشعر بالقصور الذاتي.set_heading— يقوم بتعيين الاتجاه الحالي للمستشعر بالقصور الذاتي إلى قيمة اتجاه جديدة.set_rotation— يقوم بتعيين الدوران الحالي لمستشعر القصور الذاتي إلى قيمة دوران جديدة.is_calibrating— تُرجع ما إذا كان المستشعر بالقصور الذاتي يقوم بالمعايرة حاليًا.reset_heading— يعيد ضبط اتجاه المستشعر بالقصور الذاتي الحالي إلى 0 درجة.reset_rotation— يعيد ضبط الدوران الحالي لمستشعر القصور الذاتي إلى 0 درجة.changed— يسجل وظيفة لتشغيلها عند تغيير اتجاه مستشعر القصور الذاتي.
الحركة — قياس التسارع وسرعة الدوران والميل.
acceleration— يعيد مدى سرعة تسارع أو تباطؤ المستشعر على المحور المحدد.gyro_rate— تُرجع مدى سرعة دوران المستشعر على المحور المحدد.orientation— يعيد زاوية الدوران أو الميل أو الانحراف لمستشعر القصور الذاتي.
المنشئات — تهيئة وتكوين مستشعر القصور الذاتي يدويًا.
Inertial— إنشاء مستشعر قصوري.
توجيه#
heading#
الاتجاه هو الاتجاه الذي يواجهه المستشعر، ويتم قياسه بالدرجات من 0 إلى 359.99. heading يعيد اتجاه المستشعر الحالي.
الاتجاه الابتدائي هو 0 درجة. إذا تجاوز المستشعر 359.99 درجة، فسيعود الاتجاه إلى 0 درجة.
Usage:
brain_inertial.heading(units)
حدود |
وصف |
|---|---|
|
اختياري. وحدة العنوان: |
# Display the heading after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.heading())
rotation#
الدوران هو مقدار دوران المستشعر، ويُقاس بالدرجات. على عكس الاتجاه، يمكن أن يزيد الدوران عن 359.99 درجة أو يقل عن صفر درجة. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُشير الأمر rotation إلى الدوران الحالي للمستشعر بالقصور الذاتي.
يؤدي الانعطاف يمينًا إلى زيادة الدوران، بينما يؤدي الانعطاف يسارًا إلى تقليله. على سبيل المثال، ينتج عن الانعطاف دورتين كاملتين إلى اليمين دوران مقداره 720 درجة. أما الانعطاف دورة كاملة واحدة إلى اليسار من وضع الصفر فينتج عنه دوران مقداره -360 درجة.
Usage:
brain_inertial.rotation(units)
حدود |
وصف |
|---|---|
|
اختياري. وحدة الدوران: |
# Display the rotation value after turning
drivetrain.turn_for(RIGHT, 450, DEGREES)
brain.screen.print(brain_inertial.rotation())
calibrate#
يُجري الأمر calibrate معايرةً لمستشعر القصور الذاتي. ستنتظر جميع الأسطر اللاحقة اكتمال المعايرة قبل التشغيل. تُساعد المعايرة المستشعر على قياس المنعطفات بدقة من خلال قياس ضوضاء المستشعر وانحرافه والتعويض عنهما خلال فترة زمنية محددة. خلال هذه الفترة، يجب أن يظل الدماغ ثابتًا تمامًا على سطح مستقر. قد تُؤدي الحركة أثناء المعايرة إلى نتائج غير دقيقة.
يحاول جهاز VEX Brain تلقائيًا معايرة مستشعر القصور الذاتي المدمج في بداية كل مشروع. مع ذلك، إذا تم حمل الروبوت أو تحريكه أثناء بدء المشروع، فقد يفشل المستشعر في المعايرة بشكل صحيح أو قد يعطي معايرة غير صحيحة.
Usage:
brain_inertial.calibrate()
المعلمة |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
# Start calibration
brain_inertial.calibrate()
# Print after calibration
while brain_inertial.is_calibrating():
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Inertial Sensor")
brain.screen.next_row()
brain.screen.print("Calibrating")
wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")
set_heading#
الاتجاه هو الاتجاه الذي يواجهه المستشعر، ويُقاس بالدرجات من 0 إلى 359.99. set_heading() يغير الاتجاه الحالي للمستشعر بالقصور الذاتي إلى قيمة اتجاه جديدة.
على سبيل المثال، إذا استدار المستشعر ليواجه اليمين، فإن ضبط الاتجاه على 0 درجة يجعل وضعية مواجهة اليمين هي الوضعية الجديدة 0 درجة. عندها يمكن للمستشعر تتبع الاتجاهات الأخرى بناءً على هذا الاتجاه الجديد.
Usage:
brain_inertial.set_heading(value, units)
حدود |
وصف |
|---|---|
|
قيمة الاتجاه، بالدرجات، التي يجب ضبطها للمستشعر. يمكن أن تكون هذه القيمة من 0 إلى 359.99. |
|
اختياري. وحدة العنوان: |
# Turn the robot around
brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)
set_rotation#
الدوران هو مقدار دوران المستشعر، ويُقاس بالدرجات. على عكس الاتجاه، يمكن أن يزيد الدوران عن 359.99 درجة أو ينقص عن 0 درجة. في بداية المشروع، تُضبط قيمة الدوران على 0 درجة. يُغيّر set_rotation() قيمة الدوران الحالية للمستشعر بالقصور الذاتي إلى قيمة جديدة.
على سبيل المثال، إذا دار المستشعر دورتين كاملتين إلى اليمين، ستكون قيمة دورانه 720 درجة. ضبط الدوران على 0 درجة سيعيد ضبط قيمة الدوران من 720 إلى 0 درجة. بعد ذلك، يمكن للمستشعر تتبع الدورات بناءً على هذه القيمة الجديدة.
Usage:
brain_inertial.set_rotation(value, units)
حدود |
وصف |
|---|---|
|
قيمة الدوران، بالدرجات، التي سيتم ضبطها للمستشعر. يمكن أن تكون هذه القيمة عددًا صحيحًا أو عددًا عشريًا (عددًا عشريًا). |
|
اختياري. وحدة الدوران: |
# Turn the robot around
brain_inertial.set_rotation(-180)
drivetrain.turn_to_rotation(0)
is_calibrating#
is_calibrating تُرجع ما إذا كان المستشعر بالقصور الذاتي يقوم بالمعايرة حاليًا.
True— يتم معايرة المستشعر بالقصور الذاتي.False— لا تتم معايرة المستشعر بالقصور الذاتي.
Usage:
brain_inertial.is_calibrating()
المعلمة |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
# Start calibration
brain_inertial.calibrate()
# Print while waiting for calibration
while brain_inertial.is_calibrating():
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Inertial Sensor")
brain.screen.next_row()
brain.screen.print("Calibrating")
wait(50, MSEC)
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
brain.screen.print("Done!")
reset_heading#
reset_heading يعيد ضبط اتجاه المستشعر بالقصور الذاتي الحالي إلى 0 درجة.
بعد استخدام هذه الطريقة، يصبح اتجاه المستشعر الحالي هو الاتجاه الجديد بزاوية 0 درجة.
Usage:
brain_inertial.reset_heading()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
# Turn the robot before and after resetting the heading
drivetrain.turn_to_heading(90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_heading()
drivetrain.turn_to_heading(90, DEGREES)
reset_rotation#
reset_rotation يعيد ضبط الدوران الحالي لمستشعر القصور الذاتي إلى 0 درجة.
بعد استخدام هذه الطريقة، يقوم المستشعر بتتبع الانعطافات المستقبلية انطلاقاً من قيمة الدوران الجديدة البالغة 0 درجة.
Usage:
brain_inertial.reset_rotation()
حدود |
وصف |
|---|---|
لا تحتوي هذه الطريقة على أي معلمات. |
# Turn the robot before and after resetting the rotation
drivetrain.turn_to_rotation(-90, DEGREES)
wait(0.5, SECONDS)
brain_inertial.reset_rotation()
drivetrain.turn_to_rotation(-90, DEGREES)
changed#
changed يسجل دالة ليتم استدعاؤها عند تغيير اتجاه مستشعر القصور الذاتي.
Usage:
brain_inertial.changed(callback, arg)
حدود |
وصف |
|---|---|
|
وظيفة يتم تشغيلها عند تغيير اتجاه مستشعر القصور الذاتي. |
|
اختياري. مجموعة من الوسائط لتمريرها إلى دالة الاستدعاء. |
def heading_changed():
brain.screen.set_cursor(1, 1)
brain.screen.clear_screen()
brain.screen.print("my heading ")
brain.screen.next_row()
brain.screen.print("has changed!")
wait(0.1, SECONDS)
# Call the function when the inertial heading is changed
wait(1, SECONDS)
drivetrain.turn_for(RIGHT, 90, DEGREES, wait=False)
brain_inertial.changed(heading_changed)
wait(15, MSEC)
حركة#
acceleration#
التسارع هو مدى سرعة تسارع أو تباطؤ المستشعر. القيمة acceleration تُرجعان تسارع المستشعر بالقصور الذاتي على المحور المحدد، من -4.0 G إلى 4.0 G، كقيمة عشرية.
وحدة قياس التسارع هي G تشعر به من الجاذبية الأرضية وأنت جالس بلا حراك.
يمكن أن تكون القيمة موجبة أو سالبة حسب اتجاه التسارع على المحور المحدد. خيارات المحور هي XAXIS، YAXIS، و ZAXIS.
Usage:
brain_inertial.acceleration(axis)
حدود |
وصف |
|---|---|
محور |
المحاور المستخدمة لقياس التسارع:
|
# Display acceleration after moving
vexcode_brain_precision = 2
drivetrain.set_drive_velocity(100, PERCENT)
brain.screen.print("Resting: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))
brain.screen.next_row()
wait(1, SECONDS)
drivetrain.drive_for(FORWARD, 500, MM, wait=False)
wait(0.01, SECONDS)
brain.screen.print("Startup: ")
brain.screen.next_row()
brain.screen.print(brain_inertial.acceleration(XAXIS))
gyro_rate#
معدل الدوران هو سرعة دوران مستشعر القصور الذاتي. gyro_rate تُعيد سرعة الدوران الحالية لمستشعر القصور الذاتي على المحور المحدد.
يمكن أن تكون القيمة موجبة أو سالبة اعتمادًا على اتجاه دوران المستشعر على ذلك المحور.
Usage:
brain_inertial.gyro_rate(axis, units)
حدود |
وصف |
|---|---|
|
المحور الذي يُعاد منه معدل الدوران:
|
|
اختياري. وحدة معدل الجيروسكوب:
|
# Display the z-axis gyro rate
drivetrain.turn(RIGHT)
wait(1, SECONDS)
brain.screen.print(brain_inertial.gyro_rate(ZAXIS, RPM))
drivetrain.stop()
orientation#
الاتجاه هو الزاوية الحالية للمستشعر بالقصور الذاتي على محور الدوران المحدد. يشير الاتجاه orientation إلى زاوية الميل أو الانحراف أو الدوران الجانبي للمستشعر بالقصور الذاتي.
يصف كل من الدوران والانحراف والالتفاف الطرق المختلفة التي يمكن للمستشعر من خلالها أن يميل أو يدور.
Usage:
brain_inertial.orientation(axis, units)
حدود |
وصف |
|---|---|
|
زاوية التوجيه للعودة:
|
|
اختياري. وحدة التوجيه: |
# Display the roll, pitch, and yaw of the Brain as it
# is rotated by hand
while True:
brain.screen.clear_screen()
brain.screen.print(brain_inertial.orientation(OrientationType.ROLL))
brain.screen.next_row()
brain.screen.print(brain_inertial.orientation(OrientationType.PITCH))
brain.screen.next_row()
brain.screen.print(brain_inertial.orientation(OrientationType.YAW))
brain.screen.next_row()
brain.screen.set_cursor(1, 1)
wait(0.1, SECONDS)
المُنشئون#
تُستخدم الدوال البانية لإنشاء كائنات Inertial يدويًا، كما هو الحال عند تكوين مستشعر Inertial خارج VEXcode.
Inertial#
Inertial يُنشئ مستشعرًا بالقصور الذاتي.
Usage:
Inertial(smartport)
المعلمة |
وصف |
|---|---|
|
Optional. If using the IQ (2nd gen) Brain’s built-in Inertial Sensor, a Smart Port is not needed. If connecting an external Inertial Sensor, specify the Smart Port that the Inertial Sensor is connected to, written as |
# Create a new object "brain_inertial" with the
# Inertial class
brain_inertial = Inertial()
left_drive_smart = Motor(Ports.PORT1, 1.0, False)
right_drive_smart = Motor(Ports.PORT6, 1.0, True)
drivetrain = SmartDrive(left_drive_smart, right_drive_smart, brain_inertial, 200)
brain_inertial.set_heading(180)
drivetrain.turn_to_heading(0)


