সুচিপত্র:

আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে: 6 টি ধাপ (ছবি সহ)
আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে: 6 টি ধাপ (ছবি সহ)

ভিডিও: আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে: 6 টি ধাপ (ছবি সহ)

ভিডিও: আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে: 6 টি ধাপ (ছবি সহ)
ভিডিও: Convert Any Home into Smart Home in Bengali ! alexa 2024, জুলাই
Anonim
Image
Image
আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে
আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে
আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে
আলেক্সা ভয়েস নিয়ন্ত্রিত রাস্পবেরি পাই ড্রোন আইওটি এবং এডব্লিউএস দিয়ে

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

সরবরাহ

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

ড্রোন যন্ত্রাংশ তালিকা

সফটওয়্যারের প্রয়োজনীয়তা:

  • অ্যামাজন ওয়েব সার্ভিস
  • একটি ল্যাপটপ
  • মিশন প্ল্যানার সফটওয়্যার
  • বেলেনা এচার
  • রাস্পবিয়ান ফাইল সহ মাইক্রোএসডি কার্ড এখানে পাওয়া গেছে
  • আমাজন আলেক্সা, শারীরিক বা ভার্চুয়াল

ধাপ 1: অংশ সংগ্রহ এবং বোঝা

অংশ সংগ্রহ এবং বোঝা
অংশ সংগ্রহ এবং বোঝা

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

এমলিড নাভিও 2 সহ রাস্পবেরি পাই

এই অংশটি বেশ একটি কেন্দ্রীয় প্রসেসর এবং ড্রোনের মূল বিন্দু। রাস্পবেরি পাই একটি কম্পিউটারের সিপিইউ এর মতো কাজ করে যা ড্রোনের অন্যান্য অংশে PWM (পালস প্রস্থ মডুলেশন সিগন্যাল) এর মাধ্যমে চালানোর জন্য Navio2 এ কমান্ড পাঠায়

2. ইএসসি (ইলেকট্রনিক স্পিড কন্ট্রোলার)

এই হলুদ অংশগুলো ফ্রেমের নিচে পাওয়া যায়। এগুলি ন্যাভিওতে 4 টি প্লাগ ইন রয়েছে, প্রতিটি মোটরের জন্য একটি। পিডব্লিউএম সিগন্যাল পাওয়ার পর, তারা মোটরগুলিকে ঘোরায় এবং ফ্লাইট শুরু করে।

3. মোটর

মোটরগুলির খুব বেশি ব্যাখ্যার প্রয়োজন নেই কারণ আপনি সম্ভবত তাদের সাথে পরিচিত। তারা প্রবর্তককে ঘোরানো এবং ঘোরানোর জন্য খোঁচা তৈরি করে।

4. প্রোপেলার

প্রোপেলাররা ড্রোন উড়ানোর জন্য জোর তৈরি করে। তারা যানবাহন উত্তোলনের জন্য মোটরগুলির মতো একই দিকে ঘুরছে।

5. ব্যাটারি এবং পাওয়ার মডিউল

LiPo ব্যাটারি পাওয়ার মডিউল ব্যবহার করে ফ্রেমের মাধ্যমে পুরো ড্রোনকে ক্ষমতা দেয়। এটি প্রায় 15-20 মিনিট ফ্লাইট সময় দেয় এবং একটি শক্তি উৎস হিসাবে কাজ করে।

6. জিপিএস

জিপিএস ড্রোনের অবস্থান নির্ধারণের জন্য স্যাটেলাইটের সাথে যোগাযোগ করে। এটি উচ্চতা, অক্ষাংশ এবং দ্রাঘিমাংশ নির্ধারণ করে। এটি জিওফেন্সিং, ওয়েপয়েন্ট এবং নির্দিষ্ট অবস্থান বা দিকনির্দেশে যাওয়ার জন্য ব্যবহার করা যেতে পারে।

7. টেলিমেট্রি মডিউল

টেলিমেট্রি মডিউল আমাদের ড্রোনকে একটি গ্রাউন্ড কন্ট্রোল স্টেশনের সাথে সংযুক্ত করে, আমাদের ক্ষেত্রে মিশন প্ল্যানারকে পর্যবেক্ষণ করতে হবে।

8. RC কন্ট্রোলার এবং মডিউল সহ PPM এনকোডার

আরসি কন্ট্রোলার ম্যানুয়ালি ড্রোন চালানোর জন্য আরসি মডিউলে সিগন্যাল এবং কমান্ড প্রেরণের জন্য রেডিও ব্যবহার করে। পিপিএম এনকোডার এই সিগন্যালগুলিকে নেভিও + আরপিআই -এর প্রক্রিয়া এবং চালানোর জন্য অনুবাদ করে।

9. ফ্রেম

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

এখন প্রতিটি অংশের জ্ঞানের সাথে, আমরা অবশেষে ড্রোন তৈরি করতে পারি! পরবর্তী ধাপে এগিয়ে যান!

ধাপ 2: ড্রোন একত্রিত করা

ড্রোন একত্রিত করা
ড্রোন একত্রিত করা

শারীরিক পরিশ্রমের ক্ষেত্রে এই পদক্ষেপটি সম্ভবত সবচেয়ে কঠিন। আমি সাহায্যের জন্য অন্য ব্যক্তিকে থাকার পরামর্শ দিই অথবা যন্ত্রাংশের তালিকায় সাহায্যের হাত ব্যবহার করার চেষ্টা করি। প্রক্রিয়াটি এখানে প্রদর্শনের জন্য অনেক দীর্ঘ, তাই আমি ড্রোন ডোজো দ্বারা ব্যবহৃত আরেকটি লিঙ্ক প্রদান করব।

একটি রাস্পবেরি পাই ড্রোন তৈরি করা

আবার, যেহেতু আমি খুব বেশি বিশদে যাব না, আমি কেবল প্রতিটি ধাপের মূল বিষয়গুলি তুলে ধরব।

1. আপনার সরবরাহ সংগঠিত করুন - আমাদের উপকরণ সংগ্রহ করুন এবং নিশ্চিত করুন যে সেগুলি সহজেই অ্যাক্সেসযোগ্য

2. আপনার বিল্ড পরিকল্পনা করুন - আপনি কি তৈরি করবেন তার একটি ব্লুপ্রিন্ট তৈরি করতে ফ্রেমে আপনার অংশগুলি সংগঠিত করুন

3. সোল্ডারিং ওয়ার্ক - এটি এমন কাজ যা একা করা একটু কঠিন। আপনাকে অবশ্যই সোনার বুলেট সংযোগকারীগুলিকে বিক্রি করতে হবে যা মোটরগুলির সাথে ESC এর সাথে আসে। এরপরে, আপনাকে অবশ্যই ফ্রেমের নীচের অংশটি নিতে হবে এবং ESC- কে নিচের ফ্রেম বা পাওয়ার ডিস্ট্রিবিউশন বোর্ডে বিক্রি করতে হবে। ব্যাটারি মডিউলটি বিদ্যুৎ বিতরণ বোর্ডের কাছে বিক্রি করা হবে

4. ফ্রেম সেট আপ - তারপর আপনি বাহু সহ ফ্রেমের উপরের অংশ স্ক্রু করতে হবে। আপনি তারপর রাস্পবেরি পাই যে কোন উপায়ে উপরে সংযুক্ত করতে পারেন। (আমি ডাক্ট টেপ ব্যবহার করেছি)। তারপর আপনি জিপ-টাই দিয়ে ESC- কে অস্ত্রের কাছে সুরক্ষিত করতে পারেন। এখন আমাদের কাজ প্রায় শেষ।

5. RC কন্ট্রোলারকে রিসিভারে বাঁধতে - একটি ESC ব্যবহার করে RC কন্ট্রোলারকে বাঁধতে উপরের প্লেলিস্টের নির্দেশাবলী অনুসরণ করার চেষ্টা করুন।

ফ্রেমে অংশ চূড়ান্ত করা - ফ্রেমে টেলিমেট্রি মডিউলের ডাক্ট টেপ বা স্ট্র্যাপ। পিপিএম এনকোডারকে একটি বাহুতেও ডক টেপ করুন। এখন আপনি নাভিওতে ESC এবং PPM এনকোডারটি ওয়্যার করতে পারেন।

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

8. প্রোপেলার ইনস্টল করা !!! - আপনি প্লেলিস্টে উল্লিখিত চার্ট ব্যবহার করে প্রোপেলারগুলিকে শক্ত করতে পারেন। তারপর আপনি ESC এর মোটরগুলিতে প্লাগ ইন করতে পারেন এবং আমরা অবশেষে ড্রোন নির্মাণ শেষ করেছি।

সফটওয়্যারের পরবর্তী, তাই!

ধাপ 3: রাস্পবেরি পাই এবং জিসিএস (মিশন প্ল্যানার) কনফিগার করা

রাস্পবেরি পাই এবং জিসিএস (মিশন প্ল্যানার) কনফিগার করা হচ্ছে
রাস্পবেরি পাই এবং জিসিএস (মিশন প্ল্যানার) কনফিগার করা হচ্ছে

আবার, আপনি শেষ ধাপ থেকে প্লেলিস্টে আরও বিস্তারিত নির্দেশাবলী খুঁজে পেতে পারেন। যাইহোক, আপনি সম্ভবত জানেন কিভাবে RasPi সেটআপ করতে হয়। কিন্তু এই সময়, আমরা এটা মাথা ছাড়া করছি। ন্যাভিও ওএস ওয়েবসাইট থেকে মাইক্রোএসডি কার্ডে ওএস বার্ন করতে বেলেনা ইচার ব্যবহার করুন। এটি আপনার কম্পিউটারে প্লাগ ইন করার সময়, নোটপ্যাড ++ ব্যবহার করে wpa supplicant এ যান। এর পরে, আপনার ওয়াইফাইতে সংযোগ করার জন্য রাস্পবেরি পাই এর জন্য ssid এবং পাসওয়ার্ড লিখুন। তারপর আপনাকে SSH নামক একটি ফাইল যোগ করতে হবে। এটি কমান্ড লাইন বা অন্য কোনো পদ্ধতির মাধ্যমে হতে পারে। এখন আমরা SSH করতে পারি। আপনি কমান্ড প্রম্পট বা পুটি ব্যবহার করতে পারেন। আমি কমান্ড প্রম্পট ব্যবহার করেছি এবং আমার ক্ষেত্রে সংযোগ করার জন্য "ssh pi@navio" টাইপ করেছি, অথবা আপনি IP ঠিকানা এবং ssh সেভাবে খুঁজে পেতে পারেন। সংযোগ করার পরে, নাভিও সেট আপ এবং কনফিগার করতে এই ভিডিওটি ব্যবহার করুন। টেলিমেট্রি সেটআপ করার জন্য আপনাকে প্রথমে রাস্পবেরি পাইতে একটি সম্পাদনা করতে হবে। সম্পাদনা করতে এটি অনুসরণ করুন এবং মিশন পরিকল্পনাকারীর সাথে সংযোগ স্থাপনের চেষ্টা করুন। যদি টেলিমেট্রি কাজ না করে, আপনি আপনার GCS (গ্রাউন্ড কন্ট্রোল স্টেশন যেমন ল্যাপটপ) আইপি প্রবেশ করে একটি UDB সংযোগ ব্যবহার করে সম্পাদনা পূর্বাবস্থায় ফিরিয়ে আনতে পারেন। মিশন প্ল্যানারের সাথে একবার সংযুক্ত হয়ে গেলে, আপনি ড্রোনের সমস্ত অংশ ক্যালিব্রেট করতে সেটআপ উইজার্ড ব্যবহার করতে পারেন। যদি আপনার সাহায্যের প্রয়োজন হয় তাহলে আবার প্লেলিস্টে পড়ুন। সাধারণত, যখনই আপনি সেট আপ করেন, প্রায় সবসময় একটি ত্রুটি থাকে। সমস্যা সমাধান এই প্রকল্পের অন্যতম বড় অংশ। আমি সত্যিই সেখানে আপনাকে সাহায্য করতে পারছি না কারণ আমি আপনার ত্রুটি সম্পর্কে অবগত নই, তবে বেশিরভাগ ত্রুটি ইন্টারনেটের সাহায্যে সংশোধন করা যেতে পারে। সবকিছু প্রস্তুত হওয়ার পরে, ড্রোনটি উড়ার জন্য প্রস্তুত! আপনি মিশন প্ল্যানারে আপনার আরসি কন্ট্রোলার এবং ফ্লাইট মোড সেটআপ করতে পারেন। ড্রোনটি আর্ম করার জন্য পাঁচ সেকেন্ডের জন্য বাম লাঠিটি একেবারে নিচের-ডানদিকে ধরে রাখার চেষ্টা করুন। আমি একটি টিউটোরিয়াল না দেখে উড়ার সুপারিশ করি না কারণ ড্রোনটি খুব ভঙ্গুর এবং ভেঙে ফেলা সহজ। আমার জন্য, প্রথমবার আমি এটি উড়েছি, আমি জিপিএস মাউন্ট এবং কিছু প্রোপেলার ভাঙলাম। যদি আপনার ভয়েস নিয়ন্ত্রণের প্রয়োজন না হয়, তাহলে আপনি এখানে থামতে পারেন। AWS এবং প্রোগ্রামিং সম্পর্কে জানতে ড্রোন চালিয়ে যান!

ধাপ 4: পাইথনের সাথে উড়তে ড্রোনকে প্রোগ্রাম করা

পাইথনের সাথে উড়তে ড্রোন প্রোগ্রাম করা
পাইথনের সাথে উড়তে ড্রোন প্রোগ্রাম করা

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

1. প্রথমে রাস্পবেরি পাই এর একটি ডিরেক্টরিতে ArduPilot সোর্স কোড ডাউনলোড করি

mkdir src

তারপরে, গিটহব থেকে গিট ক্লোন ব্যবহার করে ফাইলগুলি পান

git clone -b Copter -3.6.11

এখন, আসুন /src /ardupilot এ নেভিগেট করি

সিডি src

cd ardupilot

এখন, সোর্স ফাইলগুলি আরম্ভ করা যাক

git submodule update --init --recursive

2. পরবর্তী, আমাদের রাস্পবেরি পাইতে ফার্মওয়্যার কম্পাইল করতে হবে

পরবর্তী পদক্ষেপগুলি করার আগে/src/ardupilot/সিডি সহ নেভিগেট করতে ভুলবেন না

তারপর বিশেষ করে Navio ব্যবহার করে cofigure

./waf কনফিগার -বোর্ড = navio2

তারপর আপনি সঙ্গে কম্পাইল করতে পারেন

./waf -targets bin/arducopter

3. আমরা এখন নাভিওতে সোর্স কোড ইনস্টল করতে পারি

প্রথমে সঠিক ডিরেক্টরিতে নেভিগেট করা যাক।

cd/etc/systemd/system

তারপর ফাইল এডিট করুন

sudo vi arducopter.service

যেখানে এটি ExecStart বলে, সেখানে ইতিমধ্যে যা আছে তার পরিবর্তে নিম্নলিখিতটি সন্নিবেশ করান

ExecStart =/bin/sh -c "/home/pi/src/arducopter/build/navio2/bin/arducopter $ {ARDUPILOT_OPTS}"

এখন, ardupilot সোর্স কোডটি কাজে লাগাতে, আমরা ব্যবহার করতে পারি

sudo systemctl ডিমন-রিলোড

তারপর আমরা সঙ্গে পুনরায় আরম্ভ করতে পারেন

sudo systemctl arducopter রিস্টার্ট করুন

শেষ ধাপের সাথে, আমরা অবশেষে আমাদের ড্রোনে ArduPilot স্থাপন শেষ করেছি

4. ড্রোনকিট ইনস্টল করা

DroneKit হল সফটওয়্যার যা আমরা ড্রোন উড়ানোর জন্য প্রোগ্রাম করতে ব্যবহার করব। কিছু কোড বোঝার জন্য আপনি এখানে ডকুমেন্টেশন খুঁজে পেতে পারেন। প্রথমে স্ক্রিপ্ট লেখার আগে আমাদের ড্রোনে প্যাকেজটি ইনস্টল করতে হবে।

আমরা পাইথন প্যাকেজটি ইনস্টল করতে পারি

পিপ ইনস্টল ড্রোনকিট == 2.9.1

এটি নতুন সংস্করণ হতে পারে, বা নাও হতে পারে, কিন্তু এটি আমি ব্যবহার করেছি তাই আমি সমস্যা সমাধান করতে সাহায্য করতে পারি।

ইনস্টল করা আছে কিনা তা পরীক্ষা করার জন্য, আমরা একটি করতে পারি

পিপ ফ্রিজ | গ্রেপ ড্রোনকিট

এখন আমরা শেষ পর্যন্ত আমাদের প্রথম পাইথন স্ক্রিপ্ট তৈরি করতে প্রস্তুত

5. takeoff_and_land.py

সতর্কতা! আমি পাইথনের একটি প্রাথমিক বোঝাপড়া প্রতিষ্ঠার পরামর্শ দিচ্ছি, যাতে আপনি কোডটি শিখতে এবং বুঝতে পারেন। আপনি যদি প্রোগ্রামটি নিজে লিখতে চান তবে এই ভিডিওটি অনুসরণ করুন।

## প্রথমে এই কোডটি সংরক্ষণ করার জন্য একটি ডিরেক্টরি তৈরি করা যাক না

cd dk ## যদি আপনি নিজে করতে চান তাহলে একটি প্রোগ্রাম তৈরি করতে vi takeoff_and_land.py ## ব্যবহার করুন

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

chmod +x takeoff_and_land.py

তারপরে, চালানোর জন্য নিম্নলিখিত কোডটি ব্যবহার করার চেষ্টা করুন

পাইথন takeoff_and_land.py -সংযোগ 127.0.0.1:14550

প্রথমবার এটি আমার জন্যও কাজ করেনি। যদি একটি লিঙ্ক সময়সীমা থাকে, তাহলে চিন্তা করবেন না যে আপনি কিছু করতে পারেন। আরেকটি প্রম্পট খুলুন এবং ssh। আপনি mavproxy নামে কিছু ইনস্টল করার চেষ্টা করতে পারেন এবং এটি চালানোর চেষ্টা করতে পারেন। এর পরে, আপনি উভয়ই একই সাথে চালাতে পারেন। এটি ড্রোন সংযোগ করতে সাহায্য করা উচিত। একবার এটি হয়ে গেলে, আপনার জন্য আমার একটি চ্যালেঞ্জ আছে। অন্য প্রোগ্রাম (set_velocity_body.py) কি করে এবং কিভাবে এটি কাজ করে তা বের করার চেষ্টা করুন। যদি করেন, ভালো কাজ।

6. এগিয়ে!

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

ধাপ 5: ভয়েস কন্ট্রোল সংহত করার জন্য অ্যামাজন আলেক্সা এবং অ্যামাজন ওয়েব পরিষেবা ব্যবহার করা

ভয়েস কন্ট্রোল সংহত করার জন্য অ্যামাজন আলেক্সা এবং অ্যামাজন ওয়েব সার্ভিস ব্যবহার করা
ভয়েস কন্ট্রোল সংহত করার জন্য অ্যামাজন আলেক্সা এবং অ্যামাজন ওয়েব সার্ভিস ব্যবহার করা
ভয়েস কন্ট্রোল সংহত করার জন্য অ্যামাজন আলেক্সা এবং অ্যামাজন ওয়েব সার্ভিস ব্যবহার করা
ভয়েস কন্ট্রোল সংহত করার জন্য অ্যামাজন আলেক্সা এবং অ্যামাজন ওয়েব সার্ভিস ব্যবহার করা

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

1. AWS IoT- এ একটি জিনিস হিসেবে রাস্পবেরি পাই নিবন্ধন করা

আইওটি (ইন্টারনেট অফ থিংস) ব্যবহার করার জন্য, আমাদের একটি জিনিস দরকার। সুতরাং আমাদের প্রথমে AWS IoT ব্যবহার করতে AWS কনসোলে লগইন করতে হবে। তারপর IoT Core এ যান। সেখানে একবার, আপনি ম্যানেজ ক্লিক করুন এবং তারপর একটি জিনিস তৈরি করা উচিত। একটি নাম যোগ করার পর, সংযোগের জন্য, আমাদের একটি সার্টিফিকেট প্রয়োজন। আমি এক-ক্লিক সার্টিফিকেশন ক্লিক করার সুপারিশ করব। তারপর সার্টিফিকেট স্ক্রিন দেখার পর, রুট CA সহ প্রতিটি কী ডাউনলোড করতে ভুলবেন না। তারপরে আপনি গিয়ে জিনিসটির সৃষ্টি শেষ করতে পারেন। পরবর্তী আমাদের একটি নীতি তৈরি করতে হবে। আইওটি কোরে ফিরে যান। তারপর নিরাপদ এবং ক্লিক নীতিতে ক্লিক করুন। তারপর তৈরি করুন নীতিতে আঘাত করুন। তারপরে আপনি একটি নাম তৈরি করতে এবং সংস্থান যুক্ত করতে পারেন। কর্মের অধীনে, টাইপ করুন iot * এবং রিসোর্সের অধীনে টাইপ করুন এবং প্রভাবের জন্য অনুমতি দিন। তারপর আপনার জিনিস ফিরে যান এবং আপনার সার্টিফিকেট যান। একবার এখানে, নীতিগুলিতে ক্লিক করুন। আপনি তারপর জিনিসের জন্য আপনার নীতি সংযুক্ত করতে পারেন এবং এটি সব সেট!

2. রাস্পবেরি পাইতে কোড সেট আপ করা এবং IoT- এর সাথে যোগাযোগ করা

এই অংশের জন্য, ফাইল ট্রান্সফারের জন্য আপনার একটি SFTP ক্লায়েন্ট (আমি WinSCP ব্যবহার করেছি) প্রয়োজন হবে। আমাদের রাস্পবেরি পাই এর সাথে সংযোগ করার পর, আমাদের হাতে সার্টিফিকেট কী থাকতে হবে। আপনাকে অবশ্যই মূল ফাইলগুলি রাস্পবেরি পাইতে স্থানান্তর করতে হবে। আপনার রাস্পবেরি পাইতে AWSIoTPythonSDK ইনস্টল করা উচিত। তারপরে রাস্পবেরি পাইতে ডিকে ডিরেক্টরিতে যান। আপনি IoT- এর সাথে যোগাযোগের জন্য আমার দেওয়া Alexa Drone Control ফাইলটি ব্যবহার করেন। এই ফাইলটি ব্যবহার করার জন্য আমি শুরু করার জন্য একটি শেল স্ক্রিপ্ট ব্যবহার করেছি। আমি নীচের কোডটি দেখাবো কারণ আমি কিছু কারণে ফাইল আপলোড করতে পারছি না। যদি প্রোগ্রামটি পরীক্ষার সময় AWS IoT থেকে বার্তা না নেয়, তাহলে চিন্তা করবেন না! এটি আমার দোষ হতে পারে কারণ আলেক্সা ড্রোন কন্ট্রোল ফাইলটি আপনার জিনিসের জন্য উপযুক্ত নাও হতে পারে। সুতরাং, এটি ঠিক করতে, AWS IoT এ ফিরে যান এবং বাম প্যানেলে শিখুন চাপুন। নির্দেশাবলী অনুসরণ করুন এবং আপনাকে পুনরায় চালু করতে হতে পারে। এর জন্যে দুঃখিত. একবার আপনার IoT RasPi এ প্রোগ্রামের সাথে কাজ শুরু করলে, আপনি আমার দেওয়া Alexa Drone Control ফাইল থেকে ড্রোনকিট কোড সংহত করতে পারেন। তারপরে, IoT থেকে আপনার সার্টিফিকেট এবং রেস্ট API এন্ডপয়েন্ট দিয়ে আমি যে শেল স্ক্রিপ্ট দিয়েছি তা ব্যবহার করুন।

# Errorset-e তে স্ক্রিপ্ট বন্ধ করুন -f./root-CA.crt]; তারপর printf "\ n AWS থেকে AWS IoT Root CA সার্টিফিকেট ডাউনলোড করা হচ্ছে / যদি [! -d./aws-iot-device-sdk-python]; তারপর printf "\ n AWS SDK ইনস্টল করা … / n" git clone https://www.amazontrust.com/repository/AmazonRoot…> pushd aws-iot-device-sdk-python python setup.py install popd fi

# প্যাকেজে ডাউনলোড করা সার্টিফিকেট ব্যবহার করে পাব/সাব স্যাম্পল অ্যাপ চালান

printf "pub n চলছে পাব/সাব স্যাম্পল অ্যাপ্লিকেশন … / n" পাইথন ডিকে/AlexaDroneControl.py -সংযোগ 127.0.0.1:14550 -e "আপনার IoT ARN" -r root -CA.crt -c PiGroundStation01.cert.pem -k PiGroundStation01.private.key

এটি আপনার সবার জন্য কাজ করবে না কারণ নামগুলি আলাদা। যখন আপনি ফাইল ট্রান্সফার করেন তখন আমি যে কীগুলি ব্যবহার করেছি তার পরিবর্তে আপনার কী নামগুলি ব্যবহার করুন। ফাইল স্থানান্তর করার আগে dk থেকে প্রস্থান নিশ্চিত করুন! আপাতত আপনাকে এটাই করতে হবে।

3. আপনার আলেক্সা দক্ষতা তৈরি করা

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

JSON এডিটরে কোড পেস্ট করার পর, আপনি চেকলিস্টের তৃতীয় ধাপে ক্লিক করতে পারেন এবং এটি আপনার জন্য আপনার মিথস্ক্রিয়া মডেল তৈরি করবে। এই পদক্ষেপের সাথে, আপনি আপাতত সম্পন্ন করা হবে। আপনি আপাতত এন্ডপয়েন্ট স্লট ফাঁকা রাখতে পারেন!

ধাপ 4: আপনার ল্যাম্বদা ফাংশন তৈরি করা

এখন, এই পদক্ষেপটি এমন একটি যা আপনাকে নিজের জন্য বের করতে হবে। আমি আপনাকে বলব কিভাবে এটিকে আলেক্সা স্কিলের সাথে সংযুক্ত করতে হয়, কিন্তু আপনাকে এটি নিজেই কোড করতে হবে। সুতরাং, প্রথমে AWS ম্যানেজমেন্ট কনসোলে যান। তারপর, ল্যাম্বদা যান। তারপরে আপনি যা চান তার নামকরণ করে একটি ফাংশন তৈরি করতে পারেন। স্ক্র্যাচ থেকে এটি লেখক নিশ্চিত করুন এবং আপনি যে প্রোগ্রামিং ভাষা চান রানটাইম করুন। আমি Node.js ব্যবহার করেছি অ্যালেক্সা স্কিল যোগ করতে, একটি ট্রিগার যোগ করুন এবং অ্যালেক্সা স্কিলস কিট (ASK) নির্বাচন করুন। আপনার ল্যাম্বদা এআরএন অনুলিপি করুন এবং আলেক্সা দক্ষতায় ফিরে যান। এখন, এন্ডপয়েন্টে যান। আপনি আপনার ARN পেস্ট করতে পারেন, সংরক্ষণ করতে পারেন এবং একটি নতুন মডেল তৈরি করতে পারেন। তারপরে, আলেক্সা স্কিল আইডি নিন এবং এটি ট্রিগার বিভাগে পেস্ট করুন যেখানে এটি আপনাকে ল্যাম্বডায় জিজ্ঞাসা করে। এরপরে, ল্যাম্বডায় নীচে স্ক্রোল করুন এবং মৌলিক সেটিংস খুঁজুন এবং সময়সীমা 10 সেকেন্ড করুন। এখন, কোডটি বের করা আপনার উপর নির্ভর করে। ইঙ্গিতগুলির জন্য, আপনি নীচের ওয়েবসাইটগুলি দেখতে পারেন।

github.com/aws/aws-iot-device-sdk-js

www.hackster.io/veggiebenz/voice-controlle…

এবং আপনি আমার সংযুক্ত ফাইলটি ব্যবহার করতে পারেন, কিন্তু এটি অসম্পূর্ণ এবং কাজ করবে না।

/ *** আমাজন আলেক্সা, ল্যাম্বদা, 2 লেমেট্রি এমকিউটিটি ব্যবহার করে আপনার ভয়েস দিয়ে আপনার এপিএম / পিকশক চতুর্ভুজ নিয়ন্ত্রণ করুন।*/ var awsIot = প্রয়োজন ('aws-iot-device-sdk'); var config = প্রয়োজন ("./ config"); var deviceName = "EchoDroneControl"; // এই ডিভাইসটি সত্যিই নিয়ন্ত্রক var mqtt_config = {"keyPath": config.privateKey, "certPath": config.certificate, "caPath": config.rootCA, "host": config.host, "port": 8883, "clientId": "Lambda-" + deviceName, // + "-Lambda-" + (new Date ()। getTime ()), "region": "us-east-1", "debug": true}; var ctx = null; var ক্লায়েন্ট = নাল; // টাইপ (LaunchRequest, IntentRequest, ইত্যাদি) এর উপর ভিত্তি করে আগত অনুরোধ রুট করুন অনুরোধের JSON বডি ইভেন্ট প্যারামিটারে প্রদান করা হয়েছে। export.handler = ফাংশন (ইভেন্ট, প্রসঙ্গ) {চেষ্টা করুন {console.log ("event.session.application.applicationId =" + event.session.application.applicationId); ctx = প্রসঙ্গ; যদি (event.session.application.applicationId! == app_id) {ctx.fail ("অবৈধ অ্যাপ্লিকেশন আইডি"); } ক্লায়েন্ট = awsIot.device (mqtt_config); client.on ("connect", function () {console.log ("AWS IoT- এর সাথে সংযুক্ত"); // কলব্যাক ();});

যদি (event.session.new) {

onSessionStarted ({requestId: event.request.requestId}, event.session); } যদি (event.request.type === "LaunchRequest") {onLaunch (event.request, event.session); } অন্যথায় যদি (event.request.type === "IntentRequest") {onIntent (event.request, event.session); } অন্যথায় যদি (event.request.type === "SessionEndedRequest") {onSessionEnded (event.request, event.session); ctx.succeed (); }} ধরা (ই) {console.log ("হ্যান্ডলারে ব্যতিক্রম:" + ই); ctx.fail ("ব্যতিক্রম:" + ই); }}; /*** অধিবেশন শুরু হলে কল করা হয়। */ ফাংশন onSessionStarted (sessionStartedRequest, session) {console.log ("onSessionStarted requestId =" + sessionStartedRequest.requestId + ", sessionId =" + session.sessionId); }

/**

* যখন ব্যবহারকারী দক্ষতা আরম্ভ করে তখন তারা যা চায় তা উল্লেখ না করে কল করা হয়। */ ফাংশন onLaunch (launchRequest, session, callback) {console.log ("onLaunch requestId =" + launchRequest.requestId + ", sessionId =" + session.sessionId); // আপনার দক্ষতা লঞ্চ প্রেরণ। getWelcomeResponse (কলব্যাক); } /*** কল করা হয় যখন ব্যবহারকারী এই দক্ষতার জন্য একটি অভিপ্রায় নির্দিষ্ট করে। */ফাংশন onIntent (inteRequest, session) {//, callback) {console.log ("onIntent requestId =" + inteRequest.requestId + ", sessionId =" + session.sessionId); var অভিপ্রায় = intendRequest.intent, intendName = inteRequest.intent.name; console.log ("স্ট্রিং এর অনুরোধ =" + JSON.stringify (inteRequest)); var কলব্যাক = নাল; // আপনার দক্ষতার অভিপ্রায় হ্যান্ডলারদের কাছে পাঠান যদি ("GoIntent" === অভিভাবক নাম) {doGoIntent (অভিপ্রায়, অধিবেশন); } অন্যথায় যদি ("CommandIntent" === অভিপ্রায় নাম) {doCommandIntent (অভিপ্রায়, অধিবেশন); } অন্যথায় যদি ("TurnIntent" === intendame) {doTurnIntent (অভিপ্রায়, অধিবেশন); } অন্যথায় যদি ("HelpIntent" === অভিপ্রায় নাম) {getWelcomeResponse (); } অন্য {নিক্ষেপ "অবৈধ অভিপ্রায়"; }} /*** যখন ব্যবহারকারী সেশন শেষ করে তখন কল করা হয়। * যখন দক্ষতা ফেরত আসে তখন বলা হয় না EndSession = সত্য। */ ফাংশন onSessionEnded (sessionEndedRequest, session) {console.log ("onSessionEnded requestId =" + sessionEndedRequest.requestId + ", sessionId =" + session.sessionId); // এখানে ক্লিনআপ লজিক যোগ করুন} // --------------- দক্ষতার আচরণ নিয়ন্ত্রণ করে এমন ফাংশন -------------------- --- ফাংশন getWelcomeResponse () {// যদি আমরা সেশন শুরু করতে চাই কিছু গুণাবলী আছে আমরা সেগুলো এখানে যোগ করতে পারি। var sessionAttributes = {}; var cardTitle = "স্বাগতম"; var speechOutput = "ড্রোন নিয়ন্ত্রণে স্বাগতম।"; // কাজ: ড্রোন কি অনলাইন নাকি অফলাইন? অনলাইনে থাকলে, এটা কি আর্মড? var repromptText = "কমান্ডের জন্য ড্রোন প্রস্তুত।"; var shouldEndSession = মিথ্যা; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } /*** GO অভিপ্রায় পরিচালনা করে। */ ফাংশন doGoIntent (অভিপ্রায়, অধিবেশন, কলব্যাক) {// var cardTitle = "ড্রোন গো …"; var repromptText = ""; var sessionAttributes = {}; var shouldEndSession = মিথ্যা; var speechOutput = ""; var দিক = অভিপ্রায়। স্লট। var দূরত্ব = অভিপ্রায় স্লট। দূরত্ব মান; var ইউনিট = intend.slots. Unit.value; var validDirections = ["forward", "forward", "backwards", "back", "right", "left", "up", "down", "straight", "এগিয়ে", "সোজা এগিয়ে"]; var validUnits = ["ফুট", "ফুট", "মিটার", "মিটার", "গজ", "গজ"]; repromptText = "আমাকে বলুন কতদূর যেতে হবে এবং কোন দিকে যেতে হবে।"; var ব্যর্থ = মিথ্যা; // ইনপুট যাচাই করুন যদি (! ব্যর্থ = সত্য; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validDirections.indexOf (direction) == -1) {speechOutput = "আপনি যে দিক দিয়ে আমাকে ভ্রমণ করতে চান আমি বুঝতে পারিনি।"; ব্যর্থ = সত্য; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } if (validUnits.indexOf (unit) == -1) {speechOutput = "আপনি যে ইউনিটে আমাকে ভ্রমণ করতে চান তা আমি বুঝতে পারিনি।"; ব্যর্থ = সত্য; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } যদি (! ব্যর্থ) {var cardTitle = "ড্রোন যাচ্ছে" + দিক + "" + দূরত্ব + "" + ইউনিট; speechOutput = "যাচ্ছে" + দিক + "" + দূরত্ব + "" + ইউনিট; mqttPublish (অভিপ্রায়, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

ফাংশন doCommandIntent (অভিপ্রায়, অধিবেশন, কলব্যাক) {

// var cardTitle = "ড্রোন কমান্ড …"; var repromptText = নাল; var sessionAttributes = {}; var shouldEndSession = মিথ্যা; var speechOutput = ""; repromptText = "আমাকে বলুন ড্রোনের কমান্ড কি।"; var টাস্ক = অভিপ্রায় স্লট। var validTasks = ["লঞ্চ", "ল্যান্ড", "r। t। l।", "হোল্ড", "স্টে", "স্টপ", "লঞ্চে ফিরুন", "অ্যাবর্ট"]; if (validTasks.indexOf (task) == -1) {speechOutput = "আমি কমান্ড বুঝতে পারিনি।"; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } অন্য {var cardTitle = "এক্সিকিউটিং ড্রোন কমান্ড" + টাস্ক; speechOutput = "এক্সিকিউটিং কমান্ড" + টাস্ক; mqttPublish (অভিপ্রায়, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

ফাংশন doTurnIntent (অভিপ্রায়, অধিবেশন, কলব্যাক) {

// var cardTitle = "ড্রোন টার্ন …"; var repromptText = নাল; var sessionAttributes = {}; var shouldEndSession = মিথ্যা; var speechOutput = ""; repromptText = "আপনি কিভাবে ড্রোনটি চালু করতে চান তা বলুন।"; var দিক = অভিপ্রায়। স্লট। var validDirections = ["right", "left", "around"]; যদি (validDirections.indexOf (direction) == -1) {speechOutput = "আমি মোড়ের দিকটা বুঝতে পারিনি।"; ctx.succeed (buildResponse (sessionAttributes, buildSpeechletResponse (cardTitle, speechOutput, repromptText, shouldEndSession))); } অন্য {var cardTitle = "ড্রোন টার্নিং" + দিক; speechOutput = "বাঁক" + দিক; mqttPublish (অভিপ্রায়, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession); }}

ফাংশন mqttPublish (অভিপ্রায়, sessionAttributes, cardTitle, speechOutput, repromptText, shouldEndSession)

{var strIntent = JSON.stringify (অভিপ্রায়); console.log ("mqttPublish: INTENT text =" + strIntent); // client.publish ("ikw1zr46p50f81z/ড্রোন/ইকো", strIntent, false); client.publish (config.topic, strIntent, false); client.end (); ক্লায়েন্ট।);})); client.on ("ত্রুটি", (ফাংশন (ভুল, মঞ্জুর) {console.log ("MQTT ক্লায়েন্ট ত্রুটি !!" + ভুল);})); }

// --------------- সাহায্যকারী যারা সব প্রতিক্রিয়া তৈরি করে -----------------------

ফাংশন buildSpeechletResponse (title, output, repromptText, shouldEndSession) {return {outputSpeech: {type: "PlainText", text: output}, card: {type: "simple", title: title, content: output}, reprompt: {outputSpeech: {type: "PlainText", text: repromptText}}, shouldEndSession: shouldEndSession}} ফাংশন buildResponse (sessionAttributes, speechletResponse) {return {version: "1.0", sessionAttributes: sessionAttributes, response: speechletResponse}}

প্রস্তাবিত: