দৃষ্টি সেন্সর#
ভূমিকা#
V5 ভিশন সেন্সর থেকে ডেটা নিয়ন্ত্রণ ও অ্যাক্সেস করার জন্য vision ক্লাসটি ব্যবহৃত হয়। এই সেন্সরটি তার দৃষ্টিসীমার মধ্যে রঙের বৈশিষ্ট্য (কালার সিগনেচার) শনাক্ত ও ট্র্যাক করে, যা আপনার রোবটকে লক্ষ্যবস্তু চিহ্নিত করতে এবং রিয়েল টাইমে দৃশ্যমান তথ্যে সাড়া দিতে সাহায্য করে।
ভিশন সেন্সরটি একই সাথে একাধিক স্বতন্ত্র বস্তু শনাক্ত করতে পারে এবং বস্তুর অবস্থান, প্রস্থ, উচ্চতা ও কেন্দ্রের স্থানাঙ্কের মতো তথ্য প্রদান করে।
ক্লাস কনস্ট্রাক্টর#
vision(
int32_t index,
uint8_t bright,
Args&... sigs );
ক্লাস ডেস্ট্রাক্টর#
vision অবজেক্টটি ধ্বংস করে এবং সংশ্লিষ্ট রিসোর্সগুলো মুক্ত করে।
~vision();
প্যারামিটার#
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
যে স্মার্ট পোর্টের সাথে ভিশন সেন্সরটি সংযুক্ত থাকে, তা |
|
|
ভিশন সেন্সরের উজ্জ্বলতার মাত্রা। |
|
|
সেন্সরের সাথে নিবন্ধন করার জন্য এক বা একাধিক |
উদাহরণ#
// 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— ভিশন সেন্সরটি V5 ব্রেইনের সাথে সংযুক্ত আছে কিনা।
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 হবে।
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 );
Parameters6 — একটি স্ন্যাপশট নেয় এবং নির্দিষ্ট
vision::signatureঅবজেক্টের সাথে মেলে এমন সর্বাধিক সংখ্যক অবজেক্ট সংরক্ষণ করে।int32_t takeSnapshot( signature &sig, uint32_t count );
প্যারামিটার |
প্রকার |
বর্ণনা |
|---|---|---|
|
|
অনুসন্ধান করার জন্য স্বাক্ষর শনাক্তকরণ নম্বর। |
|
|
অনুসন্ধান করার জন্য একটি |
|
|
অনুসন্ধান করার জন্য একটি |
|
|
শনাক্ত করার জন্য বস্তুর সর্বাধিক সংখ্যা। |
শনাক্তকৃত মিলে যাওয়া অবজেক্টের সংখ্যা বোঝাতে একটি int32_t পূর্ণসংখ্যা রিটার্ন করে।
অবজেক্ট ডেটা অ্যাক্সেস করার আগে ভিশন সেন্সরকে অবশ্যই একটি স্ন্যাপশট নিতে হবে।
যখন
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#
ভিশন সেন্সরটি ভি৫ ব্রেইনের সাথে সংযুক্ত আছে কিনা তা জানায়।
Available Functionsbool installed();
এই ফাংশনটি কোনো প্যারামিটার গ্রহণ করে না।
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 মধ্য থেকে সর্বদা বৃহত্তম অবজেক্টটি পেতে ব্যবহার করা যেতে পারে।
VisionSensor.largestObject
উপাদান |
বর্ণনা |
|---|---|
|
আপনার ভিশন সেন্সর ইনস্ট্যান্সটির নাম। |
উদাহরণ
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 অ্যারের ভিতরে থাকা আইটেমের সংখ্যা একটি পূর্ণসংখ্যা হিসাবে ফেরত দেয়।
VisionSensor.objectCount
উপাদান |
বর্ণনা |
|---|---|
|
আপনার ভিশন সেন্সর ইনস্ট্যান্সটির নাম। |
উদাহরণ
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 ইন্ডেক্স থেকে শুরু করে বড় থেকে ছোট (প্রস্থ অনুসারে) ক্রমানুসারে সাজানো আছে।
VisionSensor.objects[index].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);
}