দৃষ্টি সেন্সর#

ভূমিকা#

vision ক্লাসটি EXP ভিশন সেন্সর থেকে ডেটা নিয়ন্ত্রণ ও অ্যাক্সেস করতে ব্যবহৃত হয়। এই সেন্সরটি তার দৃষ্টিসীমার মধ্যে রঙের বৈশিষ্ট্য (কালার সিগনেচার) শনাক্ত ও ট্র্যাক করে, যা আপনার রোবটকে লক্ষ্যবস্তু শনাক্ত করতে এবং রিয়েল টাইমে দৃশ্যমান তথ্যে সাড়া দিতে সাহায্য করে।

ভিশন সেন্সরটি একই সাথে একাধিক স্বতন্ত্র বস্তু শনাক্ত করতে পারে এবং বস্তুর অবস্থান, প্রস্থ, উচ্চতা ও কেন্দ্রের স্থানাঙ্কের মতো তথ্য প্রদান করে।

ক্লাস কনস্ট্রাক্টর#

vision(
  int32_t  index,
  uint8_t  bright,
  Args&... sigs );

ক্লাস ডেস্ট্রাক্টর#

vision অবজেক্টটি ধ্বংস করে এবং সংশ্লিষ্ট রিসোর্সগুলো মুক্ত করে।

~vision();

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

প্যারামিটার

প্রকার

বর্ণনা

index

int32_t

যে স্মার্ট পোর্টের সাথে ভিশন সেন্সরটি সংযুক্ত থাকে, তা PORTxহিসেবে লেখা হয়, যেখানে x হলো পোর্ট নম্বর (উদাহরণস্বরূপ, PORT1)।

bright

uint8_t

ভিশন সেন্সরের উজ্জ্বলতার মাত্রা।

sigs

vision::signature or vision::code objects

সেন্সরের সাথে নিবন্ধন করার জন্য এক বা একাধিক vision::signature অথবা vision::code বস্তু।

উদাহরণ#

// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
    1,      // signature id
    10121,  // uMin
    10757,  // uMax
    10439,  // uMean
    -1657,  // vMin
    -1223,  // vMax
    -1440,  // vMean
    2.5,    // range
    1 );    // type

vision::signature Vision1__BLUEBOX = vision::signature(
    2,      // signature id
    -4479,  // uMin
    -3277,  // uMax
    -3878,  // uMean
    5869,   // vMin
    7509,   // vMax
    6689,   // vMean
    2.5,    // range
    1 );    // type

// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
    Vision1__REDBOX,  // first signature
    Vision1__BLUEBOX  // second signature
);

// Create the Vision Sensor instance
vision Vision1 = vision(
    PORT1,                  // Smart Port
    50,                     // brightness
    Vision1__REDBOX,        // signature
    Vision1__BOXCODE );     // Color Code

সদস্যদের কার্যাবলী#

vision ক্লাসে নিম্নলিখিত সদস্য ফাংশনগুলো অন্তর্ভুক্ত রয়েছে:

  • takeSnapshot — একটি নির্দিষ্ট কালার সিগনেচার বা কালার কোডের জন্য ডেটা ক্যাপচার করে।

  • installed — ভিশন সেন্সরটি EXP ব্রেইনের সাথে সংযুক্ত আছে কিনা।

takeSnapshot কল করার পরে সনাক্ত করা বস্তুর ডেটা অ্যাক্সেস করতে, উপলব্ধ Properties ব্যবহার করুন।

যেকোনো vision মেম্বার ফাংশন কল করার আগে, নিচে দেখানো অনুযায়ী একটি vision ইনস্ট্যান্স তৈরি করতে হবে:

/* This constructor is required when using VS Code.
Vision Sensor configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */


// Create Color Signatures
vision::signature Vision1__REDBOX = vision::signature(
    1,      // signature id
    10121,  // uMin
    10757,  // uMax
    10439,  // uMean
    -1657,  // vMin
    -1223,  // vMax
    -1440,  // vMean
    2.5,    // range
    1 );    // type

vision::signature Vision1__BLUEBOX = vision::signature(
    2,      // signature id
    -4479,  // uMin
    -3277,  // uMax
    -3878,  // uMean
    5869,   // vMin
    7509,   // vMax
    6689,   // vMean
    2.5,    // range
    1 );    // type

// Create a Color Code from two signatures
vision::code Vision1__BOXCODE = vision::code(
    Vision1__REDBOX,  // first signature
    Vision1__BLUEBOX  // second signature
);

// Create the Vision Sensor instance
vision Vision1 = vision(
    PORT1,                  // Smart Port
    50,                     // brightness
    Vision1__REDBOX,        // signature
    Vision1__BOXCODE );     // Color Code

takeSnapshot#

ভিশন সেন্সর থেকে একটি ছবি ধারণ করে, সিগনেচারের উপর ভিত্তি করে সেটিকে প্রসেস করে এবং objects অ্যারেটি আপডেট করে। এই পদ্ধতিটি স্ন্যাপশটে ধারণ করা অবজেক্টের সংখ্যাও সীমিত করতে পারে।

objects অ্যারেটি অবজেক্টগুলিকে তাদের প্রস্থ অনুসারে বড় থেকে ছোট ক্রমে সংরক্ষণ করে, যা ইনডেক্স 0 থেকে শুরু হয়। প্রতিটি অবজেক্টের properties তার ইনডেক্স ব্যবহার করে অ্যাক্সেস করা যায়। যদি কোনো মিলে যাওয়া অবজেক্ট সনাক্ত করা না যায়, objectCount 0 হবে এবং objects[i].exists false হবে।

Available Functions

1 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট সিগনেচার আইডির সাথে মেলে এমন অবজেক্ট অনুসন্ধান করে।

int32_t takeSnapshot( uint32_t id );

2 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট vision::code অবজেক্টের সাথে মেলে এমন অবজেক্ট অনুসন্ধান করে।

int32_t takeSnapshot( code &cc );

3 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট vision::signature অবজেক্টের সাথে মেলে এমন অবজেক্ট অনুসন্ধান করে।

int32_t takeSnapshot( signature &sig );

4 — একটি স্ন্যাপশট নেয় এবং সিগনেচার আইডির সাথে মেলে এমন সর্বাধিক নির্দিষ্ট সংখ্যক অবজেক্ট সংরক্ষণ করে।

int32_t takeSnapshot( uint32_t id, uint32_t count );

5 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট vision::code অবজেক্টের সাথে মেলে এমন সর্বাধিক সংখ্যক অবজেক্ট সংরক্ষণ করে।

int32_t takeSnapshot( code &cc, uint32_t count );

6 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট vision::signature অবজেক্টের সাথে মেলে এমন সর্বাধিক সংখ্যক অবজেক্ট সংরক্ষণ করে।

int32_t takeSnapshot( signature &sig, uint32_t count );

Parameters

প্যারামিটার

প্রকার

বর্ণনা

id

uint32_t

অনুসন্ধান করার জন্য স্বাক্ষর শনাক্তকরণ নম্বর।

cc

code &

অনুসন্ধান করার জন্য একটি vision::code অবজেক্টের রেফারেন্স।

sig

signature &

অনুসন্ধান করার জন্য একটি vision::signature অবজেক্টের রেফারেন্স।

count

uint32_t

শনাক্ত করার জন্য বস্তুর সর্বাধিক সংখ্যা।

Return Values

শনাক্তকৃত মিলে যাওয়া অবজেক্টের সংখ্যা বোঝাতে একটি int32_t পূর্ণসংখ্যা রিটার্ন করে।

Notes
  • অবজেক্ট ডেটা অ্যাক্সেস করার আগে ভিশন সেন্সরকে অবশ্যই একটি স্ন্যাপশট নিতে হবে।

  • যখন count নির্দিষ্ট করা হয়, তখন শুধুমাত্র বৃহত্তম শনাক্তকৃত বস্তুগুলো (নির্দিষ্ট পরিমাণ পর্যন্ত) সংরক্ষণ করা হয়।

উদাহরণ

while (true) {
  // Display if a blue object is detected
  Vision1.takeSnapshot(Vision1__BLUEBOX);

  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);

  if (Vision1.objects[0].exists) {
    Brain.Screen.print("Blue detected");
  } 
  else {
    Brain.Screen.print("No blue");
  }

  wait(0.5, seconds);
}

// Display when a blue object is detected
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);

  Vision1.takeSnapshot(Vision1__BLUEBOX);

  if (Vision1.objects[0].exists) {
    Brain.Screen.print("Color detected!");
  }

  wait(100, msec); 
}

// Display when BOXCODE is detected
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);

  Vision1.takeSnapshot(Vision1__BOXCODE);

  if (Vision1.objects[0].exists) {
    Brain.Screen.print("Code detected!");
  }
  wait( 100, msec);
}

installed#

ভিশন সেন্সরটি EXP ব্রেইনের সাথে সংযুক্ত আছে কিনা তা জানায়।

Available Functions
bool installed();

Parameters

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

Return Values

ভিশন সেন্সরটি সংযুক্ত আছে কিনা তা নির্দেশ করে একটি বুলিয়ান মান প্রদান করে:

  • true — The Vision Sensor is connected.
  • false — The Vision Sensor is not connected.

বৈশিষ্ট্য#

takeSnapshot কল করলে ভিশন সেন্সরের সনাক্তকরণের ফলাফল আপডেট হয়। প্রতিটি স্ন্যাপশট objects অ্যারে রিফ্রেশ করে, যেটিতে অনুরোধ করা কালার সিগনেচার বা কালার কোডের জন্য সনাক্ত করা বস্তুগুলি থাকে।

ভিশন সেন্সর ডেটা Vision1.objects[index]এ সংরক্ষিত অবজেক্টগুলির প্রোপার্টির মাধ্যমে অ্যাক্সেস করা হয়, যেখানে index 0 থেকে শুরু হয়।

ভিশন সেন্সরের ছবির রেজোলিউশন হলো ৩১৬ বাই ২১২ পিক্সেল। বস্তুর অবস্থান এবং আকারের বৈশিষ্ট্যগুলো সেন্সরের বর্তমান দৃশ্যের সাপেক্ষে পিক্সেল এককে প্রকাশ করা হয়।

নিম্নলিখিত সম্পত্তিগুলো উপলব্ধ আছে:

  • largestObject — সাম্প্রতিকতম স্ন্যাপশট থেকে সনাক্ত করা বৃহত্তম বস্তুটি নির্বাচন করে।

  • objectCount — objects -এ সংরক্ষিত বৈধ অবজেক্টের সংখ্যা ফেরত দেয়।

  • objects — takeSnapshot দ্বারা আপডেট করা সনাক্তকৃত বস্তুগুলির অ্যারে।

  • .exists — অবজেক্ট এন্ট্রিতে বৈধ ডেটা আছে কিনা।

  • .width — সনাক্ত করা বস্তুর প্রস্থ, পিক্সেলে।

  • .height — সনাক্ত করা বস্তুর উচ্চতা, পিক্সেলে।

  • .centerX — পিক্সেলে বস্তুর কেন্দ্রের X অবস্থান।

  • .centerY — পিক্সেলে বস্তুর কেন্দ্রের Y অবস্থান।

  • .originX — অবজেক্টটির উপরের-বাম কোণার X অবস্থান, পিক্সেলে।

  • .originY — অবজেক্টটির উপরের-বাম কোণার Y অবস্থান, পিক্সেলে।

  • .angle — সনাক্তকৃত কালার কোডের অভিমুখ ডিগ্রিতে (যখন প্রযোজ্য)।

largestObject#

objects অ্যারে থেকে শনাক্তকৃত বৃহত্তম বস্তুটি পুনরুদ্ধার করে।

এই পদ্ধতিটি কোনো ইনডেক্স উল্লেখ না করেই objects মধ্য থেকে সর্বদা বৃহত্তম অবজেক্টটি পেতে ব্যবহার করা যেতে পারে।

Syntax
VisionSensor.largestObject

Components

উপাদান

বর্ণনা

VisionSensor

আপনার ভিশন সেন্সর ইনস্ট্যান্সটির নাম।

উদাহরণ

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Display the largest detected object's width
  while (true) {
    Vision1.takeSnapshot(Vision1__BLUEBOX);

    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);

    if (Vision1.objects[0].exists) {
      Brain.Screen.print("%d", Vision1.largestObject.width);
    } 
    wait(0.5, seconds);
  }
}

objectCount#

objects অ্যারের ভিতরে থাকা আইটেমের সংখ্যা একটি পূর্ণসংখ্যা হিসাবে ফেরত দেয়।

Syntax
VisionSensor.objectCount

Components

উপাদান

বর্ণনা

VisionSensor

আপনার ভিশন সেন্সর ইনস্ট্যান্সটির নাম।

উদাহরণ

int main() {
  // Initializing Robot Configuration. DO NOT REMOVE!
  vexcodeInit();

  // Display how many blue objects are detected
  while (true) {
    Vision1.takeSnapshot(Vision1__BLUEBOX);

    Brain.Screen.clearScreen();
    Brain.Screen.setCursor(1, 1);

    Brain.Screen.print("Object Count: %d", Vision1.objectCount);

    wait(0.5, seconds);
  }
}

objects#

objects হল একটি অ্যারে যা takeSnapshot এর সর্বশেষ কল থেকে সনাক্ত করা অবজেক্টগুলি ধারণ করে।

অ্যারের প্রতিটি উপাদান একটি সনাক্ত করা বস্তুকে প্রতিনিধিত্ব করে এবং এর বৈশিষ্ট্যগুলিতে অ্যাক্সেস সরবরাহ করে, যেমন width, height, centerX, এবং আরও অনেক কিছু।

অবজেক্টগুলো 0 ইন্ডেক্স থেকে শুরু করে বড় থেকে ছোট (প্রস্থ অনুসারে) ক্রমানুসারে সাজানো আছে।

Syntax
VisionSensor.objects[index].property

Components

উপাদান

বর্ণনা

VisionSensor

আপনার ভিশন সেন্সর ইনস্ট্যান্সটির নাম।

index

অ্যারেতে অবজেক্টের সূচক। সূচক 0 থেকে শুরু হয়।

property

উপলব্ধ অবজেক্ট প্রোপার্টিগুলোর মধ্যে একটি।

বিদ্যমান#

.exists ফেরত দেয় যে নির্দিষ্ট অবজেক্ট ইনডেক্সটিতে একটি বৈধ শনাক্তকৃত অবজেক্ট আছে কিনা।

অ্যাক্সেস

SensorName.objects[index].exists

রিটার্ন মান

নির্দিষ্ট অবজেক্ট ইনডেক্সটিতে একটি বৈধ শনাক্তকৃত অবজেক্ট আছে কিনা তা নির্দেশ করে একটি বুলিয়ান মান ফেরত দেয়:

  • true — A valid object exists at the specified index.
  • false — No object exists at the specified index.

উদাহরণ

// Display when a blue object is detected
while (true) {
  Brain.Screen.setCursor(1, 1);
  Brain.Screen.clearLine(1);

  Vision1.takeSnapshot(Vision1__BLUEBOX);

  if (Vision1.objects[0].exists) {
    Brain.Screen.print("Color detected!");
  }

  wait(100, msec); 
}

প্রস্থ#

.width শনাক্তকৃত অবজেক্টটির প্রস্থ ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].width

রিটার্ন মান

শনাক্তকৃত অবজেক্টের প্রস্থ পিক্সেলে প্রকাশ করে এমন একটি int পূর্ণসংখ্যা রিটার্ন করে। এর মান 1 থেকে 316 পর্যন্ত হতে পারে।

উদাহরণ

// Approach an object until it's at least 100 pixels wide
while (true) {
  Vision1.takeSnapshot(Vision1__BLUEBOX);
  if (Vision1.objects[0].exists && Vision1.objects[0].width < 100) {
    Drivetrain.driveFor(forward, 10, mm);
  } 
  else {
    Drivetrain.stop();
  }
  wait(0.5, seconds);
}

উচ্চতা#

.height শনাক্তকৃত অবজেক্টটির উচ্চতা ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].height

রিটার্ন মান

শনাক্তকৃত বস্তুর উচ্চতা পিক্সেলে প্রকাশ করে এমন একটি int পূর্ণসংখ্যা রিটার্ন করে। এর মান 1 থেকে 212 পর্যন্ত হয়ে থাকে।

উদাহরণ

// Approach an object until it's at least 100 pixels tall
while (true) {
  Vision1.takeSnapshot(Vision1__BLUEBOX);

  if (Vision1.objects[0].exists && Vision1.objects[0].height < 100) {
    Drivetrain.driveFor(forward, 10, mm);
  } 
  else {
    Drivetrain.stop();
  }
  wait(0.5, seconds);  // Avoid over-processing
}

.centerX#

.centerX শনাক্তকৃত বস্তুর কেন্দ্রের x-স্থানাঙ্ক ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].centerX

রিটার্ন মান

এটি অবজেক্টটির কেন্দ্রের x-স্থানাঙ্ককে পিক্সেলে প্রকাশ করে এমন একটি int রিটার্ন করে। এর মান 0 থেকে 316 পর্যন্ত হয়ে থাকে।

উদাহরণ

// Turn until an object is directly in front of the sensor
Drivetrain.setTurnVelocity(10, percent);
Drivetrain.turn(right);
while (true) {
  Vision1.takeSnapshot(Vision1__BLUEBOX);
  if (Vision1.objects[0].exists) {
    int centerX = Vision1.largestObject.centerX;
    if (140 < centerX && centerX < 180) {
      Drivetrain.stop();
    }
  }
  wait(0.5, seconds);
}

.centerY#

.centerY শনাক্তকৃত বস্তুর কেন্দ্রের y-স্থানাঙ্ক ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].centerY

রিটার্ন মান

এটি অবজেক্টটির কেন্দ্রের y-স্থানাঙ্ককে পিক্সেলে প্রকাশ করে এমন একটি int রিটার্ন করে। এর মান 0 থেকে 212 পর্যন্ত হয়ে থাকে।

উদাহরণ

// Approach an object until it's at least 90 pixels tall
while (true) {
  Vision1.takeSnapshot(Vision1__BLUEBOX);

  if (Vision1.objects[0].exists) {
    if (Vision1.objects[0].centerY < 90) {
      Drivetrain.drive(forward);
    } else {
      Drivetrain.stop();
    }
  } else {
    Drivetrain.stop();
  }
  wait(50, msec);
}

.originX#

.originX শনাক্তকৃত অবজেক্টের বাউন্ডিং বক্সের উপরের-বাম কোণার x-স্থানাঙ্ক ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].originX

রিটার্ন মান

এটি অবজেক্টের বাউন্ডিং বক্সের উপরের-বাম কোণার x-স্থানাঙ্ককে পিক্সেলে প্রকাশ করে, যা একটি int (পূর্ণসংখ্যা) রিটার্ন করে। এর মান 0 থেকে 316 পর্যন্ত হতে পারে।

উদাহরণ

// Display if an object is to the left or the right
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Vision1.takeSnapshot(Vision1__BLUEBOX);
  if (Vision1.objects[0].exists) {
    if (Vision1.objects[0].originX < 160) {
      Brain.Screen.print("To the left!");
    }
    else {
      Brain.Screen.print("To the right!");
    }
  }
  wait(0.5, seconds); 
}

.originY#

.originY শনাক্তকৃত অবজেক্টের বাউন্ডিং বক্সের উপরের-বাম কোণার y-স্থানাঙ্ক ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].originY

রিটার্ন মান

এটি অবজেক্টের বাউন্ডিং বক্সের উপরের-বাম কোণার y-স্থানাঙ্ককে পিক্সেলে প্রকাশ করে, যা একটি int (পূর্ণসংখ্যা) রিটার্ন করে। এর মান 0 থেকে 212 পর্যন্ত হতে পারে।

উদাহরণ

// Display if an object is close or far
while (true) {
  Brain.Screen.clearScreen();
  Brain.Screen.setCursor(1, 1);
  Vision1.takeSnapshot(Vision1__BLUEBOX);
  if (Vision1.objects[0].exists) {
    if (Vision1.objects[0].originY < 80) {
      Brain.Screen.print("Far");
    } else {
      Brain.Screen.print("Close");
    }
  }
  wait(0.5, seconds);
}

কোণ#

.angle শনাক্তকৃত কালার কোডের অভিমুখ ফেরত দেয়।

অ্যাক্সেস

SensorName.objects[index].angle

রিটার্ন মান

শনাক্তকৃত কালার কোডের অভিমুখ ডিগ্রিতে প্রকাশ করে এমন একটি double রিটার্ন করে। এর মান 0 থেকে 359.9 পর্যন্ত হয়ে থাকে।

উদাহরণ

// Turn left or right depending on how a configured
// Color Code is rotated
while (true) {
  Vision1.takeSnapshot(Vision1__BOXCODE);
  if (Vision1.objects[0].exists) {
    double angle = Vision1.objects[0].angle;
    if (70 < angle && angle < 110) {
      Drivetrain.turnFor(right, 45, degrees);
    }
    else if (250 < angle && angle < 290) {
      Drivetrain.turnFor(left, 45, degrees);
    }
    else {
      Drivetrain.stop();
    }
  }
  wait(0.5, seconds);
}