محرك أقراص ذكي#
مقدمة#
The smartdrive class controls how a robot drives and turns using motors, wheels, and a sensor. A smartdrive can use a connected Gyro Sensor or the Brain’s built-in Inertial Sensor.
A smartdrive uses the sensor to help the robot move and turn precisely. At the start of each project, the drivetrain calibrates the sensor automatically. Keep the robot still for about 2 seconds during calibration, so the robot can move and turn correctly.
The smartdrive class is based on the drivetrain class. It can use the same drive and turn functions as drivetrain, and it also adds sensor-based functions like turnToHeading and turnToRotation.
تستخدم هذه الصفحة الاسم myDrivetrain كمثال لاسم محرك الأقراص الذكي. استبدله بالاسم الذي قمت بتكوينه حسب الحاجة.
مُنشئات الفئات#
1 — يقوم بإنشاء محرك ذكي باستخدام كائنات motor_group
motor_groupبالإضافة إلى مستشعر جيروسكوب أو مستشعر بالقصور الذاتي.smartdrive( motor_group &l, motor_group &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — يقوم بإنشاء محرك ذكي باستخدام كائنات المحرك
motorللجانبين الأيسر والأيمن، بالإضافة إلى مستشعر جيروسكوبي أو مستشعر بالقصور الذاتي.smartdrive( motor &l, motor &r, gyro &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
مُدمِّر الفئة#
يقوم بتدمير الكائن smartdrive وتحرير الموارد المرتبطة به.
~smartdrive();
حدود#
The sensor parameter can be a gyro or inertial object.
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
المحركان الأيسر والأيمن أو مجموعات المحركات. يجب أن يستخدم كلا المعاملين نفس النوع: إما كائنين من نوع |
|
|
مستشعر الجيروسكوب أو مستشعر القصور الذاتي المستخدم بواسطة نظام القيادة الذكية. |
|
|
محيط عجلات نظام نقل الحركة. القيمة الافتراضية هي |
|
|
المسافة بين العجلتين اليمنى واليسرى. القيمة الافتراضية هي |
|
|
المسافة بين العجلتين الأمامية والخلفية. القيمة الافتراضية هي |
|
|
الوحدة لـ |
|
|
نسبة التروس المستخدمة لضبط مسافات القيادة في حال استخدام التروس. القيمة الافتراضية هي |
مثال#
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
الدوال الأعضاء#
تتضمن فئة smartdrive ) وظائف الأعضاء التالية:
الإجراءات — قم بتدوير الروبوت باستخدام الاتجاه أو الدوران.
turnToHeading— يُوجّه الروبوت نحو اتجاه مُحدد من -359 إلى 359 درجة. سيسلك الروبوت أقصر مسار للوصول إلى الاتجاه المطلوب.turnToRotation— يقوم بتدوير الروبوت إلى دوران محدد.calibrateDrivetrain— يقوم بمعايرة المستشعر المُكوّن باستخدام نظام القيادة الذكي.
الإعدادات — ضبط قيم الاتجاه والدوران.
setHeading— يغير اتجاه الروبوت الحالي إلى اتجاه جديد.setRotation— يغير دوران الروبوت الحالي إلى دوران جديد.
القيم — تحقق من العنوان والتدوير.
يمكن لـ smartdrive أيضًا استخدام وظائف الأعضاء الموروثة من drivetrain، مثل drive، driveFor، turn، turnFor، stop، isDone، و isMoving.
قبل استدعاء أي من وظائف الأعضاء smartdrive ، يجب إنشاء كائن smartdrive.
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Inertial Sensor object.
inertial myInertial = inertial(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myInertial, // Inertial Sensor
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
A heading is the direction the robot is facing, measured in degrees. turnToHeading turns the robot to face a specific heading from -359 to 359 degrees. The robot will turn the shortest direction to reach the target heading.
اتجاه بدء الروبوت هو 0 درجة.
سينتظر المشروع حتى ينتهي الروبوت من الدوران قبل تشغيل سطر التعليمات البرمجية التالي.
Available Functions1 — يقوم بتوجيه الروبوت إلى الاتجاه المحدد باستخدام سرعة الدوران الحالية.
bool turnToHeading( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — يقوم بتوجيه الروبوت إلى الاتجاه المحدد بالسرعة المحددة.
bool turnToHeading( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
الاتجاه الذي يجب أن يواجهه الروبوت، بالدرجات. يمكن أن يكون هذا الاتجاه من -359 إلى 359 عند استخدام |
|
|
وحدة القياس: |
|
|
تتراوح سرعة الدوران من 0% إلى 100% عند استخدام |
|
|
وحدة السرعة: |
|
|
|
تُرجع هذه الدالة ما إذا كان الروبوت قد وصل إلى الاتجاه المستهدف، كقيمة منطقية (Boolean).
true— وصل الروبوت إلى الاتجاه المستهدف.false— لم يكمل الروبوت الدور، أو تم إرجاع الدالة قبل اكتمال الدور لأنwaitForCompletionتم تعيينها إلىfalse.
تشغيل وظيفة حركة أخرى لنظام نقل الحركة أثناء تشغيل
turnToHeadingسيؤدي إلى مقاطعة الحركة الحالية.turnToHeadingيستخدم اتجاهًا مستهدفًا، لذلك يمكن استخدامisDoneوisMovingمعه.
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation يقوم بتدوير الروبوت إلى دوران محدد.
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات أو الدورات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. كما يمكن ضبط الدوران باستخدام الدالة setRotation.
قيم الدوران مطلقة. وهذا يعني أن اتجاه الدوران يعتمد على دوران الروبوت الحالي. الدوران إلى اليمين يزيد من الدوران، والدوران إلى اليسار يقلل منه.
على سبيل المثال، إذا بدأ الروبوت من زاوية صفر درجة، ثم قمت بتدويره بزاوية 720 درجة، فسيدور إلى اليمين مرتين. وإذا قمت بعد ذلك بتدويره بزاوية 360 درجة، فسيدور إلى اليسار مرة واحدة، لأن 360 درجة أقل من 720 درجة.
سينتظر المشروع حتى ينتهي الروبوت من الدوران قبل تشغيل سطر التعليمات البرمجية التالي.
Available Functions1 — يقوم بتدوير الروبوت إلى الدوران المحدد باستخدام سرعة الدوران الحالية.
bool turnToRotation( double angle, rotationUnits units, bool waitForCompletion = true );
Parameters2 — يقوم بتدوير الروبوت إلى الدوران المحدد بالسرعة المحددة.
bool turnToRotation( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
قيمة الدوران التي سيتجه إليها الروبوت. |
|
|
وحدة الدوران: |
|
|
تتراوح سرعة الدوران من 0% إلى 100% عند استخدام |
|
|
وحدة السرعة: |
|
|
|
تُرجع هذه الدالة ما إذا كان الروبوت قد وصل إلى الدوران المستهدف، كقيمة منطقية (Boolean).
true— وصل الروبوت إلى الدوران المستهدف.false— لم يكمل الروبوت الدور، أو تم إرجاع الدالة قبل اكتمال الدور لأنwaitForCompletionتم تعيينها إلىfalse.
تشغيل وظيفة حركة أخرى لنظام نقل الحركة أثناء تشغيل
turnToRotationسيؤدي إلى مقاطعة الحركة الحالية.turnToRotationيستخدم دورانًا مستهدفًا، لذلك يمكن استخدامisDoneوisMovingمعه.
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain يقوم بمعايرة مستشعر الجيروسكوب المتصل أو مستشعر القصور الذاتي المدمج في الدماغ والمُهيأ باستخدام محرك القيادة الذكي.
تساعد عملية المعايرة المستشعر على قياس الحركة بدقة. حافظ على ثبات الروبوت لمدة ثانيتين تقريبًا أثناء المعايرة. إذا تحرك الروبوت أثناء المعايرة، فقد لا يقيس المستشعر الحركة بدقة.
سينتظر المشروع حتى يتم الانتهاء من عملية المعايرة قبل تشغيل السطر التالي من التعليمات البرمجية.
ملاحظة: يتم إنشاء الأمر calibrateDrivetrain تلقائيًا بواسطة VEXcode عند تهيئة نظام نقل الحركة باستخدام مستشعر جيروسكوبي أو مستشعر قصور ذاتي. وهو مُضمّن في مصدر المشروع وليس جزءًا من واجهة برمجة تطبيقات VEX IQ C++.
void calibrateDrivetrain();
لا تقبل هذه الدالة أي معلمات.
Return Valuesهذه الدالة لا تُرجع قيمة.
Notesيقوم الروبوت بالمعايرة تلقائيًا في بداية كل مشروع عند تكوين محرك ذكي في VEXcode.
حافظ على ثبات الروبوت لمدة ثانيتين تقريبًا أثناء عملية المعايرة.
فيما يلي مثال على التنفيذ التلقائي لـ calibrateDrivetrain الذي أنشأه VEXcode:
bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
wait(200, msec);
Brain.Screen.print("Calibrating");
Brain.Screen.newLine();
Brain.Screen.print("Inertial");
DrivetrainInertial.calibrate();
while (DrivetrainInertial.isCalibrating()) {
wait(25, msec);
}
vexcode_initial_drivetrain_calibration_completed = true;
// Clears the screen and returns the cursor to row 1, column 1.
Brain.Screen.clearScreen();
Brain.Screen.setCursor(1, 1);
}
setHeading#
الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُغيّر setHeading اتجاه الروبوت الحالي إلى قيمة اتجاه جديدة.
على سبيل المثال، إذا استدار الروبوت ليواجه اليمين، فإن ضبط اتجاهه على صفر درجة يجعل وضعية مواجهة اليمين هي الصفر الجديدة. بعد ذلك، يمكن للروبوت أن يستدير إلى أوضاع أخرى بناءً على هذا الاتجاه الجديد.
Available Functionsvoid setHeading(
double value,
rotationUnits units);
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
قيمة الاتجاه المراد ضبطها للروبوت. يمكن أن تتراوح هذه القيمة بين -359 و359 عند استخدام |
|
|
وحدة القياس: |
هذه الدالة لا تُرجع قيمة.
Examples// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات أو الدورات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُغيّر setRotation قيمة الدوران الحالية للروبوت إلى قيمة جديدة.
على سبيل المثال، إذا أكمل الروبوت دورتين كاملتين إلى اليمين، ستكون قيمة دورانه 720 درجة. ضبط قيمة الدوران على 0 درجة سيعيد ضبطها من 720 إلى 0 درجة. بعد ذلك، يمكن للروبوت الدوران وفقًا لهذه القيمة الجديدة.
Available Functionsvoid setRotation(
double value,
rotationUnits units);
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
قيمة الدوران التي يجب ضبطها للروبوت. |
|
|
وحدة الدوران: |
هذه الدالة لا تُرجع قيمة.
Examples// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
heading#
الاتجاه هو المسار الذي يواجهه الروبوت، ويُقاس بالدرجات. يُعيد الأمر heading اتجاه الروبوت الحالي من 0 إلى 359 درجة.
اتجاه بدء الروبوت هو 0 درجة.
Available Functionsdouble heading( rotationUnits units = rotationUnits::deg );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
اختياري. وحدة قياس اتجاه العودة: |
يُعيد هذا الأمر اتجاه الروبوت الحالي كرقم double بالوحدة المحددة.
// Show heading before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.heading(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.heading(degrees));
myDrivetrain.stop();
rotation#
الدوران هو مقدار دوران الروبوت، ويُقاس بالدرجات أو الدورات. في بداية المشروع، تُضبط قيمة الدوران على صفر درجة. يُشير الرقم rotation الدوران الحالي للروبوت.
يؤدي الانعطاف يمينًا إلى زيادة الدوران، بينما يؤدي الانعطاف يسارًا إلى تقليله. على سبيل المثال، يؤدي القيام بدورتين كاملتين إلى اليمين إلى دوران مقداره 720 درجة.
Available Functionsdouble rotation( rotationUnits units = rotationUnits::deg );
المعلمة |
يكتب |
وصف |
|---|---|---|
|
|
اختياري. وحدة قياس الدوران: |
يُعيد هذا الأمر دوران الروبوت الحالي كقيمة double في الوحدة المحددة.
// Show rotation before and after turning.
Brain.Screen.print("Before: %f", myDrivetrain.rotation(degrees));
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("After: %f", myDrivetrain.rotation(degrees));
myDrivetrain.stop();