এই নিবন্ধটি একটি উদাহরণ প্রকল্পকে কভার করবে যা VEXlink ব্যবহার করে রোবট থেকে রোবট যোগাযোগের স্থিতি এবং জেটসনের স্থিতির প্রতিবেদন করে এমন একটি ড্যাশবোর্ড প্রদর্শন করে। ai_demo প্রকল্পটি আমাদের Githubএ হোস্ট করা হয়েছে। এই ডেমো প্রকল্পটি ইউএসবি সিরিয়াল সংযোগের মাধ্যমে জেটসন প্রসেসর থেকে ডেটা সংগ্রহ করে। একবার ডেটা প্রাপ্ত হলে এটি V5 ব্রেইনের স্ক্রিনে প্রদর্শিত হয় এবং VEXlink এর মাধ্যমে সংযুক্ত V5 রোবটের অংশীদারের কাছেও প্রেরণ করা হয়।
দ্রষ্টব্য: এই প্রকল্পটির জন্য V5 এর জন্য VS কোড এক্সটেনশনের সর্বশেষ সংস্করণ প্রয়োজন৷ এখানে V5 এর জন্য VS কোড এক্সটেনশন ডাউনলোড করুন.
NVIDIA জেটসন ন্যানো থেকে VEX V5 ব্রেইন কমিউনিকেশন
জেটসন প্রসেসরে একটি অ্যাপ্লিকেশন রয়েছে যা VEX AI সফ্টওয়্যার থেকে নিম্নলিখিত ডেটা সংগ্রহ করে:
রোবট অবস্থান তথ্য:
- মাঠের কেন্দ্র থেকে মিটারে রোবটের X,Y অবস্থান।
- রোবটের আজিমুথ (শিরোনাম), উচ্চতা (পিচ), ঘূর্ণন (রোল) সবই রেডিয়ানে।
অবজেক্ট ডিটেকশন ডেটা (তিন প্রকার):
- এই ডেটা VEX AI ইন্টেল ক্যামেরা দ্বারা একটি সনাক্ত করা বস্তুর প্রতিনিধিত্ব করে৷
- এই তথ্য ক্যামেরা ইমেজ রেফারেন্স সঙ্গে বস্তুর বর্ণনা.
- X, Y, প্রস্থ এবং উচ্চতার মানগুলি পিক্সেলের এককে রয়েছে৷ পিক্সেল মান চিত্র এবং বস্তু সনাক্তকরণ বাক্সের উপরের বাম কোণে উল্লেখ করা হয়। ছবির রেজোলিউশন 640x480।
মানচিত্র সনাক্তকরণ (টাইপ দুই):
- এই তথ্যটি মিটারে রিপোর্ট করা জিপিএস সেন্সরের মতো একই স্থানাঙ্ক সিস্টেমে ক্ষেত্রের বস্তুর অবস্থান উপস্থাপন করে।
- প্রতিটি বস্তুর ক্ষেত্রের কেন্দ্রের সাপেক্ষে বস্তুর অবস্থানও রয়েছে। X এবং Y-এর মানগুলি তাদের নিজ নিজ অক্ষে ক্ষেত্রের কেন্দ্র থেকে মিটারের এককে। Z-এর মান হল ফিল্ড টাইলস (উচ্চতা) থেকে মিটার।
সনাক্তকরণ বস্তু (টাইপ তিন):
- এটি সনাক্ত করা বস্তু সম্পর্কে সমস্ত তথ্যকে এনক্যাপসুলেট করে।
- প্রতিটি বস্তুর একটি মান রয়েছে যা সনাক্ত করা বস্তুর শ্রেণীবিভাগকে উপস্থাপন করে। (ক্লাস আইডি: 0 = গ্রীনট্রিবল, 1 = রেডট্রিবল, 2 = ব্লুট্রিবল)
- প্রতিটি বস্তুতে একটি সম্ভাব্যতা রয়েছে যা সনাক্তকরণে VEX AI এর আস্থার প্রতিনিধিত্ব করে। এটি মডেল.py-এর একটি ফিল্টারের পরে যা কম সম্ভাবনার সনাক্তকরণগুলিকে সরিয়ে দেয়।
- এছাড়াও, VEX AI ইন্টেল ক্যামেরা থেকে বস্তুর গভীরতা মিটারে রিপোর্ট করা হয়েছে।
- ইমেজ ডিটেকশন এবং ম্যাপ ডিটেকশন প্রতিটি অবজেক্টের সাথে সংযুক্ত করা হয় যাতে ইমেজের সাথে সাথে বাস্তব জগতেও বস্তুর স্থানাঙ্ক উপস্থাপন করা হয়।
ai_demo প্রোগ্রামের একটি ব্রেকডাউন:
Main.cpp
VEX প্রকল্পগুলির জন্য স্ট্যান্ডার্ড অন্তর্ভুক্ত:
জেটসন ক্লাসের একটি উদাহরণ ঘোষণা করুন। এই ক্লাসটি জেটসনের কাছে ডেটার জন্য অনুরোধ পাঠানোর পাশাপাশি USB সিরিয়াল সংযোগের মাধ্যমে ডেটা গ্রহণ করতে ব্যবহৃত হয়।
# MANAGER_ROBOT 1 সংজ্ঞায়িত করুন
রোবট_লিঙ্ক ক্লাসের একটি উদাহরণ ঘোষণা করুন। এই বস্তুটি এই রোবট এবং একটি অংশীদার রোবটের মধ্যে ডেটা সংযোগ এবং স্থানান্তর করতে ব্যবহার করা হবে। এই একই প্রকল্প দুটি পৃথক রোবট ডাউনলোড করা যাবে. একটি রোবটের লাইন প্রয়োজন হবে:
//#ম্যানেজার_রোবট 1 সংজ্ঞায়িত করুন
আপনি কোডটি দ্বিতীয় রোবটে লোড করার আগে, আপনাকে সেই লাইনটি মন্তব্য করতে হবে:
রোবট_লিঙ্ক ক্লাস রোবটের VEXlink সেট আপ করে এবং দুটি রোবটের মধ্যে ডেটা প্রেরণ এবং গ্রহণ পরিচালনা করে। সেই ক্লাসটি কীভাবে কাজ করে তার জন্য আমরা এই নিবন্ধে বিশদে যেতে যাচ্ছি না। প্রথমে VEXlink কীভাবে কাজ করে তা বোঝা একটি ভাল ধারণা হবে। V5 VEXlink API ব্যবহার করার বিষয়ে আরও বিশদ তথ্যের জন্য, এই নথি নতুন লাইব্রেরি এবং কীভাবে রোবট-টু-রোবট যোগাযোগের জন্য তাদের কার্যকরভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করে।
-
প্রতিযোগিতা ইভেন্ট হ্যান্ডলার
VAIC এবং VRC-এর মধ্যে সবচেয়ে বড় পার্থক্য হল যে কোনও ড্রাইভার নিয়ন্ত্রণের সময় নেই। পরিবর্তে দুটি স্বায়ত্তশাসিত সময়কাল রয়েছে, বিচ্ছিন্নতা সময়কাল এবং মিথস্ক্রিয়া সময়কাল। এই উদাহরণে, প্রতিটি স্বায়ত্তশাসিত সময়ের জন্য পৃথক রুটিন আছে। যেহেতু VEX API দুটি ভিন্ন কলব্যাক সমর্থন করে না, কোন রুটিনটি কার্যকর করা হবে তা নির্ধারণ করতে প্রোগ্রামে একটি পতাকা থাকতে হবে। এই উদাহরণ প্রোগ্রামে, “firstAutoFlag” ব্যবহার করা হয় Isolation ফাংশনটিকে প্রথমবার স্বায়ত্তশাসিত সক্রিয় করার জন্য এবং ইন্টারঅ্যাকশন ফাংশনটি যখন স্বায়ত্তশাসিত দ্বিতীয়বার সক্রিয় করা হয়। একটি বিষয় লক্ষণীয় যে যদি কোনো কারণে ম্যাচটি পুনরায় সেট করার প্রয়োজন হয়, তাহলে ডেমো প্রোগ্রামটি পুনরায় চালু করতে হবে যাতে প্রথম অটো ফ্ল্যাগ পুনরায় সেট করা যায়।
-
প্রধান()
এই প্রকল্পের জন্য এটি প্রধান কাজ। VEXcode পরিবেশ সঠিকভাবে সেট আপ করতে vexcodeInit() কল করে এটি শুরু হয়। এরপরে, একটি স্থানীয় AI_RECORD অবজেক্ট ঘোষণা করা হয় যাতে আমরা জেটসন থেকে প্রাপ্ত ডেটা সংরক্ষণ করি। সর্বাধিক বর্তমান ডেটা সহ স্ক্রিন আপডেট করার জন্য একটি পৃথক টাস্কও সেট আপ করা হয়েছে৷ সেই কাজের জন্য কোডটি dashboard.cpp ফাইলে রয়েছে। স্বায়ত্তশাসিত কলব্যাকটি পরিচালনা করার জন্যও নিবন্ধিত হয় যখন স্বায়ত্তশাসিত সময়কাল শুরু হয়।
আমাদের স্থানীয় AI_RECORD অবজেক্টে jetson_comms অবজেক্ট থেকে সাম্প্রতিক ডেটা কপি করে প্রধান while() লুপ শুরু হয়। তারপরে এটি রোবটের অবস্থানের তথ্য লিঙ্ক অবজেক্টে প্রেরণ করে যাতে এটি আমাদের অংশীদার রোবটে প্রেরণ করা যায়। একবার এটি ডেটা প্রক্রিয়াকরণ করা হয়ে গেলে, এটি জেটসন থেকে আরও ডেটা অনুরোধ করে এবং 66 মিলিসেকেন্ডের জন্য ঘুমায়। এই ডেটার জন্য ভোটদানের হার হল 15Hz৷ AI সিস্টেম ডেটা প্রায় 15Hz এ আপডেট হওয়ার কারণে দ্রুত পোল করার কোন কারণ নেই।
দ্রষ্টব্য: জেটসন মানচিত্রের ডেটা শুধুমাত্র একটি কাজ দ্বারা অনুরোধ করা প্রয়োজন।