স্মার্টড্রাইভ#

ভূমিকা#

স্মার্টড্রাইভ 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();

প্যারামিটার#

প্যারামিটার

প্রকার

বর্ণনা

&l / &r

motor_group / motor

বাম এবং ডান মোটর বা মোটর গ্রুপ। উভয় প্যারামিটার অবশ্যই একই ধরনের হতে হবে: হয় দুটি motor_group অবজেক্ট অথবা দুটি motor অবজেক্ট।

&g

gyro

স্মার্টড্রাইভ দ্বারা ব্যবহৃত জাইরো সেন্সর।

wheelTravel

double

ড্রাইভট্রেন চাকাগুলোর পরিধি। এর ডিফল্ট মান হলো 320

trackWidth

double

বাম এবং ডান চাকার মধ্যবর্তী দূরত্ব। এর ডিফল্ট মান হলো 320

wheelBase

double

সামনের ও পেছনের চাকার মধ্যবর্তী দূরত্ব। এর ডিফল্ট মান হলো 130।

unit

distanceUnits

wheelTravel, trackWidth, এবং wheelBaseএর একক হলো: mm (ডিফল্ট) অথবা inches।

externalGearRatio

double

গিয়ার ব্যবহার করা হলে, ড্রাইভের দূরত্ব সমন্বয় করার জন্য এই গিয়ার অনুপাতটি ব্যবহৃত হয়। এর ডিফল্ট মান হলো 1.0।

উদাহরণ#

/* 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 Functions

1 — বর্তমান বাঁক নেওয়ার গতি ব্যবহার করে রোবটটিকে নির্দিষ্ট দিকে ঘোরায়।

bool turnToHeading(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — রোবটটিকে নির্দিষ্ট বেগে নির্দিষ্ট দিকে ঘোরায়।

bool turnToHeading(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

প্যারামিটার

প্রকার

বর্ণনা

angle

double

রোবটটি যে দিকে মুখ করবে, তা ডিগ্রিতে পরিমাপ করতে হবে। deg বা degrees ব্যবহার করার ক্ষেত্রে এর মান -৩৫৯ থেকে ৩৫৯ পর্যন্ত হতে পারে।

units

rotationUnits

হেডিং ইউনিট: deg (ডিগ্রি), rev (রেভোলিউশন), অথবা raw (র ইউনিট)। এক রেভোলিউশন ৩৬০ ডিগ্রির সমান।

velocity

double

velocityUnits::pctব্যবহার করলে ঘোরার গতি 0% থেকে 100%, rpmব্যবহার করলে 0 থেকে 120 rpm, অথবা dpsব্যবহার করলে 0 থেকে 720 ডিগ্রি প্রতি সেকেন্ড। যদি কোনো গতি প্রদান করা না হয়, তবে রোবটটি বর্তমান ঘোরার গতিতে ঘোরে।

units_v

velocityUnits

বেগের একক: velocityUnits::pct (শতাংশ), rpm (প্রতি মিনিটে ঘূর্ণন), অথবা dps (প্রতি সেকেন্ডে ডিগ্রি)।

waitForCompletion

bool

true (ডিফল্ট) পরবর্তী কোড লাইনটি চলার আগে রোবটের ঘোরা শেষ না হওয়া পর্যন্ত প্রজেক্টটিকে অপেক্ষা করায়। false পরবর্তী কোড লাইনটি সাথে সাথে চালিয়ে দেয়।

Return Values

রোবটটি নির্ধারিত পথে পৌঁছেছে কিনা, তা একটি বুলিয়ান মান হিসাবে ফেরত দেয়।

  • true — রোবটটি লক্ষ্যপথে পৌঁছেছে।

  • false — রোবটটি তার পালা শেষ করেনি, অথবা পালা সম্পূর্ণ হওয়ার আগেই ফাংশনটি রিটার্ন করেছে কারণ waitForCompletion false -এ সেট করা হয়েছিল।

Notes
  • turnToHeading চলমান থাকা অবস্থায় অন্য কোনো ড্রাইভট্রেইন মুভমেন্ট ফাংশন চালালে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।

  • turnToHeading একটি টার্গেট হেডিং ব্যবহার করে, তাই isDone এবং isMoving এর সাথে ব্যবহার করা যেতে পারে।

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

turnToRotation#

turnToRotation রোবটটিকে একটি নির্দিষ্ট ঘূর্ণনে ঘোরায়।

ঘূর্ণন হল রোবটটি কতটা ঘুরেছে, যা ডিগ্রি বা আবর্তনে পরিমাপ করা হয়। একটি প্রকল্পের শুরুতে, ঘূর্ণনের মান 0 ডিগ্রিতে সেট করা হয়। setRotation ফাংশন ব্যবহার করেও ঘূর্ণন সেট করা যেতে পারে।

ঘূর্ণনের মান পরম। এর মানে হলো, মোড় নেওয়ার দিকটি রোবটের বর্তমান ঘূর্ণনের উপর নির্ভর করে। ডানদিকে ঘুরলে ঘূর্ণন বাড়ে এবং বামদিকে ঘুরলে ঘূর্ণন কমে।

উদাহরণস্বরূপ, যদি রোবটটি ০ ডিগ্রি থেকে শুরু করে এবং আপনি এটিকে ৭২০ ডিগ্রি ঘোরান, তবে এটি দুইবার ডানদিকে ঘুরবে। এরপর যদি আপনি এটিকে ৩৬০ ডিগ্রি ঘোরান, তবে এটি একবার বামদিকে ঘুরবে, কারণ ৩৬০ হলো ৭২০-এর চেয়ে কম।

রোবটটির ঘোরা শেষ না হওয়া পর্যন্ত প্রজেক্টটি অপেক্ষা করবে এবং তারপরেই কোডের পরবর্তী লাইনটি রান করবে।

Available Functions

1 — বর্তমান ঘূর্ণন বেগ ব্যবহার করে রোবটটিকে নির্দিষ্ট ঘূর্ণনে ঘোরায়।

bool turnToRotation(
    double        angle,
    rotationUnits units,
    bool          waitForCompletion = true );

2 — রোবটটিকে নির্দিষ্ট বেগে নির্দিষ্ট ঘূর্ণনে ঘোরায়।

bool turnToRotation(
    double        angle,
    rotationUnits units,
    double        velocity,
    velocityUnits units_v,
    bool          waitForCompletion = true );

Parameters

প্যারামিটার

প্রকার

বর্ণনা

angle

double

যে ঘূর্ণন মানে রোবটটি ঘুরবে।

units

rotationUnits

ঘূর্ণনের একক: deg (ডিগ্রি), rev (ঘূর্ণন), অথবা raw (র ইউনিট)। এক ঘূর্ণন ৩৬০ ডিগ্রির সমান।

velocity

double

velocityUnits::pctব্যবহার করলে ঘোরার গতি 0% থেকে 100%, rpmব্যবহার করলে 0 থেকে 120 rpm, অথবা dpsব্যবহার করলে 0 থেকে 720 ডিগ্রি প্রতি সেকেন্ড। যদি কোনো গতি প্রদান করা না হয়, তবে রোবটটি বর্তমান ঘোরার গতিতে ঘোরে।

units_v

velocityUnits

বেগের একক: velocityUnits::pct (শতাংশ), rpm (প্রতি মিনিটে ঘূর্ণন), অথবা dps (প্রতি সেকেন্ডে ডিগ্রি)।

waitForCompletion

bool

true (ডিফল্ট) পরবর্তী কোড লাইনটি চলার আগে রোবটের ঘোরা শেষ না হওয়া পর্যন্ত প্রজেক্টটিকে অপেক্ষা করায়। false পরবর্তী কোড লাইনটি সাথে সাথে চালিয়ে দেয়।

Return Values

রোবটটি লক্ষ্যমাত্রার ঘূর্ণনে পৌঁছেছে কিনা, তা একটি বুলিয়ান মান হিসাবে ফেরত দেয়।

  • true — রোবটটি লক্ষ্যমাত্রার ঘূর্ণনে পৌঁছেছে।

  • false — রোবটটি তার পালা শেষ করেনি, অথবা পালা সম্পূর্ণ হওয়ার আগেই ফাংশনটি রিটার্ন করেছে কারণ waitForCompletion false -এ সেট করা হয়েছিল।

Notes
  • turnToRotation চালু থাকা অবস্থায় অন্য কোনো ড্রাইভট্রেইন মুভমেন্ট ফাংশন চালালে বর্তমান মুভমেন্টটি বাধাগ্রস্ত হবে।

  • turnToRotation একটি টার্গেট রোটেশন ব্যবহার করে, তাই isDone এবং isMoving এটির সাথে ব্যবহার করা যেতে পারে।

Examples
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

calibrateDrivetrain#

calibrateDrivetrain স্মার্টড্রাইভের সাথে কনফিগার করা জাইরো সেন্সরটি ক্যালিব্রেট করে।

ক্যালিব্রেশন জাইরো সেন্সরকে নড়াচড়া সঠিকভাবে পরিমাপ করতে সাহায্য করে। ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন। ক্যালিব্রেশনের সময় রোবটটি নড়াচড়া করলে, জাইরো সেন্সরটি নড়াচড়া সঠিকভাবে পরিমাপ করতে নাও পারে।

পরবর্তী কোড লাইনটি চলার আগে প্রজেক্টটি ক্যালিব্রেশন সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে।

যখন একটি ড্রাইভট্রেনকে জাইরো সেন্সর দিয়ে কনফিগার করা হয়, তখন VEXcode দ্বারা calibrateDrivetrain স্বয়ংক্রিয়ভাবে তৈরি হয়। এটি প্রজেক্ট সোর্সের অংশ হিসেবে সরবরাহ করা হয় এবং এটি VEX IQ C++ API-এর অংশ নয়।

Available Functions
void calibrateDrivetrain();

Parameters

এই ফাংশনটি কোনো প্যারামিটার গ্রহণ করে না।

Return Values

এই ফাংশনটি কোনো মান ফেরত দেয় না।

Notes
  • VEXcode-এ স্মার্টড্রাইভ কনফিগার করা থাকলে, প্রতিটি প্রজেক্টের শুরুতে রোবটটি স্বয়ংক্রিয়ভাবে ক্যালিব্রেট হয়ে যায়।

  • ক্যালিব্রেশনের সময় রোবটটিকে প্রায় ২ সেকেন্ডের জন্য স্থির রাখুন।

Function Implementation

নিম্নলিখিতটি 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 Functions
void setHeading(
  double value,
  rotationUnits units);

Parameters

প্যারামিটার

প্রকার

বর্ণনা

value

double

রোবটের জন্য যে হেডিং ভ্যালুটি সেট করতে হবে। deg অথবা degrees ব্যবহার করার সময় এর মান -৩৫৯ থেকে ৩৫৯ পর্যন্ত হতে পারে।

units

rotationUnits

হেডিং ইউনিট: deg (ডিগ্রি), rev (রেভোলিউশন), অথবা raw (র ইউনিট)। এক রেভোলিউশন ৩৬০ ডিগ্রির সমান।

Return Values

এই ফাংশনটি কোনো মান ফেরত দেয় না।

Examples
// Face the new 0 degrees.
myDrivetrain.setHeading(90, degrees);
myDrivetrain.turnToHeading(0, degrees);

setRotation#

ঘূর্ণন হলো রোবটের ঘুরে যাওয়ার পরিমাণ, যা ডিগ্রি বা আবর্তনে পরিমাপ করা হয়। একটি প্রকল্পের শুরুতে, ঘূর্ণনের মান ০ ডিগ্রিতে সেট করা থাকে। setRotation রোবটের বর্তমান ঘূর্ণনকে একটি নতুন মানে পরিবর্তন করে।

উদাহরণস্বরূপ, যদি রোবটটি ডানদিকে দুটি পূর্ণ পাক ঘুরে থাকে, তবে এর ঘূর্ণন মান হবে ৭২০ ডিগ্রি। ঘূর্ণন মান ০ ডিগ্রিতে সেট করলে তা ৭২০ থেকে ০ ডিগ্রিতে রিসেট হয়ে যাবে। এরপর রোবটটি সেই নতুন মানের উপর ভিত্তি করে ঘুরতে পারবে।

Available Functions
void setRotation(
  double value,
  rotationUnits units);

Parameters

প্যারামিটার

প্রকার

বর্ণনা

value

double

রোবটের জন্য যে ঘূর্ণন মান নির্ধারণ করতে হবে।

units

rotationUnits

ঘূর্ণনের একক: deg (ডিগ্রি), rev (ঘূর্ণন), অথবা raw (র ইউনিট)। এক ঘূর্ণন ৩৬০ ডিগ্রির সমান।

Return Values

এই ফাংশনটি কোনো মান ফেরত দেয় না।

Examples
// Spin counterclockwise for 2 turns, then face forward.
myDrivetrain.setRotation(720, degrees);
myDrivetrain.turnToRotation(0, degrees);

heading#

হেডিং হলো রোবটের অভিমুখ, যা ডিগ্রিতে পরিমাপ করা হয়। heading রোবটের বর্তমান হেডিং ০ থেকে ৩৫৯ ডিগ্রির মধ্যে ফেরত দেয়।

রোবটটির প্রারম্ভিক অভিমুখ ০ ডিগ্রি।

Available Functions
double heading( rotationUnits units = rotationUnits::deg );

Parameters

প্যারামিটার

প্রকার

বর্ণনা

units

rotationUnits

ঐচ্ছিক। হেডিং ফেরত দেওয়ার একক: degrees, deg (ডিফল্ট), rev, অথবা raw। এক ঘূর্ণন ৩৬০ ডিগ্রির সমান।

Return Values

রোবটের বর্তমান অভিমুখকে নির্বাচিত এককে double এর সমন্বয়ে ফেরত দেয়।

Examples
// 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 Functions
double rotation( rotationUnits units = rotationUnits::deg );

Parameters

প্যারামিটার

প্রকার

বর্ণনা

units

rotationUnits

ঐচ্ছিক। ঘূর্ণন ফেরত দেওয়ার একক: degrees, deg (ডিফল্ট), rev, অথবা raw। এক ঘূর্ণন ৩৬০ ডিগ্রির সমান।

Return Values

রোবটের বর্তমান ঘূর্ণন মানটি নির্বাচিত এককে double এর সমন্বয়ে ফেরত দেয়।

Examples
// 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();