সুচিপত্র:

জেটসন ন্যানো চতুর্ভুজ রোবট অবজেক্ট ডিটেকশন টিউটোরিয়াল: 4 টি ধাপ
জেটসন ন্যানো চতুর্ভুজ রোবট অবজেক্ট ডিটেকশন টিউটোরিয়াল: 4 টি ধাপ

ভিডিও: জেটসন ন্যানো চতুর্ভুজ রোবট অবজেক্ট ডিটেকশন টিউটোরিয়াল: 4 টি ধাপ

ভিডিও: জেটসন ন্যানো চতুর্ভুজ রোবট অবজেক্ট ডিটেকশন টিউটোরিয়াল: 4 টি ধাপ
ভিডিও: স্মার্ট হোম এইচডি 1080p আউটডোর ওয়াইফাই ক্যামেরা দাম চীন প্রস্তুতকারক 2024, নভেম্বর
Anonim
Image
Image

এনভিডিয়া জেটসন ন্যানো একটি ডেভেলপার কিট, যা একটি SoM (মডিউল সিস্টেম) এবং একটি রেফারেন্স ক্যারিয়ার বোর্ড নিয়ে গঠিত। এটি প্রাথমিকভাবে এমবেডেড সিস্টেম তৈরির জন্য লক্ষ্য করা হয় যার জন্য মেশিন লার্নিং, মেশিন ভিশন এবং ভিডিও প্রসেসিং অ্যাপ্লিকেশনগুলির জন্য উচ্চ প্রক্রিয়াকরণ শক্তি প্রয়োজন। আপনি আমার ইউটিউব চ্যানেলে এর বিস্তারিত পর্যালোচনা দেখতে পারেন।

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

যাইহোক আমি নিজে একটি প্রকল্প হিসাবে Jetbot সঙ্গে কিছু সমস্যা ছিল:

1) এটা আমার জন্য যথেষ্ট EPIC ছিল না। জেটসন ন্যানো একটি খুব আকর্ষণীয় বোর্ড যা দুর্দান্ত প্রক্রিয়াকরণ ক্ষমতা এবং এটি দিয়ে একটি সাধারণ চাকাযুক্ত রোবট তৈরি করা একটি খুব… আশ্চর্যজনক জিনিস বলে মনে হয়েছিল।

2) হার্ডওয়্যার পছন্দ। জেটবটের কিছু হার্ডওয়্যার প্রয়োজন যা ব্যয়বহুল/অন্যান্য বিকল্পের সাথে প্রতিস্থাপিত হতে পারে - উদাহরণস্বরূপ তারা টেলিওপারেশনের জন্য জয়স্টিক ব্যবহার করে। মজা লাগছে, কিন্তু রোবটকে নিয়ন্ত্রণ করার জন্য আমার কি সত্যিই জয়স্টিক দরকার?

সুতরাং, জেটসন ন্যানোতে আমার হাত পাওয়ার পরপরই আমি আমার নিজস্ব প্রকল্প, একটি জেটস্পাইডারে কাজ শুরু করি। ধারণাটি ছিল জেটবটের মৌলিক ডেমোগুলির প্রতিলিপি করা, তবে আরও সাধারণ হার্ডওয়্যার এবং বিস্তৃত প্রকল্পের জন্য প্রযোজ্য।

ধাপ 1: আপনার হার্ডওয়্যার প্রস্তুত করুন

আপনার হার্ডওয়্যার প্রস্তুত করুন
আপনার হার্ডওয়্যার প্রস্তুত করুন

এই প্রকল্পের জন্য আমি Zoobotics দ্বারা তৈরি Zuri চতুর্ভুজ রোবটের একটি প্রাথমিক প্রোটোটাইপ ব্যবহার করেছি। এটি দীর্ঘদিন ধরে আমাদের কোম্পানির ল্যাবে পড়ে ছিল। আমি জেটসন ন্যানোর জন্য একটি লেজার কাটা কাঠের মাউন্ট এবং একটি ক্যামেরা মাউন্ট দিয়ে এটি সাজিয়েছি। তাদের নকশা মালিকানাধীন, তাই যদি আপনার জেটসন ন্যানো রোবটের জন্য আপনি অনুরূপ কিছু তৈরি করতে চান, তাহলে আপনি মেপেড প্রজেক্টটি দেখতে পারেন, যা একটি ওপেন সোর্স ডিজাইনের সাথে একই রকম চতুর্ভুজ। আসলে, যেহেতু আমাদের ল্যাবে জুরির মাইক্রোকন্ট্রোলার (আরডুইনো মেগা) এর সোর্স কোড কারো কাছে ছিল না, তাই আমি মেপেড থেকে পা/ফুট অফসেটের কিছু ছোটখাটো সমন্বয় সহ কোডটি ব্যবহার করেছি।

আমি নিয়মিত ইউএসবি রাস্পবেরি পাই সামঞ্জস্যপূর্ণ ওয়েব-ক্যাম এবং একটি ওয়াইফাই ইউএসবি ডংগল ব্যবহার করেছি।

মূল বিষয় হল যে যেহেতু আমরা মাইক্রোকন্ট্রোলার এবং জেটসন ন্যানোর মধ্যে সিরিয়াল যোগাযোগের জন্য পাইসিরিয়াল ব্যবহার করতে যাচ্ছি, আপনার সিস্টেমটি মূলত যেকোনো ধরনের মাইক্রোকন্ট্রোলার ব্যবহার করতে পারে, যতক্ষণ না এটি ইউএসবি সিরিয়াল কেবল দিয়ে জেটসন ন্যানোর সাথে ইন্টারফেস করা যায়। যদি আপনার রোবট ডিসি মোটর এবং একটি মোটর ড্রাইভার ব্যবহার করে (উদাহরণস্বরূপ L298P- ভিত্তিক) জেটসন ন্যানো GPIO দিয়ে মোটর ড্রাইভারকে সরাসরি ইন্টারফেস করা সম্ভব। কিন্তু, দুর্ভাগ্যবশত, সার্ভিস নিয়ন্ত্রণের জন্য আপনি শুধুমাত্র অন্য মাইক্রোকন্ট্রোলার বা ডেডিকেটেড I2C সার্ভো ড্রাইভার ব্যবহার করতে পারেন, যেহেতু জেটসন ন্যানোর হার্ডওয়্যার GPIO PWM নেই।

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

যদি (Serial.available ()) {সুইচ (Serial.read ()) {

{

মামলা 1':

এগিয়ে ();

বিরতি;

কেস '2':

পেছনে();

বিরতি;

কেস '3':

ডানে ঘোরা();

বিরতি;

কেস '4':

turn_left ();

বিরতি;

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

পদক্ষেপ 2: প্রয়োজনীয় প্যাকেজগুলি ইনস্টল করুন

সৌভাগ্যবশত আমাদের জন্য, ডিফল্ট জেটসন ন্যানো সিস্টেম ইমেজ অনেকগুলি স্টাফ আগে থেকে ইনস্টল করা আছে (যেমন OpenCV, TensorRT, ইত্যাদি), তাই কোডটি কার্যকর করতে এবং SSH সক্ষম করতে আমাদের কেবল কয়েকটি প্যাকেজ ইনস্টল করতে হবে।

এসএসএইচ সক্ষম করে শুরু করা যাক যদি আপনি বাকি সব কাজ দূর থেকে করতে চান।

sudo apt আপডেট

sudo apt openssh-server ইনস্টল করুন

SSH সার্ভার স্বয়ংক্রিয়ভাবে শুরু হবে।

ল্যানের মাধ্যমে আপনার উবুন্টু মেশিনের সাথে সংযোগ করতে আপনাকে কেবল নিম্নলিখিত কমান্ডটি প্রবেশ করতে হবে:

ssh ব্যবহারকারীর নাম ip ip_address

আপনার যদি উইন্ডোজ মেশিন থাকে তবে আপনাকে SSH ক্লায়েন্ট ইনস্টল করতে হবে, উদাহরণস্বরূপ পুটি।

ইমেজ ম্যানিপুলেশনের জন্য পাইথন প্যাকেজ ম্যানেজার (পিপ) এবং বালিশ ইনস্টল করে শুরু করা যাক।

sudo apt python3-pip python3-pil ইনস্টল করুন

তারপরে আমরা জেটবট সংগ্রহস্থল ইনস্টল করব, যেহেতু আমরা বস্তুর সনাক্তকরণের জন্য এর কাঠামোর কিছু অংশের উপর নির্ভর করছি।

sudo apt python3-smbus python-pyserial ইনস্টল করুন

গিট ক্লোন

সিডি জেটবট

sudo apt-get cmake ইনস্টল করুন

sudo python3 setup.py ইনস্টল করুন

অবশেষে এই প্রকল্পের জন্য আমার গিথুব সংগ্রহস্থলকে আপনার হোম ফোল্ডারে ক্লোন করুন এবং ওয়েব সার্ভার ব্যবহার করে রোবটের রিমোট কন্ট্রোলের জন্য ফ্লাস্ক এবং অন্যান্য কিছু প্যাকেজ ইনস্টল করুন।

গিট ক্লোন

সিডি

sudo pip3 install -r প্রয়োজনীয়তা- opencv

পূর্বনির্ধারিত SSD (সিঙ্গেল শট ডিটেক্টর) মডেলটি এই লিংক থেকে ডাউনলোড করে jetspider_demos ফোল্ডারে রাখুন।

এখন আমরা যেতে ভাল!

ধাপ 3: কোডটি চালান

কোডটি চালান
কোডটি চালান

আমি জেটস্পাইডারের জন্য দুটি ডেমো তৈরি করেছিলাম, প্রথমটি একটি সহজ টেলিপ্রেশন, যা আমি আগে বানানা পাই রোভারের জন্য তৈরি করেছি এবং দ্বিতীয়টি বস্তু সনাক্তকরণের জন্য TensorRT ব্যবহার করে এবং মাইক্রোকন্ট্রোলারে সিরিয়াল সংযোগের উপর মুভমেন্ট কমান্ড পাঠায় ।

যেহেতু বেশিরভাগ টেলিওপ্রেশন কোড আমার অন্যান্য টিউটোরিয়ালে বর্ণিত হয়েছে (আমি শুধুমাত্র কিছু ছোটখাট পরিবর্তন করেছি, ভিডিও ট্রান্সমিশন পুনরায় তৈরি করছি) এখানে আমি অবজেক্ট ডিটেকশন অংশে ফোকাস করব।

অবজেক্ট ফলো করার প্রধান স্ক্রিপ্ট হল jetspider_object_following এ object_following.py, teleoperation এর জন্য jetspider_teleoperation এ spider_teleop.py।

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

app.run (হোস্ট = '0.0.0.0', থ্রেডেড = ট্রু)

যত তাড়াতাড়ি আমরা আমাদের ওয়েব ব্রাউজারে 0.0.0.0 (লোকালহোস্ট) ঠিকানা বা নেটওয়ার্কে জেটসন ন্যানো ঠিকানা খুলি (ifconfig কমান্ড দিয়ে পরীক্ষা করতে পারি), এই ফাংশনটি কার্যকর করা হবে

ডিফ ইনডেক্স ():

এটি টেমপ্লেট ফোল্ডারে আমাদের ওয়েব পেজ টেমপ্লেট রেন্ডার করে। টেমপ্লেটটিতে ভিডিও সোর্স এম্বেড করা আছে, তাই একবার লোডিং শেষ হলে, def video_feed (): এক্সিকিউট করা হবে, যা জেনারেটর ফাংশন দিয়ে আরম্ভ করা একটি প্রতিক্রিয়া বস্তু প্রদান করে।

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

ডিফ জেন (): ফাংশনে আমরা জেনারেটর ফাংশনটি একটি অসীম লুপে প্রয়োগ করি যা ছবিটি ক্যাপচার করে, এটি ডিফ এক্সিকিউট (আইএমজি): ফাংশনে পাঠায়, এর পরে ওয়েব পেজে পাঠানোর জন্য একটি ইমেজ তৈরি করে।

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

আপনি যদি আপনার রোবট অন্যান্য বস্তু অনুসরণ করতে চান তবে আপনি CoCo ডেটাসেট থেকে সেই সংখ্যাটি (53) অন্য নম্বরে পরিবর্তন করতে পারেন, 53 একটি আপেল। পুরো তালিকা ক্যাটাগরি.পি ফাইলে রয়েছে।

অবশেষে যদি 5 সেকেন্ডের জন্য কোন বস্তু সনাক্ত না হয় আমরা সিরিয়ালটির উপর থামার জন্য রোবটের জন্য "5" চরিত্রটি প্রেরণ করি। যদি বস্তু পাওয়া যায় তবে আমরা চিত্রের কেন্দ্র থেকে কতটা দূরে তা গণনা করি এবং সেই অনুযায়ী কাজ করি (যদি কেন্দ্রের কাছাকাছি থাকে তবে সোজা যান (সিরিয়ালে অক্ষর "1"), যদি বাম দিকে, বামে যান, ইত্যাদি)। আপনি আপনার নির্দিষ্ট সেটআপের জন্য সেরা নির্ধারণ করতে সেই মানগুলির সাথে খেলতে পারেন!

ধাপ 4: চূড়ান্ত চিন্তা

সর্বশেষ ভাবনা
সর্বশেষ ভাবনা

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

আপনি এখানে এনভিডিয়া জেটবট অবজেক্ট ডিটেকশন নোটবুকটিও দেখতে পারেন।

আমি আশা করি আমার জেটবট ডেমোর বাস্তবায়ন জেটবট ফ্রেমওয়ার্ক ব্যবহার করে আপনার রোবট তৈরিতে সাহায্য করবে। আমি বাধা এড়ানোর ডেমো বাস্তবায়ন করিনি, যেহেতু আমি মনে করি মডেলের পছন্দ ভাল বাধা এড়ানোর ফলাফল দেবে না।

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

প্রস্তাবিত: