দৃষ্টি সেন্সর#
ভূমিকা#
ভিশন সেন্সর হলো একটি ক্যামেরা-ভিত্তিক সেন্সর যা রঙের বৈশিষ্ট্য এবং রঙের সংকেত শনাক্ত ও অনুসরণ করতে পারে। এটি একটি রোবটকে তার চারপাশ বিশ্লেষণ করতে এবং দৃশ্যমান সংকেতে সাড়া দিতে সাহায্য করে।
নীচের উদাহরণগুলির জন্য, কনফিগার করা ভিশন সেন্সরটির নাম হবে vision_1, এবং কনফিগার করা কালার সিগনেচার অবজেক্টগুলি, যেমন RED_BOX, এই API ডকুমেন্টেশন জুড়ে পরবর্তী সমস্ত উদাহরণে Vision ক্লাস মেথডগুলি উল্লেখ করার সময় ব্যবহৃত হবে।
নিম্নে সকল পদ্ধতির একটি তালিকা দেওয়া হলো:
গেটার্স — ভিশন সেন্সর থেকে ডেটা সংগ্রহ করে।
take_snapshot— একটি নির্দিষ্ট সিগনেচারের জন্য ডেটা ক্যাপচার করে।installed— ভিশন সেন্সরটি IQ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত কিনা।
বৈশিষ্ট্য — take_snapshot থেকে ফেরত আসা অবজেক্ট ডেটা।
largest_object— ভিশন সেন্সর স্ন্যাপশট থেকে অবিলম্বে বৃহত্তম বস্তুটি নির্বাচন করুন।.exists— বর্তমান সনাক্তকরণে বস্তুটি বিদ্যমান কিনা।.width— সনাক্ত করা বস্তুর প্রস্থ।.height— সনাক্ত করা বস্তুর উচ্চতা।.centerX— বস্তুটির কেন্দ্রের X অবস্থান।.centerY— বস্তুটির কেন্দ্রের Y অবস্থান।.angle— কালার কোডের অভিমুখ।.originX— বস্তুটির উপরের-বাম কোণার X অবস্থান।.originY— বস্তুটির উপরের-বাম কোণার Y অবস্থান।
কনস্ট্রাক্টর — সেন্সরগুলো ম্যানুয়ালি ইনিশিয়ালাইজ এবং কনফিগার করুন।
গেটার্স#
take_snapshot#
take_snapshot ভিশন সেন্সর ফ্রেম থেকে ডেটা ফিল্টার করে একটি একক সিগনেচারে নিয়ে আসে — যা হলো সেন্সর দ্বারা শনাক্তযোগ্য কোনো কিছুর একটি সংরক্ষিত বিবরণ, যেমন একটি কনফিগার করা কালার সিগনেচার বা কালার কোড — এবং একটি টাপল রিটার্ন করে।
এই পদ্ধতিতে ব্যবহার করার আগে কালার সিগনেচার এবং কালার কোড প্রথমে ভিশন ইউটিলিটিতে কনফিগার করতে হবে।
টাপলটি অবজেক্টগুলিকে প্রস্থ অনুসারে বৃহত্তম থেকে ক্ষুদ্রতম ক্রমে সংরক্ষণ করে, যা সূচক 0 থেকে শুরু হয়। প্রতিটি অবজেক্টের বৈশিষ্ট্য তার সূচক ব্যবহার করে অ্যাক্সেস করা যেতে পারে। যদি কোনও মিলে যাওয়া অবজেক্ট সনাক্ত করা না যায় তবে একটি খালি টাপল ফেরত দেওয়া হয়।
Usage:
vision_1.take_snapshot(SIGNATURE)
প্যারামিটার |
বর্ণনা |
|---|---|
|
প্রদত্ত সিগনেচারের ডেটা অন্তর্ভুক্ত করার জন্য ডেটাসেট ফিল্টার করে। উপলব্ধ সিগনেচারগুলো হলো:
|
# Move forward if a red object is detected
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
রঙিন স্বাক্ষর#
কালার সিগনেচার হলো একটি অনন্য রঙ যা ভিশন সেন্সর চিনতে পারে। এই সিগনেচারগুলো ভিশন সেন্সরকে বস্তুর রঙের উপর ভিত্তি করে সেগুলোকে শনাক্ত ও ট্র্যাক করতে সাহায্য করে। একবার একটি কালার সিগনেচার কনফিগার করা হলে, সেন্সরটি তার দৃষ্টিসীমার মধ্যে সেই নির্দিষ্ট রঙের বস্তুগুলোকে শনাক্ত করতে পারে। কালার সিগনেচারগুলো take_snapshot এর সাথে রিয়েল-টাইমে রঙিন বস্তু প্রসেস ও শনাক্ত করতে ব্যবহৃত হয়।
কোনো প্রজেক্টে কনফিগার করা কালার সিগনেচার ব্যবহার করার জন্য, এর নামটি অবশ্যই ভিশন সেন্সরের নাম, দুটি আন্ডারস্কোর এবং তারপরে কালার সিগনেচারটির নাম হতে হবে। উদাহরণস্বরূপ: vision_1__RED_BOX।
# Display if any objects match the RED_BOX signature
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Signature
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
brain.screen.print("Color signature detected!")
wait(100, MSEC)
রঙের কোড#
কালার কোড হলো নির্দিষ্ট ক্রমে সাজানো রঙের চিহ্ন দিয়ে গঠিত একটি কাঠামোগত নকশা। এই কোডগুলো ভিশন সেন্সরকে পূর্বনির্ধারিত রঙের প্যাটার্ন শনাক্ত করতে সাহায্য করে। জটিল বস্তু শনাক্ত করতে অথবা স্বয়ংক্রিয় নেভিগেশনের জন্য অনন্য নির্দেশক তৈরি করতে কালার কোডগুলো উপযোগী।
কোনো প্রোজেক্টে কনফিগার করা কালার কোড ব্যবহার করার জন্য, এর নামটি অবশ্যই সেন্সরের নাম, দুটি আন্ডারস্কোর এবং তারপরে কালার কোডটির নাম হতে হবে। উদাহরণস্বরূপ: vision_1__BOX_CODE।
# Display if any objects match the BOX_CODE code
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)
installed#
installed একটি বুলিয়ান মান প্রদান করে যা নির্দেশ করে যে ভিশন সেন্সরটি বর্তমানে IQ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত আছে কিনা।
True— ভিশন সেন্সরটি আইকিউ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত।False— ভিশন সেন্সরটি আইকিউ (২য় প্রজন্ম) ব্রেইনের সাথে সংযুক্ত নয়।
Usage:
vision_1.installed()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Installed!")
বৈশিষ্ট্য#
largest_object#
largest_object take_snapshot এর সর্বশেষ ব্যবহার থেকে ফেরত আসা টাপল থেকে ডেটা পাওয়ার জন্য বৃহত্তম সনাক্ত করা বস্তুটি পুনরুদ্ধার করে।
এই পদ্ধতিটি ব্যবহার করে কোনো ইনডেক্স উল্লেখ না করেই একটি টাপল থেকে সর্বদা বৃহত্তম অবজেক্টটি পাওয়া যায়।
Usage:
vision_1.largest_object()
# Turn slowly until the largest object is centered in
# front of the Vision Sensor
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
Tuple Properties#
take_snapshot ব্যবহার করার পরে একটি টাপলে সংরক্ষিত প্রতিটি অবজেক্টের সাথে আটটি বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
সমস্ত প্রপার্টি ভ্যালুগুলো, take_snapshot ব্যবহৃত হওয়ার মুহূর্তে ভিশন সেন্সরের ভিউতে শনাক্তকৃত অবজেক্টটির অবস্থান এবং আকার বর্ণনা করে। এই ভ্যালুগুলো সেন্সরের ৩১৬ বাই ২১২ পিক্সেল রেজোলিউশনের উপর ভিত্তি করে পিক্সেলে পরিমাপ করা হয়।
বিদ্যমান#
.exists একটি বুলিয়ান মান রিটার্ন করে, যা নির্দেশ করে যে ইন্ডেক্সটি টাপলটিতে বিদ্যমান আছে কি না।
True— সূচকটি বিদ্যমান।False— সূচকটি বিদ্যমান নেই।
# Check if at least one red objects is detected
# You will receive an error if no objects are detected
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1, 1)
red_objects = vision_1.take_snapshot(vision_1__RED_BOX)
if red_objects[0].exists:
brain.screen.print("At least 1")
else:
brain.screen.print("No red objects")
wait(0.5, SECONDS)
প্রস্থ#
.width শনাক্ত করা অবজেক্টটির প্রস্থ পিক্সেলে ফেরত দেয়, যা ১ থেকে ৩১৬-এর মধ্যে একটি পূর্ণসংখ্যা।
# Move towards a blue object until its width is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].width < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
উচ্চতা#
.height শনাক্ত করা বস্তুটির উচ্চতা পিক্সেলে ফেরত দেয়, যা 1 থেকে 212-এর মধ্যে একটি পূর্ণসংখ্যা।
# Move towards a blue object until its height is
# larger than 100 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].height < 100:
drivetrain.drive_for(FORWARD, 10, MM)
else:
drivetrain.stop()
wait(50, MSEC)
.centerX#
.centerX শনাক্তকৃত বস্তুর কেন্দ্রের x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 316-এর মধ্যে একটি পূর্ণসংখ্যা।
# Turn slowly until the largest blue object is centered
# in front of the Vision Sensor.
drivetrain.set_turn_velocity(10, PERCENT)
drivetrain.turn(RIGHT)
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if 140 < vision_1.largest_object().centerX < 180:
drivetrain.stop()
wait(10,MSEC)
.centerY#
.centerY শনাক্তকৃত বস্তুর কেন্দ্রের y-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 212-এর মধ্যে একটি পূর্ণসংখ্যা।
# Move towards a blue object until its
# center y-coordinate is more than 140 pixels
while True:
blue_box = vision_1.take_snapshot(vision_1__BLUE_BOX)
if blue_box[0].exists:
if blue_box[0].centerY < 140:
drivetrain.drive(FORWARD)
else:
drivetrain.stop()
wait(50, MSEC)
কোণ#
.angle শনাক্তকৃত বস্তুটির অভিমুখ ডিগ্রিতে ফেরত দেয়, যা ০ থেকে ৩৫৯-এর মধ্যে একটি পূর্ণসংখ্যা।
# Turn left or right depending on how a
# configured box code is rotated
while True:
box_code = vision_1.take_snapshot(vision_1__BOX_CODE)
if box_code[0].exists:
if 50 < box_code[0].angle < 100:
drivetrain.turn(RIGHT)
elif 270 < box_code[0].angle < 330:
drivetrain.turn(LEFT)
else:
drivetrain.stop()
else:
drivetrain.stop()
wait(50, MSEC)
.originX#
.originX শনাক্তকৃত অবজেক্টের বাউন্ডিং বক্সের উপরের-বাম কোণার x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 316-এর মধ্যে একটি পূর্ণসংখ্যা।
# Display if a red object is to the
# left or the right
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originX < 160:
brain.screen.print("To the left!")
else:
brain.screen.print("To the right!")
wait(50, MSEC)
.originY#
.originY শনাক্ত করা বস্তুর বাউন্ডিং বক্সের উপরের-বাম কোণার y-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 212-এর মধ্যে একটি পূর্ণসংখ্যা।
# Display if a red object is close or far
# from the robot
while True:
brain.screen.clear_screen()
brain.screen.set_cursor(1,1)
red_box = vision_1.take_snapshot(vision_1__RED_BOX)
if red_box[0].exists:
if red_box[0].originY < 80:
brain.screen.print("Far")
else:
brain.screen.print("Close")
wait(50, MSEC)
নির্মাণকারী#
Constructors are used to manually create Vision, Signature, and Code objects, which are necessary for configuring the sensors outside of VEXcode.
Vision Sensor#
Vision একটি ভিশন সেন্সর তৈরি করে।
ব্যবহারবিধি
Vision(port, brightness, sigs)
প্যারামিটার |
বর্ণনা |
|---|---|
|
ভিশন সেন্সরটি ১ থেকে ১২ এর মধ্যে কোন স্মার্ট পোর্টের সাথে সংযুক্ত আছে। |
|
ঐচ্ছিক। ভিশন সেন্সরের উজ্জ্বলতার মান, ১ থেকে ১০০ পর্যন্ত। |
|
ঐচ্ছিক। এক বা একাধিক রঙের স্বাক্ষর অথবা রঙের কোড অবজেক্টের নাম। |
উদাহরণ
# Create a new Signature "RED_BOX" with the Signature class
RED_BOX = Signature(1, -3911, -3435, -3673,10879, 11421, 11150,2.5, 0)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the "RED_BOX" Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Signature#
Signature একটি কালার সিগনেচার তৈরি করে। একটি ভিশন সেন্সরে একবারে সর্বোচ্চ সাতটি ভিন্ন কালার সিগনেচার সংরক্ষণ করা যেতে পারে।
ব্যবহারবিধি:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
প্যারামিটার |
বর্ণনা |
|---|---|
|
|
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে vMax-এর মান |
|
ভিশন ইউটিলিটিতে মান |
|
ভিশন ইউটিলিটিতে মানটি হলো |
|
ভিশন ইউটিলিটিতে মানটি |
কালার সিগনেচার তৈরি করার জন্য মানগুলি পেতে, ভিশন ইউটিলিটি-তে যান। একবার কালার সিগনেচার কনফিগার করা হয়ে গেলে, কনফিগারেশন উইন্ডো থেকে প্যারামিটার মানগুলি কপি করুন।
উদাহরণ
# Create a new Signature RED_BOX with the Signature class
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the RED_BOX Signature.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX)
# Move forward if a red object is detected
while True:
red_object = vision_1.take_snapshot(RED_BOX)
if red_object[0].exists:
drivetrain.drive_for(FORWARD, 10, MM)
wait(5, MSEC)
Color Code#
কোড Code এটি ব্যবহার করার জন্য আগে থেকে সংজ্ঞায়িত কমপক্ষে দুটি কালার সিগনেচার প্রয়োজন। একটি ভিশন সেন্সরে একবারে সর্বোচ্চ আটটি ভিন্ন কালার কোড সংরক্ষণ করা যেতে পারে।
ব্যবহারবিধি:
Code(sig1, sig2, sig3, sig4, sig5)
প্যারামিটার |
বর্ণনা |
|---|---|
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা একটি রঙিন স্বাক্ষর। |
উদাহরণ
# Create two new Signatures for a red and blue box
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440, 2.5, 1)
BLUE_BOX = Signature(2, -4443, -3373, -3908,6253, 7741, 6997, 2.5, 1)
# Create a Color Code for a red box to the left of a blue box
RED_BLUE = Code(RED_BOX, BLUE_BOX)
# Create a new Vision Sensor "vision_1" with the Vision
# class, with the red_box and blue_box Signatures.
vision_1 = Vision(Ports.PORT1, 100, RED_BOX, BLUE_BOX)
# Display a message if Color Code is detected
while True:
brain.screen.set_cursor(1, 1)
brain.screen.clear_row(1)
# Change to any configured Color Code
box_code = vision_1.take_snapshot(RED_BLUE)
if box_code[0].exists:
brain.screen.print("Color code detected!")
wait(100, MSEC)