দৃষ্টি#
ভূমিকা#
VEX V5-এর ভিশন সেন্সরটি রঙের বৈশিষ্ট্য এবং রঙের কোড শনাক্ত ও অনুসরণ করে। এর ফলে ভিশন সেন্সরটি তার চারপাশ বিশ্লেষণ করতে এবং শনাক্তকৃত দৃশ্যমান তথ্যের ভিত্তিতে প্রতিক্রিয়া জানাতে পারে।
এই পৃষ্ঠায় উদাহরণস্বরূপ ভিশন সেন্সর, কালার সিগনেচার এবং কালার কোডের নাম হিসেবে যথাক্রমে vision_1, RED_BOX, এবং BOX_CODE ব্যবহার করা হয়েছে। প্রয়োজন অনুযায়ী এগুলিকে আপনার নিজস্ব কনফিগার করা নাম দিয়ে প্রতিস্থাপন করুন।
নিম্নে সকল পদ্ধতির একটি তালিকা দেওয়া হলো:
গেটার – ভিশন সেন্সর থেকে ডেটা সংগ্রহ করে।
take_snapshot– একটি নির্দিষ্ট কালার সিগনেচার বা কালার কোডের জন্য ডেটা ক্যাপচার করে।largest_object– স্ন্যাপশট থেকে বৃহত্তম বস্তুটি নির্বাচন করুন।installed– ভিশন সেন্সরটি V5 ব্রেইনের সাথে সংযুক্ত আছে কিনা।
বৈশিষ্ট্য – take_snapshot থেকে ফেরত আসা অবজেক্ট ডেটা।
.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)
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)
installed#
installed একটি বুলিয়ান মান প্রদান করে যা নির্দেশ করে যে ভিশন সেন্সরটি বর্তমানে V5 ব্রেইনের সাথে সংযুক্ত আছে কিনা।
True– ভিশন সেন্সরটি ভি৫ ব্রেইনের সাথে সংযুক্ত।False– ভিশন সেন্সরটি ভি৫ ব্রেইনের সাথে সংযুক্ত নয়।
Usage:
vision_1.installed()
প্যারামিটার |
বর্ণনা |
|---|---|
এই পদ্ধতিতে কোনো প্যারামিটার নেই। |
# Display a message if the Vision Sensor is connected
if vision_1.installed():
brain.screen.print("Vision Sensor Installed!")
বৈশিষ্ট্য#
take_snapshot ব্যবহার করার পরে একটি টাপলে সংরক্ষিত প্রতিটি অবজেক্টের সাথে আটটি বৈশিষ্ট্য অন্তর্ভুক্ত থাকে।
সমস্ত প্রপার্টি ভ্যালুগুলো, take_snapshot ব্যবহৃত হওয়ার মুহূর্তে ভিশন সেন্সরের ভিউতে শনাক্তকৃত অবজেক্টটির অবস্থান এবং আকার বর্ণনা করে। এই ভ্যালুগুলো সেন্সরের ৩১৬ বাই ২১২ পিক্সেল রেজোলিউশনের উপর ভিত্তি করে পিক্সেলে পরিমাপ করা হয়।
.exists#
.exists একটি বুলিয়ান মান রিটার্ন করে, যা নির্দেশ করে যে ইন্ডেক্সটি টাপলটিতে বিদ্যমান আছে কি না।
True: সূচকটি বিদ্যমান।False: সূচকটি বিদ্যমান নেই।
# Check if at least one red object 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#
.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#
.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#
.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 70 < box_code[0].angle < 110:
drivetrain.turn_for(RIGHT, 45, DEGREES)
elif 250 < box_code[0].angle < 290:
drivetrain.turn_for(LEFT, 45, DEGREES)
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 Vision Sensor outside of VEXcode.
Vision#
Vision একটি ভিশন সেন্সর তৈরি করে।
ব্যবহারবিধি
Vision(smartport, brightness, sigs)
প্যারামিটার |
বর্ণনা |
|---|---|
|
যে স্মার্ট পোর্টের সাথে ভিশন সেন্সরটি সংযুক্ত থাকে, তা |
|
ঐচ্ছিক। ভিশন সেন্সরের উজ্জ্বলতার মান, ১ থেকে ১০০ পর্যন্ত। |
|
ঐচ্ছিক। কমা ( |
# Create the Color Signatures
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 the Color Code
BOX_CODE = Code(RED_BOX, BLUE_BOX)
"""
Create a Vision Sensor with the following values:
- Port 1
- brightness: 80
- RED_BOX and BOX_CODE signatures
"""
vision_1 = Vision(Ports.PORT1, 80, RED_BOX, BOX_CODE)
Signature#
Signature একটি কালার সিগনেচার তৈরি করে। একটি ভিশন সেন্সরে একবারে সর্বোচ্চ সাতটি ভিন্ন কালার সিগনেচার সংরক্ষণ করা যেতে পারে।
ব্যবহারবিধি:
Signature(index, uMin, uMax, uMean, vMin, vMax, vMean, rgb, type)
প্যারামিটার |
বর্ণনা |
|---|---|
|
|
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে |
|
ভিশন ইউটিলিটিতে মানটি |
|
ভিশন ইউটিলিটিতে vMax-এর মান |
|
ভিশন ইউটিলিটিতে মান |
|
ভিশন ইউটিলিটিতে মানটি হলো |
|
ভিশন ইউটিলিটিতে মানটি |
কালার সিগনেচার তৈরি করার জন্য মানগুলি পেতে, ভিশন ইউটিলিটি-তে যান। একবার কালার সিগনেচার কনফিগার করা হয়ে গেলে, কনফিগারেশন উইন্ডো থেকে প্যারামিটার মানগুলি কপি করুন।
"""
Create a Color Signature with the following values:
- index: 1
- uMin: 10121
- uMax: 10757
- uMean: 10439
- vMin: -1657
- vMax: -1223
- vMean: -1440
- rgb: 2.5
- type: 1
"""
RED_BOX = Signature(1, 10121, 10757, 10439,-1657, -1223, -1440,2.5, 1)
Code#
কোড Code এটি ব্যবহার করার জন্য আগে থেকে সংজ্ঞায়িত কমপক্ষে দুটি কালার সিগনেচার প্রয়োজন। একটি ভিশন সেন্সরে একবারে সর্বোচ্চ আটটি ভিন্ন কালার কোড সংরক্ষণ করা যেতে পারে।
ব্যবহারবিধি:
Code(sig1, sig2, sig3, sig4, sig5)
প্যারামিটার |
বর্ণনা |
|---|---|
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
|
ঐচ্ছিক। পূর্বে তৈরি করা রঙিন স্বাক্ষর। |
# Create the Color Signatures
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 with the Color Signatures
BOX_CODE = Code(RED_BOX, BLUE_BOX)