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

ভূমিকা#

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 বস্তু হতে পারে।

প্যারামিটার

প্রকার

বর্ণনা

&l / &r

motor_group / motor

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

&g

gyro&

বিদ্যমান কোনো gps, gyro, অথবা inertial ইনস্ট্যান্সের একটি রেফারেন্স।

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 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 ক্লাসে নিম্নলিখিত সদস্য ফাংশনগুলো অন্তর্ভুক্ত রয়েছে:

ক্রিয়াকলাপ — দিক বা ঘূর্ণন ব্যবহার করে রোবটটিকে ঘোরান।

সেটিংস — হেডিং এবং রোটেশন মান সমন্বয় করুন।

  • 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 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 থেকে 600 rpm, অথবা dpsব্যবহার করলে 0 থেকে 3600 ডিগ্রি প্রতি সেকেন্ড পর্যন্ত হতে পারে। যদি কোনো গতি প্রদান করা না হয়, তবে রোবটটি বর্তমান ঘোরার গতিতে ঘোরে।

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

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

  • যেহেতু turnToHeading লক্ষ্য-ভিত্তিক (একটি angle প্যারামিটার ব্যবহার করে), isDone এবং isMoving এর মতো ফাংশনগুলি turnToHeading সাথে কাজ করে।

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 থেকে 600 rpm, অথবা dpsব্যবহার করলে 0 থেকে 3600 ডিগ্রি প্রতি সেকেন্ড পর্যন্ত হতে পারে। যদি কোনো গতি প্রদান করা না হয়, তবে রোবটটি বর্তমান ঘোরার গতিতে ঘোরে।

units_v

velocityUnits

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

waitForCompletion

bool

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

Return Values

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

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

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

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

  • যেহেতু turnToRotation লক্ষ্য-ভিত্তিক (একটি angle প্যারামিটার ব্যবহার করে), isDone এবং isMoving এর মতো ফাংশনগুলি turnToRotation সাথে কাজ করে।

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

calibrateDrivetrain#

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

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

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

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

Available Functions
void calibrateDrivetrain();

Parameters

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

Return Values

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

Notes
  • প্রতিটি প্রকল্পের শুরুতে রোবটটি স্বয়ংক্রিয়ভাবে ক্যালিব্রেট হয়।

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

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("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 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();