এআই ভিশন#

ভূমিকা#

VEX AIM কোডিং রোবটের এআই ভিশন সেন্সর বস্তু, রঙ এবং এপ্রিলট্যাগ আইডি শনাক্ত ও ট্র্যাক করে। এর ফলে রোবটটি তার চারপাশ বিশ্লেষণ করতে, বস্তু অনুসরণ করতে এবং শনাক্তকৃত দৃশ্যমান তথ্যের ভিত্তিতে প্রতিক্রিয়া জানাতে পারে।

এআই ভিশন সেন্সরটির রেজোলিউশন হলো 320×240 পিক্সেল। মূলবিন্দু (0, 0) উপরের-বাম কোণে অবস্থিত, যা সেন্সরটির কেন্দ্রকে (160, 120) অবস্থানে স্থাপন করে, যেমনটি নীচের ডায়াগ্রামে দেখানো হয়েছে:

এআইএম এআই ভিশন সেন্সরের রেজোলিউশন দেখানো একটি ডায়াগ্রাম, যেখানে ডায়াগ্রামের উপরের বাম দিকে 0, 0 স্থানাঙ্ক, উপরের ডান দিকে 320, 0, এবং নীচের বাম দিকে 0, 240 স্থানাঙ্ক রয়েছে, এবং ঠিক কেন্দ্রে 160, 120 স্থানাঙ্ক রয়েছে।

নিম্নে সকল মেথড এবং প্রপার্টির একটি তালিকা দেওয়া হলো:

ক্রিয়াকলাপ — এআই ভিশন ক্যামেরা ফিড দেখান বা লুকান।

  • show_aivision — রোবটের স্ক্রিনে এআই ভিশন ফিড প্রদর্শন করে।

  • hide_aivision — স্ক্রিন থেকে এআই ভিশন ফিড লুকিয়ে রাখে।

  • tag_detection — এপ্রিলট্যাগ আইডি সনাক্তকরণ চালু বা বন্ধ করে।

গেটার — রোবটটি কোনো বস্তু ধরে আছে কিনা তা শনাক্ত করে।

  • get_data — একটি নির্দিষ্ট সিগনেচারের জন্য সনাক্ত করা অবজেক্টগুলির একটি টাপল ফেরত দেয়।

  • has_sports_ball — রোবটটির কাছে খেলার বল আছে কিনা তা ফেরত দেয়।

  • has_any_barrel — রোবটটির কোনো ধরনের ব্যারেল আছে কিনা তা ফেরত দেয়।

  • has_blue_barrel — রোবটটির একটি নীল ব্যারেল আছে কিনা তা ফেরত দেয়।

  • has_orange_barrel — রোবটটির একটি কমলা ব্যারেল আছে কিনা তা ফেরত দেয়।

বৈশিষ্ট্য — get_data থেকে ফেরত আসা অবজেক্ট ডেটা।

  • exists — বস্তুটি বর্তমান সনাক্তকরণে একটি বুলিয়ান হিসাবে বিদ্যমান কিনা।

  • width — সনাক্ত করা বস্তুর প্রস্থ।

  • height — সনাক্ত করা বস্তুর উচ্চতা।

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

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

  • bearing — রোবটের সামনের সাপেক্ষে অনুভূমিক কোণ।

  • rotation — বস্তুর অভিমুখ।

  • originX — বস্তুটির উপরের-বাম কোণার X অবস্থান।

  • originY — বস্তুটির উপরের-বাম কোণার Y অবস্থান।

  • id — বস্তুটির শ্রেণীবিভাগ বা ট্যাগ আইডি।

  • score — এআই শ্রেণীকরণের জন্য আত্মবিশ্বাস স্কোর।

  • type — অবজেক্টটির ধরণ (AI, Tag, Color, অথবা Code) ফেরত দেয়।

কনস্ট্রাক্টর — রঙের স্বাক্ষর এবং কোড নির্ধারণ করে।

কর্ম#

show_aivision#

show_aivision রোবটের স্ক্রিনে এআই ভিশন সেন্সরের লাইভ ডেটা ফিড প্রদর্শন করে। এই লাইভ ডেটা ফিড স্ক্রিনের অন্য যেকোনো ছবি বা লেখাকে ঢেকে দেবে।

দ্রষ্টব্য: hide_aivision ব্যবহার করে ফিডটি লুকানো না হলে স্ক্রিনে অন্য কোনো ছবি বা লেখা প্রদর্শিত হবে না।

Usage:
robot.screen.show_aivision()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Watch the AI Vision Sensor detect AI Classifications
# and AprilTag IDs as you move the robot
robot.screen.show_aivision()

hide_aivision#

hide_aivision রোবটের স্ক্রিন থেকে এআই ভিশন সেন্সরের লাইভ ডেটা ফিড সরিয়ে দেয়।

Usage:
robot.screen.hide_aivision()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# View the AI Vision Sensor's feed for five seconds
robot.screen.show_aivision()
wait(5, SECONDS)
robot.screen.hide_aivision()

tag_detection#

tag_detection এপ্রিলট্যাগ আইডি শনাক্তকরণ সক্ষম বা অক্ষম করে, যেখানে অবস্থাটি একটি বুলিয়ান মান।

সেন্সরটি Circle21h7 ফ্যামিলির AprilTag আইডি ০ থেকে ৩৬ পর্যন্ত শনাক্ত করতে পারে।

Usage:
robot.vision.tag_detection(state)

প্যারামিটার

বর্ণনা

state

মানগুলো হলো: True, যা এপ্রিলট্যাগ আইডি শনাক্তকরণ সক্ষম করে, অথবা False, যা এপ্রিলট্যাগ আইডি শনাক্তকরণ অক্ষম করে।

robot.screen.set_font(PROP30)

# Cut off AprilTag ID detection after 5 seconds
while True:
    if timer.time(SECONDS) > 5:
        robot.vision.tag_detection(False)

    robot.screen.clear_screen()
    robot.screen.set_cursor(3, 1)
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        robot.screen.print("AprilTag ID detected!")
    else:
        robot.screen.print("Nothing detected!")

    wait(0.1, SECONDS)

গেটার্স#

get_data#

get_data AI ভিশন সেন্সর ফ্রেম থেকে ডেটা ফিল্টার করে একটি একক সিগনেচারে নিয়ে আসে — যা হলো সেন্সর দ্বারা শনাক্তযোগ্য কোনো কিছুর একটি সংরক্ষিত বিবরণ, যেমন একটি প্রি-ট্রেইনড অবজেক্ট, একটি এপ্রিলট্যাগ আইডি, অথবা একটি কনফিগার করা কালার সিগনেচার বা কালার কোড — এবং একটি tuple রিটার্ন করে।

এই পদ্ধতিতে ব্যবহার করার আগে কালার সিগনেচার এবং কালার কোড প্রথমে এআই ভিশন ইউটিলিটিতে কনফিগার করতে হবে।

টাপল অবজেক্টগুলিকে প্রস্থ অনুসারে বড় থেকে ছোট ক্রমে সংরক্ষণ করে, যা সূচক 0 থেকে শুরু হয়। প্রতিটি অবজেক্টের বৈশিষ্ট্য তার সূচক ব্যবহার করে অ্যাক্সেস করা যেতে পারে। যদি কোনও মিলযুক্ত অবজেক্ট সনাক্ত করা না যায় তবে একটি খালি টাপল ফেরত দেওয়া হয়।

Usage:
robot.vision.get_data(signature, count)

প্যারামিটার

বর্ণনা

signature

ডেটাসেটটিকে ফিল্টার করে শুধুমাত্র প্রদত্ত স্বাক্ষরের ডেটা অন্তর্ভুক্ত করা হয়। উপলব্ধ সিগনেচারগুলো হলো:

  • ALL_VISION - স্পোর্টস বল, ব্যারেল, VEX AIM কোডিং রোবট, এপ্রিলট্যাগ আইডি, রঙ এবং কালার কোড
  • ALL_CARGO - স্পোর্টস বল এবং ব্যারেল
  • ALL_TAGS - সমস্ত এপ্রিলট্যাগ আইডি
  • ALL_COLORS - সমস্ত কনফিগার করা কালার সিগনেচার এবং কালার কোড
  • SPORTS_BALL - শুধুমাত্র স্পোর্টস বল
  • BLUE_BARREL - শুধুমাত্র নীল ব্যারেল
  • ORANGE_BARREL - শুধুমাত্র কমলা ব্যারেল
  • AIM_ROBOT - সমস্ত VEX AIM কোডিং রোবট
  • TAG0 থেকে TAG37 - একটি একক এপ্রিলট্যাগ আইডি ০ থেকে ৩৭ পর্যন্ত
  • NAME - রঙের স্বাক্ষর বা রঙের কোড যেখানে NAME হলো এআই ভিশন ইউটিলিটিতে কনফিগার করা নাম।

count

ঐচ্ছিক। ১ থেকে ২৪ পর্যন্ত ফেরতযোগ্য অবজেক্টের সর্বোচ্চ সংখ্যা নির্ধারণ করে (ডিফল্ট: ৮)।

দ্রষ্টব্য: AIM প্রিন্টেবলস থেকে মুদ্রিত এপ্রিলট্যাগ আইডি ব্যবহার করে এপ্রিলট্যাগ আইডি 5 থেকে 37 পাওয়া যাবে।

# Move forward if a sports ball is detected
while True:
    ball = robot.vision.get_data(SPORTS_BALL)
    if ball[0].exists:
        robot.move_for(10, 0)
    wait(50, MSEC)

দ্রষ্টব্য: ফেরত আসা টাপলটিকে পাইথনের sorted ফাংশন ব্যবহার করে শুধুমাত্র প্রস্থ (width) নয়, যেকোনো প্রপার্টি অনুসারে সাজানো যেতে পারে। উদাহরণস্বরূপ, এপ্রিলট্যাগ আইডি (AprilTag ID) অনুসারে সাজানো:

# Print each detected AprilTag ID in ascending order by ID
while True:
    apriltags = sorted(robot.vision.get_data(ALL_TAGS), key=id)
    for tag in apriltags:
        print(tag.id)
    wait(1, SECONDS)

অথবা এর পরিবর্তে উচ্চতা অনুসারে সাজানো:

# Print each detected AprilTag ID in ascending order by height
while True:
    apriltags_by_height = sorted(robot.vision.get_data(ALL_TAGS), key=lambda tag: tag.height)
    for tag in apriltags_by_height:
        print(tag.height)
    wait(1, SECONDS)

ডেটা দেখা#

get_data দ্বারা ফেরত আসা টাপলটি প্রিন্ট করলে শনাক্ত করা সমস্ত অবজেক্টের সমস্ত প্রপার্টির একটি তালিকা প্রদর্শিত হয়:

# Display properties of all detected AprilTag IDs
while True:
    vision_data = robot.vision.get_data(ALL_TAGS)

    if vision_data[0].exists:
        break

    wait(0.25, SECONDS)

print(vision_data)

শনাক্তকৃত এপ্রিলট্যাগ আইডিগুলির জন্য ডিবাগ আউটপুট প্রদর্শনকারী কনসোল উইন্ডোর স্ক্রিনশট। টেক্সটটিতে 'অবজেক্ট #০'-কে তালিকাভুক্ত করা হয়েছে যার ফিল্ডগুলি হলো exists: True, type: AprilTag ID, id: 2, centerX: 223, centerY: 54, originX: 210, originY: 42, width: 27, height: 23, bearing: 14.1, এবং rotation: 0.0, এর পরে একটি বিভাজক রেখা এবং 'অবজেক্ট #১'-এর শুরু রয়েছে যার ফিল্ডগুলি হলো exists: True, type: AprilTag ID, id: 4, এবং centerX: 122।

এআই শ্রেণিবিন্যাস#

এআইএম এআই ভিশন সেন্সর এই এআই শ্রেণীবিভাগগুলো শনাক্ত করতে পারে:

আইডি নম্বর

এআই শ্রেণিবিন্যাস

স্বাক্ষর

০

বল

SPORTS_BALL

১

নীল ব্যারেল

BLUE_BARREL

২

কমলা ব্যারেল

ORANGE_BARREL

৩

এইম রোবট

AIM_ROBOT

রঙিন স্বাক্ষর#

কালার সিগনেচার হলো একটি অনন্য রঙ যা এআই ভিশন সেন্সর চিনতে পারে। এই সিগনেচারগুলো সেন্সরকে বস্তুর রঙের উপর ভিত্তি করে সেগুলোকে শনাক্ত ও ট্র্যাক করতে সাহায্য করে। একবার একটি কালার সিগনেচার কনফিগার করা হলে, সেন্সর তার দৃষ্টিসীমার মধ্যে সেই নির্দিষ্ট রঙের বস্তুগুলোকে শনাক্ত করতে পারে। রিয়েল-টাইমে রঙিন বস্তু প্রসেস ও শনাক্ত করার জন্য get_data এর সাথে কালার সিগনেচার ব্যবহার করা হয়।

এআই ভিশন ইউটিলিটি, যেখানে একটি সংযুক্ত ভিশন সেন্সর দুটি রঙিন বস্তু শনাক্ত করছে। বাম দিকে একটি লাইভ ক্যামেরা ফিড দেখা যাচ্ছে, যেখানে বামে একটি নীল বাক্স এবং ডানে একটি লাল বাক্স রয়েছে, প্রতিটি সাদা বাউন্ডিং বক্স দ্বারা চিহ্নিত। কালো লেবেলে তাদের নিজ নিজ নাম, স্থানাঙ্ক এবং মাত্রা দেখানো হয়েছে। ডান দিকে কালার সিগনেচার সেটিংস রয়েছে, যেখানে লাল এবং নীল উভয় বাক্সের জন্য হিউ এবং স্যাচুরেশন রেঞ্জের স্লাইডার আছে। নীচে রঙ যোগ করা, ভিডিও ফ্রিজ করা, কপি করা এবং ছবি সংরক্ষণ করার বাটন রয়েছে, সাথে নীচের ডান কোণায় একটি ক্লোজ বাটন আছে।

# Display if any objects match the Red_Box signature
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Signature
    ai_objects = robot.vision.get_data(Red_Box)
    if ai_objects[0].exists:
        robot.screen.print("Color signature detected!")

রঙের কোড#

কালার কোড হলো ২ থেকে ৪টি রঙের স্বাক্ষর দিয়ে গঠিত একটি কাঠামোগত প্যাটার্ন, যা একটি নির্দিষ্ট ক্রমে সাজানো থাকে। এই কোডগুলো এআই ভিশন সেন্সরকে রঙের পূর্বনির্ধারিত প্যাটার্ন শনাক্ত করতে সাহায্য করে। জটিল বস্তু শনাক্ত করতে অথবা স্বয়ংক্রিয় নেভিগেশনের জন্য অনন্য মার্কার তৈরি করতে কালার কোডগুলো উপযোগী।

এআই ভিশন ইউটিলিটি ইন্টারফেসে একটি সংযুক্ত ভিশন সেন্সর দেখা যাচ্ছে যা দুটি সংলগ্ন বস্তু সনাক্ত করছে, বামে একটি নীল বাক্স এবং ডানে একটি লাল বাক্স, যা ব্লুরেড লেবেলযুক্ত একটি একক সাদা বাউন্ডিং বাক্সে একত্রিত। সনাক্তকরণ তথ্যের মধ্যে রয়েছে কোণ (A:11°), স্থানাঙ্ক (X:143, Y:103), প্রস্থ (W:233), এবং উচ্চতা (H:108)। ডান প্যানেলে, তিনটি রঙের স্বাক্ষর তালিকাভুক্ত করা হয়েছে: রেড_বক্স, ব্লু_বক্স, এবং ব্লুরেড, যেগুলোর হিউ এবং স্যাচুরেশন পরিসীমা সামঞ্জস্যযোগ্য। ব্লুরেড স্বাক্ষরটি ব্লু_বক্স এবং রেড_বক্সকে একত্রিত করে। ভিডিও ফিডের নীচে ফ্রিজ ভিডিও, কপি ইমেজ, সেভ ইমেজ, এবং ক্লোজ লেবেলযুক্ত বোতাম রয়েছে।

# Display if any objects match the BlueRed code
while True:
    robot.screen.set_cursor(1, 1)
    robot.screen.clear_row(1)
    # Change to any configured Color Code
    ai_objects = robot.vision.get_data(BlueRed)
    if ai_objects[0].exists:
        robot.screen.print("Color code detected!")

has_sports_ball#

has_sports_ball একটি বুলিয়ান মান রিটার্ন করে যা নির্দেশ করে রোবটটির কাছে বর্তমানে একটি খেলার বল আছে কিনা।

  • True — রোবটটির একটি খেলার বল আছে।

  • False — রোবটটির কাছে খেলার বল নেই।

Usage:
robot.has_sports_ball()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Kick when the robot has a sports ball
while True:
    if robot.has_sports_ball():
        robot.kicker.kick(MEDIUM)

    wait(50, MSEC)

has_any_barrel#

has_any_barrel একটি বুলিয়ান মান রিটার্ন করে যা নির্দেশ করে যে রোবটটির বর্তমানে কোনো ধরনের ব্যারেল আছে কি না।

  • True — রোবটটির একটি ব্যারেল আছে।

  • False — রোবটটির কোনো ব্যারেল নেই।

Usage:
robot.has_any_barrel()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Push a barrel away when detected
while True:
    if robot.has_any_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_blue_barrel#

has_blue_barrel একটি বুলিয়ান মান রিটার্ন করে যা নির্দেশ করে রোবটটির বর্তমানে একটি নীল ব্যারেল আছে কিনা।

  • True — রোবটটির একটি নীল ব্যারেল আছে।

  • False — রোবটটির একটি নীল ব্যারেল নেই।

Usage:
robot.has_blue_barrel()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Push a blue barrel away when detected
while True:
    if robot.has_blue_barrel():
        robot.kicker.place()

    wait(50, MSEC)

has_orange_barrel#

has_orange_barrel একটি বুলিয়ান মান রিটার্ন করে যা নির্দেশ করে রোবটটির কাছে বর্তমানে একটি কমলা রঙের ব্যারেল আছে কিনা।

  • True — রোবটটির একটি কমলা রঙের ব্যারেল আছে।

  • False — রোবটটির একটি কমলা রঙের ব্যারেল নেই।

Usage:
robot.has_orange_barrel()

প্যারামিটার

বর্ণনা

এই পদ্ধতিতে কোনো প্যারামিটার নেই।

# Push an orange barrel away when detected
while True:
    if robot.has_orange_barrel():
        robot.kicker.place()

    wait(50, MSEC)

বৈশিষ্ট্য#

robot.vision.get_data মেথডটি ব্যবহার করার পর একটি টাপলে সংরক্ষিত প্রতিটি অবজেক্টের সাথে বারোটি প্রপার্টি অন্তর্ভুক্ত থাকে।

.id, .score, এবং .type বাদে বাকি সমস্ত প্রপার্টি ভ্যালু, robot.vision.get_data ব্যবহার করার মুহূর্তে শনাক্তকৃত বস্তুর অবস্থান, আকার, অভিমুখ বা দিক বর্ণনা করে। এই মানগুলি সেন্সরের 320 বাই 240 পিক্সেল রেজোলিউশনের উপর ভিত্তি করে পিক্সেল বা ডিগ্রিতে পরিমাপ করা হয়।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। এর x এবং y অক্ষের উপরে বাম থেকে ডানে ০ থেকে ৩২০ এবং বাম পাশে উপর থেকে নিচে ০ থেকে ২৪০ পর্যন্ত চিহ্নিত করা আছে।

.exists#

.exists একটি বুলিয়ান মান রিটার্ন করে, যা নির্দেশ করে যে ইন্ডেক্সটি টাপলটিতে বিদ্যমান আছে কি না।

  • True — সূচকটি বিদ্যমান।

  • False — সূচকটি বিদ্যমান নেই।

# Check if at least two objects are detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    ai_objects = robot.vision.get_data(ALL_CARGO)

    if ai_objects[0].exists:
        if ai_objects[1].exists:
            robot.screen.print("At least 2")
        else:
            robot.screen.print("Less than 2")
    wait(0.1, SECONDS)

.width#

.width শনাক্ত করা অবজেক্টটির প্রস্থ পিক্সেলে ফেরত দেয়, যা ১ থেকে ৩২০-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের উপর থেকে বাউন্ডিং বক্সের বাম এবং ডান প্রান্ত পর্যন্ত দুটি উল্লম্ব লাল ড্যাশযুক্ত রেখা বিস্তৃত। এই রেখাগুলির মধ্যে একটি দ্বি-মুখী কালো তীরচিহ্ন প্রস্থের পরিমাপ নির্দেশ করে।

# Move towards a Blue Barrel until its width is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].width < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.height#

.height শনাক্ত করা বস্তুটির উচ্চতা পিক্সেলে ফেরত দেয়, যা ১ থেকে ২৪০-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের বাম দিক থেকে বাউন্ডিং বক্সের উপরে এবং নীচের প্রান্ত পর্যন্ত দুটি অনুভূমিক লাল ড্যাশযুক্ত রেখা বিস্তৃত। এই রেখাগুলির মধ্যে একটি দ্বিমুখী কালো তীরচিহ্ন উচ্চতার পরিমাপ নির্দেশ করে।

# Move towards a Blue Barrel until its height is
# larger than 100 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].height < 100:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.centerX#

.centerX শনাক্তকৃত বস্তুর কেন্দ্রের x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 320-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের উপর থেকে বাউন্ডিং বক্সের কেন্দ্র পর্যন্ত একটি উল্লম্ব লাল ড্যাশযুক্ত রেখা বিস্তৃত, যা কেন্দ্রের X-স্থানাঙ্ক নির্দেশ করে।

# Turn slowly until a Blue Barrel is centered in
# front of the robot
robot.set_turn_velocity(30)
robot.turn(RIGHT)

while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if 140 < barrel[0].centerX < 180:
            robot.stop_all_movement()

    wait(10,MSEC)

.centerY#

.centerY শনাক্তকৃত বস্তুর কেন্দ্রের y-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 240-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের বাম দিক থেকে বাউন্ডিং বক্সের কেন্দ্র পর্যন্ত একটি অনুভূমিক লাল ড্যাশযুক্ত রেখা বিস্তৃত, যা কেন্দ্রের Y-স্থানাঙ্ক নির্দেশ করে।

# Move towards a Blue Barrel until its
# center y-coordinate is more than 140 pixels
while True:
    barrel = robot.vision.get_data(BLUE_BARREL)

    if barrel[0].exists:
        if barrel[0].centerY < 140:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.bearing#

.bearing একটি দশমিক (ফ্লোট) ফেরত দেয় যা AI ভিশন সেন্সরের দৃশ্যের কেন্দ্র থেকে একটি বস্তু কতটা বামে বা ডানে ডিগ্রিতে রয়েছে তা প্রকাশ করে। 0 মান মানে এটি কেন্দ্রে রয়েছে, ধনাত্মক মান মানে বস্তুটি ডানদিকে এবং ঋণাত্মক মান মানে বস্তুটি বামদিকে রয়েছে।

উপর থেকে নিচের দিকে দেখানো একটি ডায়াগ্রাম, যেখানে একটি VEX AIM কোডিং রোবটকে একটি বৃত্তাকার ভিত্তির কেন্দ্রে দেখানো হয়েছে। এর সাথে একটি উল্লম্ব নির্দেশক রেখা এবং বাম দিকে একটি খেলার বলের দিকে কোণাকোণিভাবে নির্দেশিত একটি লাল রেখা রয়েছে, যেটিকে ঋণাত্মক ৩০ ডিগ্রি হিসেবে চিহ্নিত করা হয়েছে। উপর থেকে নিচের দিকে দেখানো একটি ডায়াগ্রাম, যেখানে একটি VEX AIM কোডিং রোবটকে একটি বৃত্তাকার ভিত্তির কেন্দ্রে দেখানো হয়েছে। এর সাথে একটি উল্লম্ব নির্দেশক রেখা এবং ডানদিকে থাকা একটি স্পোর্টস বলের দিকে ৩০ ডিগ্রি কোণে নির্দেশিত একটি লাল রেখা রয়েছে।
# Turn to keep the Blue Barrel directly in front
robot.set_turn_velocity(40)
while True:
    vision_data = robot.vision.get_data(BLUE_BARREL)

    if vision_data[0].exists:

        if vision_data[0].bearing > 5:
            robot.turn(RIGHT)
        elif vision_data[0].bearing < -5:
            robot.turn(LEFT)
        else:
            robot.stop_all_movement()

    else:
        robot.stop_all_movement()

    wait(0.1, SECONDS)

.rotation#

.rotation এআই ভিশন সেন্সরের ভিউয়িং প্লেনে বস্তুটির অভিমুখ ফেরত দেয়, যা ০ থেকে ৩৫৯ ডিগ্রির মধ্যে পরিমাপ করা হয়। একটি কালার কোডের কোণ ০° হয় যখন এর রঙগুলো একটি অনুভূমিক রেখায় সাজানো থাকে (যেমন, লাল–নীল)। যদি রঙগুলো ঘোরানো হয়, তাহলে কোণটি পরিবর্তিত হয় (যেমন, নীল-লাল সাজালে ১৮০° ফেরত আসে)।

নীচের উদাহরণটির জন্য, কালার কোডটি বাম দিকে লাল এবং ডান দিকে নীল রঙ দিয়ে কনফিগার করা হয়েছে।

এই ছবিতে, লালের উপরে নীল রাখাটা মূল কালার কোডটিকে ডানদিকে ২৭০ ডিগ্রী ঘোরানোর সমতুল্য।

একটি ক্যামেরা ইন্টারফেস ফ্রেমে কেন্দ্রে অবস্থিত একটি উল্লম্বভাবে সজ্জিত বস্তু প্রদর্শন করে, যার উপরের অর্ধেক নীল এবং নিচের অর্ধেক লাল। বস্তুটির নীচে একটি লেবেলে লেখা আছে Red_Blue A:270° CX:185 CY:81 W:93 H:150, যা বস্তুটির নাম, ঘূর্ণন কোণ, কেন্দ্রের X এবং Y স্থানাঙ্ক, প্রস্থ এবং উচ্চতা নির্দেশ করে। গ্রিডলাইন এবং সংখ্যাসূচক অক্ষগুলি ছবির মাত্রা চিহ্নিত করে, যেখানে X এর মান 0 থেকে 320 এবং Y এর মান 0 থেকে 240 পর্যন্ত

# Slide left or right depending on how a Color Code (BlueRed)
# is rotated on the vertical plane
while True:
    # Original Color Code is Red to the left, Blue to the right
    code = robot.vision.get_data(BlueRed)

    if code[0].exists:
        # Check if Color Code is now Red on top of Blue
        if 50 < code[0].rotation < 100 :
            robot.move_at(90)

        # Check if Color Code is now Blue on top of Red
        elif 270 < code[0].rotation < 330 :
            robot.move_at(270)

        else:
            robot.stop_all_movement()
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.originX#

.originX শনাক্ত করা বস্তুর বাউন্ডিং বক্সের উপরের-বাম কোণার x-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 320-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের উপর থেকে বাউন্ডিং বক্সের বাম প্রান্ত পর্যন্ত একটি উল্লম্ব লাল ড্যাশযুক্ত রেখা বিস্তৃত, যা বাউন্ডিং বক্সের মূলবিন্দুর X-স্থানাঙ্ক নির্দেশ করে।

# Display if an Orange Barrel is to the
# left or the right
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1,1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originX < 160:
            robot.screen.print("To the left!")
        else:
            robot.screen.print("To the right!")

    wait(50, MSEC)

.originY#

.originY শনাক্ত করা বস্তুর বাউন্ডিং বক্সের উপরের-বাম কোণার y-স্থানাঙ্ক পিক্সেলে ফেরত দেয়, যা 0 থেকে 240-এর মধ্যে একটি পূর্ণসংখ্যা।

দ্রষ্টব্য: পিক্সেল মান সেন্সরের স্থানাঙ্ক ব্যবস্থার সাপেক্ষে। রেফারেন্সের জন্য ভূমিকার চিত্র দেখুন।

ফ্রেমের কেন্দ্রে একটি কমলা ডোরাকাটা নীল ব্যারেল রয়েছে, যা একটি কালো বাউন্ডিং বক্স দ্বারা বেষ্টিত। ফ্রেমের বাম দিক থেকে বাউন্ডিং বক্সের উপরের প্রান্ত পর্যন্ত একটি অনুভূমিক লাল ড্যাশযুক্ত রেখা বিস্তৃত, যা বাউন্ডিং বক্সের মূলবিন্দুর Y-স্থানাঙ্ক নির্দেশ করে।

# Display if an Orange Barrel is close or far
# from the robot
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    orange_barrel = robot.vision.get_data(ORANGE_BARREL)

    if orange_barrel[0].exists:
        if orange_barrel[0].originY < 80:
            robot.screen.print("Far")
        else:
            robot.screen.print("Close")

    wait(50, MSEC)

.id#

.id শনাক্তকৃত এআই ক্লাসিফিকেশন বা এপ্রিলট্যাগ আইডি-কে একটি পূর্ণসংখ্যা হিসেবে ফেরত দেয়।

একটি AprilTag ID-এর জন্য, .id প্রপার্টিটি 0 থেকে 37-এর মধ্যে সনাক্তকৃত AprilTag ID নম্বরকে বোঝায়। একটি AI Classification-এর জন্য, .id প্রপার্টিটি AI Classifications বিভাগে পূর্বনির্ধারিত ID-এর সাথে সঙ্গতিপূর্ণ।

# Move forward when AprilTag ID 1 is detected
while True:
    apriltags = robot.vision.get_data(ALL_TAGS)

    if apriltags[0].exists:
        if apriltags[0].id == 1:
            robot.move_at(0)
    else:
        robot.stop_all_movement()

    wait(50, MSEC)

.score#

.score শনাক্তকৃত এআই ক্লাসিফিকেশনের কনফিডেন্স স্কোরকে ১ থেকে ১০০-এর মধ্যে একটি পূর্ণসংখ্যা হিসেবে ফেরত দেয়।

কম স্কোরের অর্থ হলো সেন্সরটি শনাক্ত করা বস্তুটি সম্পর্কে কম আত্মবিশ্বাসী, অন্যদিকে বেশি স্কোরের অর্থ হলো সেন্সরটি বেশি আত্মবিশ্বাসী।

# Look confident if an Orange Barrel is detected
while True:
    barrel = robot.vision.get_data(ORANGE_BARREL)

    if barrel[0].exists:
        if barrel[0].score > 95:
            robot.screen.show_emoji(CONFIDENT)
        else:
            robot.screen.hide_emoji()

    wait(50, MSEC)

.type#

.type একটি পূর্ণসংখ্যা রিটার্ন করে যা শনাক্ত করা অবজেক্টের ধরন নির্দেশ করে। আপনি টাইপ নম্বর অথবা সংশ্লিষ্ট নামযুক্ত কনস্ট্যান্ট ব্যবহার করে এই মানটি তুলনা করতে পারেন:

বস্তুর প্রকার

অন্তর্ভুক্ত বস্তুসমূহ

AiVision.AI_OBJECT

— খেলার বল
— নীল ব্যারেল
— কমলা ব্যারেল

AiVision.TAG_OBJECT

— এপ্রিলট্যাগ আইডি

AiVision.COLOR_OBJECT

— রঙিন স্বাক্ষর

AiVision.CODE_OBJECT

— রঙের কোড

# Display if an AprilTag ID or AI Classification
# is detected
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)
    if vision_data[0].exists:
        if vision_data[0].type == AiVision.AI_OBJECT:
            robot.screen.print("AI Object!")
        elif vision_data[0].type == AiVision.TAG_OBJECT:
            robot.screen.print("AprilTag ID!")
    wait(0.1, SECONDS)

# Display a list of all detected objects
while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)
    vision_data = robot.vision.get_data(ALL_VISION)

    if vision_data[0].exists:
        for obj in vision_data:
            if obj.type == AiVision.AI_OBJECT:
                robot.screen.print("- AI Object")
            elif obj.type == AiVision.TAG_OBJECT:
                robot.screen.print("- AprilTag ID")
            robot.screen.next_row()

    wait(0.1, SECONDS)

নির্মাণকারী#

Creating a Color Signature#

একটি নতুন কালার সিগনেচার Colordesc কনস্ট্রাক্টর ব্যবহার করে তৈরি করা হয় এবং তারপর color_description মেথড ব্যবহার করে এআই ভিশন সেন্সরের সাথে রেজিস্টার করা হয়। একটি Colordesc অবজেক্ট সেন্সরের জন্য সর্বোচ্চ ৭টি শনাক্তযোগ্য কালার সিগনেচারের মধ্যে ১টি নির্ধারণ করে, কিন্তু এটি কার্যকর হওয়ার জন্য color_description ব্যবহার করে অবশ্যই স্পষ্টভাবে সেট করতে হবে।

কালারডেস্ক ব্যবহার:
Colordesc(index, red, green, blue, hangle, hdsat)

প্যারামিটার

বর্ণনা

index

১ থেকে ৭ পর্যন্ত একটি পূর্ণসংখ্যা যা কালার সিগনেচার ইনডেক্স নির্দেশ করে। যদি দুটি কালার সিগনেচার একই ইনডেক্স ব্যবহার করে, তবে দ্বিতীয়টি প্রথমটিকে বাতিল করে দেবে।

red

রঙের লাল উপাদানের জন্য ০ থেকে ২৫৫ পর্যন্ত একটি পূর্ণসংখ্যা।

green

রঙের সবুজ অংশের জন্য ০ থেকে ২৫৫ পর্যন্ত একটি পূর্ণসংখ্যা।

blue

রঙটির নীল উপাদানের জন্য ০ থেকে ২৫৫ পর্যন্ত একটি পূর্ণসংখ্যা।

hangle

১ থেকে ৪০ পর্যন্ত একটি ফ্লোট মান, যা রঙের পরিসরকে ডিগ্রিতে প্রকাশ করে।

hdsat

০.১০ থেকে ১.০০ পর্যন্ত একটি ফ্লোট মান, যা স্যাচুরেশন পরিসীমা নির্দেশ করে।

color_description এর ব্যবহার:
robot.vision.color_description(object)

প্যারামিটার

বর্ণনা

object

শনাক্তযোগ্য কালার সিগনেচার হিসেবে সেট করার জন্য Colordesc অবজেক্টটি।

# Detect a red object
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
robot.vision.color_description(red_box)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    red_boxes = robot.vision.get_data(red_box)

    if red_boxes[0].exists:
        robot.screen.print("Red detected!")
    else:
        robot.screen.print("No red detected.")

    wait(0.2, SECONDS)

Creating a Color Code#

একটি নতুন কালার কোড Codedesc কনস্ট্রাক্টর ব্যবহার করে তৈরি করা হয় এবং তারপর code_description মেথড ব্যবহার করে সক্রিয় করা হয়। একটি কালার কোড ২ থেকে ৪টি বিদ্যমান Colordesc অবজেক্টকে একটি একক আইডেন্টিফায়ারে একত্রিত করে, যা এআই ভিশন সেন্সর একটি সিকোয়েন্স হিসাবে শনাক্ত করতে পারে, কিন্তু এটি কার্যকর হওয়ার জন্য code_description ব্যবহার করে অবশ্যই স্পষ্টভাবে সেট করতে হবে।

Codedesc ব্যবহার:
Codedesc(index, c1, c2, c3, c4, c5)

প্যারামিটার

বর্ণনা

index

কালার কোডের সূচক, ১ থেকে ৮ পর্যন্ত। দ্রষ্টব্য: যদি আপনি একই সূচক দিয়ে দুটি Codedesc অবজেক্ট তৈরি করেন, তবে দ্বিতীয়টি প্রথমটিকে ওভাররাইড করবে।

c1

কোডের প্রথম Colordesc অবজেক্ট।

c2

কোডের দ্বিতীয় Colordesc অবজেক্টটি।

c3

ঐচ্ছিক। একটি তৃতীয় Colordesc অবজেক্ট।

c4

ঐচ্ছিক। একটি চতুর্থ Colordesc অবজেক্ট।

কোড_বর্ণনা ব্যবহার:
robot.vision.code_description(object)

প্যারামিটার

বর্ণনা

object

একটি Codedesc অবজেক্টকে শনাক্তযোগ্য কালার কোড হিসেবে নিবন্ধন করতে হবে।

# Create Color Signatures
red_box = Colordesc(1, 207, 19, 25, 10.00, 0.20)
purple_box = Colordesc(2, 98, 18, 227, 10.00, 0.20)

robot.vision.color_description(red_box)
robot.vision.color_description(purple_box)

# Detect a red_purple Color Code
red_purple = Codedesc(1, red_box, purple_box)
robot.vision.code_description(red_purple)

while True:
    robot.screen.clear_screen()
    robot.screen.set_cursor(1, 1)

    code_objects = robot.vision.get_data(red_purple)

    if code_objects[0].exists:
        robot.screen.print("Code detected!")
    else:
        robot.screen.print("No code detected.")

    wait(0.2, SECONDS)