स्मार्टड्राइव#
परिचय#
smartdrive श्रेणी मोटर्स, पहियों और सेंसर का उपयोग करके रोबोट के चलने और मुड़ने के तरीके को नियंत्रित करती है। smartdrive दिशा और घूर्णन को ट्रैक करने के लिए जड़त्वीय सेंसर, जाइरो सेंसर, या जीपीएस सेंसर का उपयोग कर सकती है।
smartdrive सेंसर का उपयोग करके रोबोट को सटीक रूप से चलने और मुड़ने में मदद करता है। प्रत्येक प्रोजेक्ट की शुरुआत में, ड्राइवट्रेन स्वचालित रूप से सेंसर को कैलिब्रेट करता है। कैलिब्रेशन के दौरान रोबोट को लगभग 2 सेकंड के लिए स्थिर रखें, ताकि रोबोट सही ढंग से चल और मुड़ सके।
smartdrive वर्ग drivetrain वर्ग पर आधारित है। यह drivetrain के समान ड्राइव और टर्न फ़ंक्शन का उपयोग कर सकता है, और यह turnToHeading और turnToRotation जैसे सेंसर-आधारित फ़ंक्शन भी जोड़ता है।
क्लास कंस्ट्रक्टर#
1 — बाएँ (
&l) और दाएँ (&r) पक्षों के लिए मौजूदाmotor_groupऑब्जेक्ट्स का उपयोग करके एक स्मार्टड्राइव बनाता है, साथ ही एक इनर्टियल सेंसर, जाइरो सेंसर, या जीपीएस सेंसर।smartdrive( motor_group &l, motor_group &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 — बाएँ (
&l) और दाएँ (&r) पक्षों के लिए मौजूदाmotorऑब्जेक्ट्स का उपयोग करके एक स्मार्टड्राइव बनाता है, साथ ही एक इनर्टियल सेंसर, जाइरो सेंसर, या जीपीएस सेंसर।smartdrive( motor &l, motor &r, inertial &g, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
क्लास डिस्ट्रक्टर#
smartdrive ऑब्जेक्ट को नष्ट करता है और उससे जुड़े संसाधनों को मुक्त करता है।
~smartdrive();
पैरामीटर#
सेंसर पैरामीटर inertial, gyro, या gps ऑब्जेक्ट हो सकता है।
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
मौजूदा |
|
|
किसी मौजूदा |
|
|
ड्राइवट्रेन पहियों की परिधि। डिफ़ॉल्ट मान |
|
|
बाएँ और दाएँ पहियों के बीच की दूरी। डिफ़ॉल्ट मान |
|
|
आगे और पीछे के पहियों के बीच की दूरी। डिफ़ॉल्ट मान |
|
|
|
|
|
यदि गियर का उपयोग किया जाता है तो ड्राइव दूरी को समायोजित करने के लिए उपयोग किया जाने वाला गियर अनुपात। डिफ़ॉल्ट मान |
उदाहरण#
/* 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 instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
सदस्य कार्य#
smartdrive क्लास में निम्नलिखित सदस्य फ़ंक्शन शामिल हैं:
कार्य — दिशा या घूर्णन का उपयोग करके रोबोट को घुमाएँ।
turnToHeading— रोबोट को -359 से 359 डिग्री तक किसी विशिष्ट दिशा की ओर मोड़ता है। रोबोट लक्ष्य दिशा तक पहुँचने के लिए सबसे छोटी दिशा में मुड़ेगा।turnToRotation— रोबोट को एक विशिष्ट रोटेशन में घुमाता है।calibrateDrivetrain— ड्राइवट्रेन के कॉन्फ़िगर किए गए इनर्टियल सेंसर, जाइरो सेंसर, या जीपीएस सेंसर को कैलिब्रेट करता है।
सेटिंग्स — हेडिंग और रोटेशन मान समायोजित करें।
setHeading— रोबोट की वर्तमान दिशा को नई दिशा में बदलता है।setRotation— रोबोट के वर्तमान रोटेशन को नए रोटेशन में बदलता है।
मान — शीर्षक और घूर्णन की जाँच करें।
heading— रोबोट की वर्तमान हेडिंग 0 से 359 डिग्री तक लौटाता है।rotation— रोबोट का वर्तमान रोटेशन लौटाता है।
एक 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 instances
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the inertial instance
inertial myInertial = inertial(PORT3);
// Create the smartdrive instance
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor object
rightMotor, // right motor object
myInertial, // inertial object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
turnToHeading#
हेडिंग रोबोट की दिशा है, जिसे डिग्री में मापा जाता है। turnToHeading रोबोट को -359 से 359 डिग्री के बीच किसी विशिष्ट हेडिंग की ओर घुमाता है। रोबोट लक्ष्य हेडिंग तक पहुँचने के लिए सबसे छोटी दिशा में घूमेगा।
रोबोट की प्रारंभिक दिशा 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 );
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
रोबोट का मुख किस दिशा में होना चाहिए, डिग्री में। |
|
|
घूर्णन की इकाई: |
|
|
|
|
|
वेग इकाई: |
|
|
|
यह एक बूलियन मान के रूप में बताता है कि रोबोट लक्ष्य दिशा तक पहुंचा या नहीं।
true— रोबोट लक्ष्य दिशा तक पहुँच गया।false— रोबोट ने बारी पूरी नहीं की, या फ़ंक्शन बारी पूरी होने से पहले ही लौट आया क्योंकिwaitForCompletionfalseपर सेट किया गया था।
turnप्रगति में रहते हुए किसी अन्य ड्राइवट्रेन मूवमेंट फ़ंक्शन (जैसेdriveयाturnToHeading) को निष्पादित करने से वर्तमान मूवमेंट बाधित हो जाएगा।क्योंकि
turnToHeadingलक्ष्य-आधारित है (angleपैरामीटर का उपयोग करता है),isDoneऔरisMovingजैसे फ़ंक्शनturnToHeadingके साथ काम करते हैं।
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation रोबोट को एक विशिष्ट रोटेशन पर घुमाता है।
रोटेशन वह मात्रा है जो रोबोट घूम चुका है, जिसे डिग्री या चक्करों में मापा जाता है। किसी प्रोजेक्ट की शुरुआत में, रोटेशन का मान 0 डिग्री पर सेट होता है। रोटेशन को setRotation फ़ंक्शन का उपयोग करके भी सेट किया जा सकता है।
घूर्णन मान निरपेक्ष होते हैं। इसका अर्थ है कि मुड़ने की दिशा रोबोट के वर्तमान घूर्णन पर निर्भर करती है। दाईं ओर मुड़ने से घूर्णन बढ़ता है, और बाईं ओर मुड़ने से घूर्णन घटता है।
उदाहरण के लिए, यदि रोबोट 0 डिग्री से शुरू होता है और आप उसे 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 );
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
वह घूर्णन मान जिस पर रोबोट घूमेगा। |
|
|
घूर्णन की इकाई: |
|
|
|
|
|
वेग इकाई: |
|
|
|
यह एक बूलियन मान के रूप में बताता है कि रोबोट लक्ष्य घूर्णन तक पहुंचा या नहीं।
true— रोबोट लक्ष्य घूर्णन तक पहुँच गया।false— रोबोट ने बारी पूरी नहीं की, या फ़ंक्शन बारी पूरी होने से पहले ही लौट आया क्योंकिwaitForCompletionfalseपर सेट किया गया था।
turnप्रगति में रहते हुए किसी अन्य ड्राइवट्रेन मूवमेंट फ़ंक्शन (जैसेdriveयाturnToRotation) को निष्पादित करने से वर्तमान मूवमेंट बाधित हो जाएगा।क्योंकि
turnToRotationलक्ष्य-आधारित है (turnToRotationपैरामीटर का उपयोग करता है),angleऔरisDoneजैसे फ़ंक्शनisMovingके साथ काम करते हैं।
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain स्मार्टड्राइव के साथ कॉन्फ़िगर किए गए इनर्टियल सेंसर, जाइरो सेंसर या जीपीएस सेंसर को कैलिब्रेट करता है।
कैलिब्रेशन से सेंसर को गति को सही ढंग से मापने में मदद मिलती है। कैलिब्रेशन के दौरान रोबोट को लगभग 2 सेकंड तक स्थिर रखें। यदि कैलिब्रेशन के दौरान रोबोट हिलता है, तो सेंसर गति को सही ढंग से नहीं माप पाएगा।
कैलिब्रेशन पूरा होने तक प्रोजेक्ट कोड की अगली पंक्ति को चलाने से पहले प्रतीक्षा करेगा।
जब किसी ड्राइवट्रेन को इनर्टियल सेंसर, जीपीएस सेंसर या जाइरो सेंसर के साथ कॉन्फ़िगर किया जाता है, तो VEXcode द्वारा calibrateDrivetrain स्वचालित रूप से उत्पन्न होता है। यह प्रोजेक्ट स्रोत का हिस्सा है और VEX V5 C++ API का हिस्सा नहीं है।
void calibrateDrivetrain();
यह फ़ंक्शन कोई पैरामीटर स्वीकार नहीं करता है।
Return Valuesइस कार्य पर कीमत के लिहाज से कुछ भी रिटर्न नहीं मिलता है।
Notesप्रत्येक परियोजना की शुरुआत में रोबोट स्वचालित रूप से कैलिब्रेट हो जाता है।
कैलिब्रेशन के दौरान रोबोट को लगभग 2 सेकंड तक स्थिर रखें।
निम्नलिखित VEXcode द्वारा निर्मित calibrateDrivetrain का स्वतः उत्पन्न कार्यान्वयन है:
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 रोबोट की वर्तमान हेडिंग को एक नए हेडिंग मान में बदल देता है।
उदाहरण के लिए, यदि रोबोट दाईं ओर मुड़ गया है, तो दिशा को 0 डिग्री पर सेट करने से वह दाईं ओर की स्थिति ही नई 0 डिग्री बन जाती है। फिर रोबोट उस नई दिशा के आधार पर अन्य स्थितियों में मुड़ सकता है।
Available Functionsvoid setHeading(
double value,
rotationUnits units);
पैरामीटर |
प्रकार |
विवरण |
|---|---|---|
|
|
रोबोट के लिए निर्धारित की जाने वाली दिशा का मान। |
|
|
दिशा बताने वाली इकाई: |
इस कार्य पर कीमत के लिहाज से कुछ भी रिटर्न नहीं मिलता है।
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
रोटेशन वह मात्रा है जो रोबोट घूम चुका है, जिसे डिग्री या चक्करों में मापा जाता है। किसी प्रोजेक्ट की शुरुआत में, रोटेशन का मान 0 डिग्री पर सेट होता है। 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#
रोटेशन वह मात्रा है जो रोबोट घूम चुका है, जिसे डिग्री या चक्करों में मापा जाता है। किसी प्रोजेक्ट की शुरुआत में, रोटेशन का मान 0 डिग्री पर सेट होता है। 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();