স্মার্টড্রাইভ#
ভূমিকা#
smartdrive ক্লাসটি মোটর, চাকা এবং একটি সেন্সর ব্যবহার করে একটি রোবটের চালনা এবং মোড় নিয়ন্ত্রণ করে। একটি smartdrive দিক এবং ঘূর্ণন ট্র্যাক করতে একটি ইনার্শিয়াল সেন্সর, জাইরো সেন্সর, বা জিপিএস সেন্সর ব্যবহার করতে পারে।
smartdrive সেন্সর ব্যবহার করে রোবটকে নির্ভুলভাবে চলতে ও ঘুরতে সাহায্য করে। প্রতিটি প্রজেক্টের শুরুতে, ড্রাইভট্রেইন স্বয়ংক্রিয়ভাবে সেন্সরটি ক্যালিব্রেট করে। ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন, যাতে এটি সঠিকভাবে চলতে ও ঘুরতে পারে।
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 ডিগ্রির মধ্যে একটি নির্দিষ্ট হেডিং-এর দিকে ঘোরায়। রোবটটি লক্ষ্য হেডিং-এ পৌঁছানোর জন্য সবচেয়ে ছোট পথটি বেছে নেবে।
রোবটটির প্রারম্ভিক অভিমুখ ০ ডিগ্রি।
রোবটটির ঘোরা শেষ না হওয়া পর্যন্ত প্রজেক্টটি অপেক্ষা করবে এবং তারপরেই কোডের পরবর্তী লাইনটি রান করবে।
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-এ সেট করা হয়েছিল।
turnToHeadingচলাকালীন অন্য কোনো ড্রাইভট্রেন মুভমেন্ট ফাংশন (যেমনturnঅথবাdrive) সম্পাদন করলে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।যেহেতু
turnToHeadingলক্ষ্য-ভিত্তিক (একটিangleপ্যারামিটার ব্যবহার করে),isDoneএবংisMovingএর মতো ফাংশনগুলিturnToHeadingসাথে কাজ করে।
// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
turnToRotation#
turnToRotation রোবটটিকে একটি নির্দিষ্ট ঘূর্ণনে ঘোরায়।
ঘূর্ণন হল রোবটটি কতটা ঘুরেছে, যা ডিগ্রি বা আবর্তনে পরিমাপ করা হয়। একটি প্রকল্পের শুরুতে, ঘূর্ণনের মান 0 ডিগ্রিতে সেট করা হয়। setRotation ফাংশন ব্যবহার করেও ঘূর্ণন সেট করা যেতে পারে।
ঘূর্ণনের মান পরম। এর মানে হলো, মোড় নেওয়ার দিকটি রোবটের বর্তমান ঘূর্ণনের উপর নির্ভর করে। ডানদিকে ঘুরলে ঘূর্ণন বাড়ে এবং বামদিকে ঘুরলে ঘূর্ণন কমে।
উদাহরণস্বরূপ, যদি রোবটটি ০ ডিগ্রি থেকে শুরু করে এবং আপনি এটিকে ৭২০ ডিগ্রি ঘোরান, তবে এটি দুইবার ডানদিকে ঘুরবে। এরপর যদি আপনি এটিকে ৩৬০ ডিগ্রি ঘোরান, তবে এটি একবার বামদিকে ঘুরবে, কারণ ৩৬০ হলো ৭২০-এর চেয়ে কম।
রোবটটির ঘোরা শেষ না হওয়া পর্যন্ত প্রজেক্টটি অপেক্ষা করবে এবং তারপরেই কোডের পরবর্তী লাইনটি রান করবে।
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-এ সেট করা হয়েছিল।
turnToRotationচলাকালীন অন্য কোনো ড্রাইভট্রেন মুভমেন্ট ফাংশন (যেমনturnঅথবাdrive) সম্পাদন করলে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।যেহেতু
turnToRotationলক্ষ্য-ভিত্তিক (একটিangleপ্যারামিটার ব্যবহার করে),isDoneএবংisMovingএর মতো ফাংশনগুলিturnToRotationসাথে কাজ করে।
// Spin counterclockwise for 2 turns, then face forward
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain স্মার্টড্রাইভের সাথে কনফিগার করা ইনার্শিয়াল সেন্সর, জাইরো সেন্সর, বা জিপিএস সেন্সর ক্যালিব্রেট করে।
ক্যালিব্রেশন সেন্সরকে নড়াচড়া সঠিকভাবে পরিমাপ করতে সাহায্য করে। ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন। ক্যালিব্রেশনের সময় রোবটটি নড়াচড়া করলে, সেন্সরটি নড়াচড়া সঠিকভাবে পরিমাপ করতে নাও পারে।
পরবর্তী কোড লাইনটি চলার আগে প্রজেক্টটি ক্যালিব্রেশন সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে।
যখন একটি ড্রাইভট্রেনকে ইনার্শিয়াল সেন্সর, জিপিএস সেন্সর, বা জাইরো সেন্সর দিয়ে কনফিগার করা হয়, তখন VEXcode দ্বারা calibrateDrivetrain স্বয়ংক্রিয়ভাবে তৈরি হয়। এটি প্রজেক্ট সোর্সের অংশ হিসেবে সরবরাহ করা হয় এবং এটি VEX V5 C++ API-এর অংশ নয়।
void calibrateDrivetrain();
এই ফাংশনটি কোনো প্যারামিটার গ্রহণ করে না।
Return Valuesএই ফাংশনটি কোনো মান ফেরত দেয় না।
Notesপ্রতিটি প্রকল্পের শুরুতে রোবটটি স্বয়ংক্রিয়ভাবে ক্যালিব্রেট হয়।
ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন।
নিম্নলিখিতটি হলো 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 রোবটের বর্তমান হেডিংকে একটি নতুন হেডিং মানে পরিবর্তন করে।
উদাহরণস্বরূপ, যদি রোবটটি ডানদিকে মুখ করে থাকে, তবে হেডিং ০ ডিগ্রিতে সেট করলে সেই ডানমুখী অবস্থানটিই নতুন ০ ডিগ্রি হয়ে যায়। এরপর রোবটটি সেই নতুন হেডিং-এর উপর ভিত্তি করে অন্যান্য অবস্থানে ঘুরতে পারে।
Available Functionsvoid setHeading(
double value,
rotationUnits units);
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
রোবটের জন্য যে হেডিং ভ্যালুটি সেট করতে হবে। |
|
|
হেডিং ইউনিট: |
এই ফাংশনটি কোনো মান ফেরত দেয় না।
Examples// Face the new 0 degrees
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);
setRotation#
ঘূর্ণন হলো রোবটের ঘুরে যাওয়ার পরিমাণ, যা ডিগ্রি বা আবর্তনে পরিমাপ করা হয়। একটি প্রকল্পের শুরুতে, ঘূর্ণনের মান ০ ডিগ্রিতে সেট করা থাকে। setRotation রোবটের বর্তমান ঘূর্ণনকে একটি নতুন মানে পরিবর্তন করে।
উদাহরণস্বরূপ, যদি রোবটটি ডানদিকে দুটি পূর্ণ পাক ঘুরে থাকে, তবে এর ঘূর্ণন মান হবে ৭২০ ডিগ্রি। ঘূর্ণন মান ০ ডিগ্রিতে সেট করলে তা ৭২০ থেকে ০ ডিগ্রিতে রিসেট হয়ে যাবে। এরপর রোবটটি সেই নতুন মানের উপর ভিত্তি করে ঘুরতে পারবে।
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 রোবটের বর্তমান হেডিং ০ থেকে ৩৫৯ ডিগ্রির মধ্যে ফেরত দেয়।
রোবটটির প্রারম্ভিক অভিমুখ ০ ডিগ্রি।
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 রোবটটির বর্তমান ঘূর্ণন ফেরত দেয়।
ডানদিকে ঘুরলে ঘূর্ণন বাড়ে এবং বামদিকে ঘুরলে ঘূর্ণন কমে। উদাহরণস্বরূপ, ডানদিকে দুটি পূর্ণ পাক দিলে ৭২০ ডিগ্রি ঘূর্ণন ঘটবে।
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();