স্মার্টড্রাইভ#
ভূমিকা#
স্মার্টড্রাইভ smartdrive ক্লাসটি মোটর, চাকা এবং একটি জাইরো সেন্সর ব্যবহার করে একটি রোবটের চালনা এবং মোড় নিয়ন্ত্রণ করে। একটি স্মার্টড্রাইভ smartdrive দিক এবং ঘূর্ণন ট্র্যাক করতে একটি সংযুক্ত জাইরো সেন্সর ব্যবহার করে।
smartdrive সেন্সর ব্যবহার করে। প্রতিটি প্রজেক্টের শুরুতে, ড্রাইভট্রেইন স্বয়ংক্রিয়ভাবে জাইরো সেন্সরটি ক্যালিব্রেট করে। ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন, যাতে এটি সঠিকভাবে চলতে ও ঘুরতে পারে।
smartdrive ক্লাসটি smartdrive ক্লাসের উপর ভিত্তি করে তৈরি। একটি drivetrain drivetrain এর মতো একই ড্রাইভ এবং টার্ন ফাংশন ব্যবহার করতে পারে, এবং এটি turnToHeading এবং turnToRotation এর মতো সেন্সর-ভিত্তিক ফাংশনও যুক্ত করে।
এই পৃষ্ঠায় উদাহরণস্বরূপ স্মার্টড্রাইভের নাম হিসেবে myDrivetrain ব্যবহার করা হয়েছে। প্রয়োজন অনুযায়ী এটিকে আপনার নিজের কনফিগার করা নাম দিয়ে প্রতিস্থাপন করুন।
ক্লাস কনস্ট্রাক্টর#
1 — বাম এবং ডান দিকের জন্য বিদ্যমান
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();
প্যারামিটার#
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
বাম এবং ডান মোটর বা মোটর গ্রুপ। উভয় প্যারামিটার অবশ্যই একই ধরনের হতে হবে: হয় দুটি |
|
|
স্মার্টড্রাইভ দ্বারা ব্যবহৃত জাইরো সেন্সর। |
|
|
ড্রাইভট্রেন চাকাগুলোর পরিধি। এর ডিফল্ট মান হলো |
|
|
বাম এবং ডান চাকার মধ্যবর্তী দূরত্ব। এর ডিফল্ট মান হলো |
|
|
সামনের ও পেছনের চাকার মধ্যবর্তী দূরত্ব। এর ডিফল্ট মান হলো |
|
|
|
|
|
গিয়ার ব্যবহার করা হলে, ড্রাইভের দূরত্ব সমন্বয় করার জন্য এই গিয়ার অনুপাতটি ব্যবহৃত হয়। এর ডিফল্ট মান হলো |
উদাহরণ#
/* 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 Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
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 objects.
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the Gyro Sensor object.
gyro myGyro = gyro(PORT3);
// Create the smartdrive object.
smartdrive myDrivetrain = smartdrive(
leftMotor, // left motor
rightMotor, // right motor
myGyro, // Gyro Sensor
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চলমান থাকা অবস্থায় অন্য কোনো ড্রাইভট্রেইন মুভমেন্ট ফাংশন চালালে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।turnToHeadingএকটি টার্গেট হেডিং ব্যবহার করে, তাইisDoneএবংisMovingএর সাথে ব্যবহার করা যেতে পারে।
// 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চালু থাকা অবস্থায় অন্য কোনো ড্রাইভট্রেইন মুভমেন্ট ফাংশন চালালে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।turnToRotationএকটি টার্গেট রোটেশন ব্যবহার করে, তাইisDoneএবংisMovingএটির সাথে ব্যবহার করা যেতে পারে।
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);
calibrateDrivetrain#
calibrateDrivetrain স্মার্টড্রাইভের সাথে কনফিগার করা জাইরো সেন্সরটি ক্যালিব্রেট করে।
ক্যালিব্রেশন জাইরো সেন্সরকে নড়াচড়া সঠিকভাবে পরিমাপ করতে সাহায্য করে। ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন। ক্যালিব্রেশনের সময় রোবটটি নড়াচড়া করলে, জাইরো সেন্সরটি নড়াচড়া সঠিকভাবে পরিমাপ করতে নাও পারে।
পরবর্তী কোড লাইনটি চলার আগে প্রজেক্টটি ক্যালিব্রেশন সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে।
যখন একটি ড্রাইভট্রেনকে জাইরো সেন্সর দিয়ে কনফিগার করা হয়, তখন VEXcode দ্বারা calibrateDrivetrain স্বয়ংক্রিয়ভাবে তৈরি হয়। এটি প্রজেক্ট সোর্সের অংশ হিসেবে সরবরাহ করা হয় এবং এটি VEX IQ C++ API-এর অংশ নয়।
void calibrateDrivetrain();
এই ফাংশনটি কোনো প্যারামিটার গ্রহণ করে না।
Return Valuesএই ফাংশনটি কোনো মান ফেরত দেয় না।
NotesVEXcode-এ স্মার্টড্রাইভ কনফিগার করা থাকলে, প্রতিটি প্রজেক্টের শুরুতে রোবটটি স্বয়ংক্রিয়ভাবে ক্যালিব্রেট হয়ে যায়।
ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন।
নিম্নলিখিতটি VEXcode দ্বারা তৈরি calibrateDrivetrain -এর স্বয়ংক্রিয়ভাবে উৎপাদিত বাস্তবায়নের একটি উদাহরণ:
bool vexcode_initial_drivetrain_calibration_completed = false;
void calibrateDrivetrain() {
wait(200, msec);
Brain.Screen.print("Calibrating");
Brain.Screen.newLine();
Brain.Screen.print("Gyro");
DrivetrainGyro.calibrate();
while (DrivetrainGyro.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();