সুচিপত্র:

Rpibot - রোবটিক্স শেখার বিষয়ে: 9 টি ধাপ
Rpibot - রোবটিক্স শেখার বিষয়ে: 9 টি ধাপ

ভিডিও: Rpibot - রোবটিক্স শেখার বিষয়ে: 9 টি ধাপ

ভিডিও: Rpibot - রোবটিক্স শেখার বিষয়ে: 9 টি ধাপ
ভিডিও: Robotics for Beginners | Course Trailer | Fuad Alhasan 2024, নভেম্বর
Anonim
Rpibot - রোবটিক্স শেখার বিষয়ে
Rpibot - রোবটিক্স শেখার বিষয়ে

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

আমার নিম্নলিখিত প্রয়োজনীয়তা ছিল:

  • সহজ হার্ডওয়্যার (ফোকাস হল সফটওয়্যার)
  • সস্তা হার্ডওয়্যার (প্রায় 100 €)
  • সম্প্রসারণযোগ্য (কিছু বিকল্প ইতিমধ্যেই বর্ণনার অংশ)
  • একক 5V উত্স (পাওয়ারব্যাঙ্ক) থেকে সমস্ত উপাদানগুলির জন্য ভোল্টেজ সরবরাহ করুন

শেখার ছাড়া আসলে কোন লক্ষ্য ছিল না। প্ল্যাটফর্মটি শেখার, নজরদারি, রোবোটিক প্রতিযোগিতার জন্য ব্যবহার করা যেতে পারে …

এটি একটি শিক্ষানবিস টিউটোরিয়াল নয়। আপনার কিছু প্রাথমিক জ্ঞান প্রয়োজন:

  • প্রোগ্রামিং (পাইথন)
  • বেসিক ইলেকট্রনিক্স (সঠিক ভোল্টেজ দ্বারা মডিউলগুলিকে একসাথে সংযুক্ত করতে)
  • মৌলিক নিয়ন্ত্রণ তত্ত্ব (পিআইডি)

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

সম্পূর্ণ সোর্স কোড এবং ফাইলগুলি এখানে উপলব্ধ:

সরবরাহ:

মেকানিক্স

  • 1x পাতলা পাতলা কাঠ বোর্ড (A4 আকার, 4 মিমি পুরু)
  • 3x M4 x 80 স্ক্রু এবং বাদাম
  • এনকোডারের জন্য সেকেন্ডারি আউটপুট শ্যাফ্ট সহ 2x গিয়ার মোটর। চাকা।
  • 1x ফ্রি চাকা

1x প্যান এবং টিল্ট ক্যামেরা মাউন্ট করা (alচ্ছিক)

ইলেকট্রনিক্স

  • হেডার এবং ক্যামেরা সহ 1x রাস্পবেরি পাই জিরো
  • 1x PCA 9685 servo control
  • 2x অপটিক্যাল এনকোডার চাকা এবং সার্কিট
  • 1x মহিলা জাম্পার তার
  • 1x ইউএসবি পাওয়ারব্যাঙ্ক
  • 1x DRV8833 ডুয়াল মোটর ড্রাইভার
  • 2x মাইক্রো servos SG90 ক্যামেরা প্যান এবং কাত (alচ্ছিক) জন্য
  • 1x MPU9250 IMU (alচ্ছিক)
  • 1x HC-SR04 অতিস্বনক দূরত্ব সেন্সর (alচ্ছিক)
  • 1x ছিদ্রযুক্ত বোর্ড এবং সোল্ডারিং তার, হেডার,…

ধাপ 1: চ্যাসি তৈরি করুন

চ্যাসি তৈরি করুন
চ্যাসি তৈরি করুন
চ্যাসি তৈরি করুন
চ্যাসি তৈরি করুন
চ্যাসি তৈরি করুন
চ্যাসি তৈরি করুন

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

  • সস্তা উপকরণ
  • দ্রুত সমাবেশ এবং disassembly
  • সম্প্রসারণযোগ্য (যেমন যোগ করা সেন্সরের জন্য স্থান)
  • ইলেকট্রনিক্সের জন্য শক্তি সঞ্চয় করার জন্য হালকা উপকরণ

পাতলা পাতলা কাঠ দিয়ে একটি সহজ এবং সস্তা চ্যাসি তৈরি করা যায়। এটি একটি fretsaw এবং একটি হাত ড্রিল সঙ্গে মেশিন করা সহজ। আপনি সেন্সর এবং মোটরের জন্য হোল্ডিং তৈরি করতে ছোট কাঠের অংশগুলিকে আঠালো করতে পারেন।

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

মুক্ত চাকা অবশেষে খুব হালকা এবং মাউন্ট করা সহজ। বিকল্পগুলি সব ভারী বা ঘর্ষণে পূর্ণ ছিল (আমি চূড়ান্তটি খুঁজে বের করার আগে তাদের কয়েকটি চেষ্টা করেছিলাম) প্রধান চাকাগুলি মাউন্ট করার পরে লেজ মুক্ত চাকা সমতল করার জন্য আমাকে কেবল একটি কাঠের স্পেসার কাটাতে হয়েছিল।

চাকার বৈশিষ্ট্য (সফ্টওয়্যার গণনার জন্য)

পরিধি: 21, 5 সেমি পালস: 20 ডাল/রেভোলিউশন: 1, 075 সেমি (পরিশেষে 1 ডাল প্রায় 1 সেমি, যা সফ্টওয়্যার গণনার জন্য সহজ)

ধাপ 2: ইলেকট্রনিক্স এবং তারের

ইলেকট্রনিক্স এবং তারের
ইলেকট্রনিক্স এবং তারের
ইলেকট্রনিক্স এবং তারের
ইলেকট্রনিক্স এবং তারের
ইলেকট্রনিক্স এবং তারের
ইলেকট্রনিক্স এবং তারের

প্রকল্পটি ডায়াগ্রামে দেখানো বিভিন্ন মডিউল ব্যবহার করছে।

রাস্পবেরি পাই জিরো প্রধান নিয়ামক। এটি সেন্সর পড়ছে এবং একটি PWM সংকেত দ্বারা মোটর নিয়ন্ত্রণ করছে। এটি একটি দূরবর্তী পিসির সাথে ওয়াইফাই দ্বারা সংযুক্ত।

DRV8833 একটি দ্বৈত মোটর H- সেতু। এটি মোটরগুলিতে পর্যাপ্ত বিদ্যুৎ সরবরাহ করছে (যা রাস্পবেরি পাই করতে পারে না কারণ আউটপুটগুলি কেবল কিছু এমএ সরবরাহ করতে পারে)।

অপটিক্যাল এনকোডার প্রতিবার এনকোডার চাকার মধ্য দিয়ে আলো যাওয়ার সময় একটি বর্গাকার আকৃতির সংকেত প্রদান করছে। সিগন্যাল টগল করার সময় প্রতিবার তথ্য পেতে আমরা রাস্পবেরি পাই এর HW ইন্টারাপ্ট ব্যবহার করব।

Pca9695 একটি সার্ভো কন্ট্রোল বোর্ড। এটি একটি I2C সিরিয়াল বাসের মাধ্যমে যোগাযোগ করছে। এই বোর্ডটি পিডব্লিউএম সংকেত এবং সরবরাহ ভোল্টেজ সরবরাহ করছে যা ক্যামের প্যান এবং টিল্টের জন্য সার্ভোস নিয়ন্ত্রণ করছে।

MPU9265 হল একটি 3-অক্ষের ত্বরণ, 3-অক্ষের কৌণিক ঘূর্ণন গতি এবং 3-অক্ষের চৌম্বকীয় প্রবাহ সেন্সর। আমরা এটি প্রধানত কম্পাস শিরোনাম পেতে ব্যবহার করব।

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

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

ধাপ 3: সফ্টওয়্যার অবকাঠামো

সফটওয়্যার অবকাঠামো
সফটওয়্যার অবকাঠামো
সফটওয়্যার অবকাঠামো
সফটওয়্যার অবকাঠামো

যান্ত্রিকতা অর্জনের পর, আমরা আরামদায়ক উন্নয়ন শর্তাবলী পেতে কিছু সফটওয়্যার অবকাঠামো স্থাপন করব।

গিট

এটি একটি মুক্ত এবং মুক্ত উৎস সংস্করণ নিয়ন্ত্রণ ব্যবস্থা। এটি লিনাক্স হিসাবে বড় প্রকল্পগুলি পরিচালনা করতে ব্যবহৃত হয়, তবে এটি সহজেই ছোট প্রকল্পের জন্য ব্যবহার করা যেতে পারে (গিথুব এবং বিটবকেট দেখুন)।

প্রকল্পের পরিবর্তনগুলি স্থানীয়ভাবে ট্র্যাক করা যেতে পারে এবং সম্প্রদায়ের সাথে সফ্টওয়্যার ভাগ করার জন্য একটি দূরবর্তী সার্ভারে ঠেলে দেওয়া যেতে পারে।

প্রধান ব্যবহৃত কমান্ডগুলি হল:

গিট ক্লোন https://github.com/makerobotics/RPIbot.git [সোর্স কোড এবং গিট কনফিগারেশন পান]

গিট পুল অরিজিন মাস্টার [দূরবর্তী সংগ্রহস্থল থেকে সর্বশেষ পান]

git অবস্থা [স্থানীয় সংগ্রহস্থলের অবস্থা পান। কোন ফাইল কি পরিবর্তন করা হয়েছে?] Git log [commits এর তালিকা পান] git add। [পরবর্তী প্রতিশ্রুতির জন্য বিবেচনা করা মঞ্চে সমস্ত পরিবর্তিত ফাইল যুক্ত করুন] git commit -m "কমিট করার জন্য মন্তব্য" [স্থানীয় সংগ্রহস্থলে পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ করুন] git push Origin মাস্টার [দূরবর্তী সংগ্রহস্থলে সমস্ত কমিট পুশ করুন]

লগিং

পাইথন কিছু বিল্ট ইন লগিং ফাংশন প্রদান করছে। আরও উন্নয়ন শুরু করার আগে সফ্টওয়্যার কাঠামোর ইতিমধ্যে সমস্ত লগিং কাঠামো সংজ্ঞায়িত করা উচিত।

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

logger = logging.getLogger (_ name_)

logger.setLevel (logging. DEBUG)

পরিমাপ এবং চক্রান্ত

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

সেমিকোলন পৃথক ট্রেস ফাইলটি আমাদের প্রধান পাইথন কোড দ্বারা উৎপন্ন হয় এবং এর মতো হেডার থাকতে হবে:

টাইমস্ট্যাম্প; yawCorr; এনকোডার R; I_L;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

প্রথম কলামে টাইমস্ট্যাম্প রয়েছে। নিম্নলিখিত কলামগুলি বিনামূল্যে। চক্রান্তের স্ক্রিপ্টকে কলামের তালিকা সহ ডাকা হয়:

দূরবর্তী@পিসি: ~/পাইথন rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

প্লট স্ক্রিপ্ট টুল ফোল্ডারে পাওয়া যায়:

চক্রান্তকারী পাইথনে mathplotlib ব্যবহার করছে। আপনাকে অবশ্যই এটি আপনার পিসিতে অনুলিপি করতে হবে।

আরও স্বাচ্ছন্দ্যের জন্য, পাইথন স্ক্রিপ্টটি একটি ব্যাশ স্ক্রিপ্ট (plot.sh) দ্বারা ডাকা হয় যা দূরবর্তী পিসিতে রাস্পবেরি পাই ট্রেস ফাইলটি অনুলিপি করতে এবং একটি সংকেত নির্বাচন সহ প্লটারকে কল করতে। ব্যাশ স্ক্রিপ্ট "plot.sh" জিজ্ঞাসা করে যদি ফাইল কপি করতে হয়। প্রতিবার ম্যানুয়ালি কপি করার পরিবর্তে এটি আমার জন্য আরও সুবিধাজনক ছিল। "sshpass" রাস্পবেরি পাই থেকে scp এর মাধ্যমে দূরবর্তী পিসিতে ফাইল কপি করার জন্য ব্যবহৃত হয়। এটি পাসওয়ার্ড না জিজ্ঞাসা করে একটি ফাইল অনুলিপি করতে সক্ষম (এটি একটি প্যারামিটার হিসাবে পাস করা হয়)।

অবশেষে ছবিতে দেখানো প্লটের সাথে একটি উইন্ডো খোলা হয়।

দূরবর্তী যোগাযোগ

রাস্পবেরি পাই এর ডেভেলপমেন্ট ইন্টারফেস হল SSH। ফাইলগুলি সরাসরি টার্গেটে সম্পাদনা করা যেতে পারে, অথবা scp দ্বারা অনুলিপি করা যেতে পারে।

রোবটকে নিয়ন্ত্রণ করতে, Pi তে একটি ওয়েব সার্ভার চলছে, যা ওয়েবসাইটসকেটগুলির মাধ্যমে নিয়ন্ত্রণ প্রদান করে। এই ইন্টারফেসটি পরবর্তী ধাপে বর্ণনা করা হয়েছে।

রাস্পবেরি পাই সেটআপ করুন

সোর্স কোড (setup_rpi.txt) এর "ডক" ফোল্ডারে রাস্পবেরি পাই এর সেটআপ বর্ণনা করার একটি ফাইল আছে। অনেক ব্যাখ্যা নেই কিন্তু অনেক দরকারী কমান্ড এবং লিঙ্ক আছে।

ধাপ 4: ইউজার ইন্টারফেস

ইউজার ইন্টারফেস
ইউজার ইন্টারফেস

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

সফটওয়্যার আর্কিটেকচার

ইউজার ইন্টারফেসটি নিম্নলিখিত ফাইলগুলি দ্বারা তৈরি করা হয়েছে: gui.html [ওয়েব পেজ কন্ট্রোল এবং লেআউট বর্ণনা করা] gui.js [নিয়ন্ত্রণগুলি পরিচালনা করতে এবং আমাদের রোবটের সাথে একটি ওয়েবসকেট সংযোগ খোলার জন্য জাভাস্ক্রিপ্ট কোড রয়েছে] gui.css [এর স্টাইল রয়েছে html নিয়ন্ত্রণ করে। নিয়ন্ত্রণের অবস্থানগুলি এখানে সংজ্ঞায়িত করা হয়েছে]

ওয়েবসকেট যোগাযোগ

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

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

ইন্টারফেস লেআউট

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

ধাপ 5: রোবট প্ল্যাটফর্ম প্রোগ্রামিং

রোবট প্ল্যাটফর্ম প্রোগ্রামিং
রোবট প্ল্যাটফর্ম প্রোগ্রামিং
রোবট প্ল্যাটফর্ম প্রোগ্রামিং
রোবট প্ল্যাটফর্ম প্রোগ্রামিং
রোবট প্ল্যাটফর্ম প্রোগ্রামিং
রোবট প্ল্যাটফর্ম প্রোগ্রামিং

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

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

প্রধান সফটওয়্যার আর্কিটেকচার

সফ্টওয়্যারটি বস্তু ভিত্তিক, কয়েকটি বস্তুতে বিভক্ত। আমার ধারণা ছিল কোডটি 3 টি কার্যকরী ব্লকে বিভক্ত করা:

Sense Think Actuate

Sense.py

প্রধান সেন্সর অধিগ্রহণ এবং প্রক্রিয়াকরণ। ডেটা একটি অভিধানে সংরক্ষিত হয় যা নিম্নলিখিত পর্যায়ে ব্যবহার করা হবে।

Control.py

একটি অ্যাকচুয়েশন সাবক্লাস কিছু বিমূর্ততার পরে মোটর এবং সার্ভস নিয়ন্ত্রণ করছে। প্রধান কন্ট্রোল অবজেক্ট উচ্চ স্তরের কমান্ড এবং মোটরের জন্য কন্ট্রোল অ্যালগরিদম (পিআইডি) পরিচালনা করছে।

rpibot.py

এই প্রধান বস্তু হল টর্নেডো ওয়েব সার্ভার পরিচালনা করা এবং পৃথক থ্রেডে ইন্দ্রিয় এবং নিয়ন্ত্রণ শ্রেণী তাত্ক্ষণিক করা।

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

পিআইডি নিয়ন্ত্রণ

প্রথম কাজ হল আমরা কি নিয়ন্ত্রণ করতে চাই তা খুঁজে বের করা। আমি অবস্থান নিয়ন্ত্রণ করার চেষ্টা করে শুরু করেছিলাম, যা খুব জটিল ছিল এবং খুব বেশি সাহায্য করছিল না।

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

ধাপে ধাপে জটিলতা বাড়াতে, রোবটটি নিয়ন্ত্রণ করা উচিত:

খোলা লুপ (একটি ধ্রুব শক্তি সঙ্গে)

pwm = K

তারপর ক্লোজ লুপ অ্যালগরিদম যোগ করুন

pwm = Kp.speedError+Ki. Integration (speedError)

এবং অবশেষে একটি শেষ পদক্ষেপ হিসাবে দিক নিয়ন্ত্রণ যোগ করুন।

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

সেট; কেপি; 1.0

আমি ওভারশট এড়ানোর জন্য পি প্যারামিটারটি যথেষ্ট কম সেট করতে পারি। অবশিষ্ট ত্রুটিটি I প্যারামিটার দ্বারা সংশোধন করা হয়েছে (সমন্বিত ত্রুটি)

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

ব্যবহৃত কন্ট্রোল ডায়াগ্রাম সংযুক্ত। এটি শুধুমাত্র রোবট নিয়ন্ত্রণের বাম দিক দেখায়।

ধাপ 6: সেন্সর ক্রমাঙ্কন

সেন্সর ক্রমাঙ্কন
সেন্সর ক্রমাঙ্কন
সেন্সর ক্রমাঙ্কন
সেন্সর ক্রমাঙ্কন
সেন্সর ক্রমাঙ্কন
সেন্সর ক্রমাঙ্কন

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

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

ত্বরণ এবং ঘূর্ণন গতি ক্রমাঙ্কন

অনুদৈর্ঘ্য ত্বরণের জন্য সবচেয়ে সহজ ক্রমাঙ্কন (A_x)। স্থবির অবস্থায় প্রায় 0 মি/সে² হওয়া উচিত। আপনি যদি সেন্সরটি সঠিকভাবে ঘোরান, তাহলে আপনি মাধ্যাকর্ষণ পরিমাপ করতে পারেন (প্রায় 9, 8 m/s²)। A_x কে ক্যালিব্রেট করার জন্য, আপনাকে শুধু এটি সঠিকভাবে মাউন্ট করতে হবে এবং তারপরে 0m/s² স্ট্যান্ডস্টিল পেতে অফসেট নির্ধারণ করতে হবে। এখন A_x ক্যালিব্রেটেড।

কম্পাসের জন্য ম্যাগনেটোমিটার ক্রমাঙ্কন

চৌম্বকীয় ক্ষেত্রের সেন্সরের জন্য আরও জটিল ক্রমাঙ্কন প্রয়োজন। আমরা অনুভূমিক স্তরে চৌম্বক ক্ষেত্র পেতে m_x এবং m_y ব্যবহার করব। M_x এবং m_y থাকা আমাদের একটি কম্পাস শিরোনাম গণনা করার সুযোগ দেবে।

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

আমরা m_x এবং m_y রেকর্ড করি যখন আমরা z- অক্ষের চারপাশে রোবট ঘুরিয়ে দিই। আমরা একটি XY চার্টে m_x বনাম m_y চক্রান্ত করি। ছবিতে দেখানো একটি উপবৃত্তের ফলাফল। উপবৃত্তের উৎপত্তি কেন্দ্রিক হতে হবে। এখানে আমরা উভয় দিকের অফসেট পেতে m_x এবং m_y এর সর্বোচ্চ এবং সর্বনিম্ন মান বিবেচনা করি। পরিশেষে আমরা ক্রমাঙ্কন পরীক্ষা করে দেখি যে উপবৃত্ত এখন কেন্দ্রিক।

নরম লোহার ক্রমাঙ্কন মানে আমরা একটি উপবৃত্ত থেকে একটি বৃত্তে ছবি পরিবর্তন করি। এটি প্রতিটি সেনর ভ্যালুতে একটি ফ্যাক্টর যোগ করে তৈরি করা যেতে পারে।

একটি পরীক্ষার রুটিন এখন পুনরায় ক্যালিব্রেট করার জন্য কোড করা যেতে পারে বা কমপক্ষে সেন্সরগুলি এখনও ক্যালিব্রেটেড কিনা তা পরীক্ষা করতে পারে।

কম্পাসের শিরোনাম

ম্যাগনেটোমিটার ডেটা এখন কম্পাস শিরোনাম গণনার জন্য ব্যবহার করা হবে। এর জন্য, আমাদের m_x এবং m_y সংকেতগুলিকে একটি কোণে রূপান্তর করতে হবে। পাইথন সরাসরি math.atan2 ফাংশন প্রদান করছে যার এই লক্ষ্য রয়েছে। সম্পূর্ণ গণনাটি mpu9250_i2c.py ফাইলে সংজ্ঞায়িত করা হয়েছে ("calcHeading (mx, my, mz)")।

ধাপ 7: বিকল্প ডিজাইন

বিকল্প ডিজাইন
বিকল্প ডিজাইন
বিকল্প ডিজাইন
বিকল্প ডিজাইন
বিকল্প ডিজাইন
বিকল্প ডিজাইন

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

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

ক্রমাগত ঘূর্ণন servo pca 9695 এর সাথে সংযুক্ত

একটি ডিসি মোটরের জন্য একটি অতিরিক্ত এইচ-ব্রিজ এড়াতে, আমি প্রথমে ক্রমাগত ঘূর্ণন সার্ভিস দিয়ে শুরু করেছি। এইগুলি ইতিমধ্যে উপস্থিত pca 9695 servo ড্রাইভার দ্বারা চালিত হয়েছিল। সমস্ত প্রপালশন মেকানিক্স এবং সংবাদদাতা ইলেকট্রনিক্স অনেক সহজ ছিল। এই নকশা দুটি ত্রুটি ছিল:

  • Servos এর দরিদ্র নিয়ন্ত্রণ পরিসীমা।
  • অনুপস্থিত এনকোডার ধারণের অবস্থান

সার্ভোসগুলি 50% পিডব্লিউএম দিয়ে চলতে শুরু করে এবং প্রায় 55% এ পূর্ণ গতি থাকে। এটি একটি খুব দুর্বল নিয়ন্ত্রণ পরিসীমা।

একটি এনকোডার হোল্ডিং ছাড়া, এনকোডার যাওয়ার জন্য প্রস্তুত খুঁজে পাওয়া খুব কঠিন ছিল। আমি 3 টি ভিন্ন প্রতিফলন এনকোডার পরীক্ষা করেছি যা চ্যাসিগুলিতে মাউন্ট করা হয়েছিল। আমি চাকার বাইরে কালো এবং সাদা অংশ দিয়ে একটি স্বনির্মিত এনকোডার চাকা টেপ করেছি। আমি QTR-1RC সেন্সর ব্যবহার করেছি যা সঠিক সংকেত পেতে অনেক সংকেত প্রক্রিয়াকরণের প্রয়োজন। রাস্পবেরি পাই সেই ধরণের রিয়েল টাইম প্রসেসিং করতে সক্ষম ছিল না। তাই আমি রোবটের সাথে রিয়েল টাইম কন্ট্রোলার হিসেবে একটি NodeMCU D1 মিনি যোগ করার সিদ্ধান্ত নিয়েছি। এটি প্রক্রিয়াজাত সেন্সর ডেটা সরবরাহ করার জন্য সিরিয়াল UART দ্বারা রাস্পবেরি পাই এর সাথে সংযুক্ত ছিল। NodeMCU HC-SR04 সেন্সরও ম্যানেজ করছিল। মেকানিক্স কঠিন ছিল এবং খুব মজবুত ছিল না, সিরিয়াল লাইন I2C লাইন এবং মোটর থেকে শব্দ পাচ্ছিল, তাই অবশেষে আমি চালিত সাধারণ গিয়ার ডিসি মোটর দিয়ে চেসিসের দ্বিতীয় সংস্করণটি তৈরি করলাম একটি এইচ-ব্রিজ। এই মোটরগুলির একটি অপটিক্যাল এনকোডার রাখার জন্য একটি সেকেন্ডারি আউটপুট শ্যাফট থাকে।

ধাপ 8: ইমেজ প্রসেসিং

ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং
ইমেজ প্রসেসিং

স্বায়ত্তশাসিত ড্রাইভিং উন্নত করতে, আমরা কিছু ইমেজ প্রসেসিং করতে পারি।

ওপেনসিভি লাইব্রেরি তার জন্য একটি রেফারেন্স। এটি দ্রুত বাধা সনাক্তকরণ বাস্তবায়নের জন্য পাইথন ব্যবহার করতে পারে।

আমরা একটি ছবি ক্যাপচার করি এবং কিছু ইমেজ প্রসেসিং টাস্ক প্রয়োগ করি:

ক্যানি এবং সোবেল রূপান্তরের মাধ্যমে প্রথম পরীক্ষা করা হয়েছিল। ক্যানি একজন ভালো প্রার্থী হতে পারে কিন্তু যথেষ্ট বুদ্ধিমান নয়। সোবেল খুব বুদ্ধিমান (খুব বেশি বস্তু সনাক্ত করা হয়েছে)।

অবশেষে আমি সমস্ত অনুভূমিক এবং উল্লম্ব গ্রেডিয়েন্ট (আসবাবপত্র সনাক্ত) মিশ্রণের জন্য আমার নিজস্ব ফিল্টার তৈরি করেছি:

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

এখন আমরা বাধাগুলি সনাক্ত করতে এই নতুন তথ্য ব্যবহার করতে পারি …

ধাপ 9: পরবর্তী পদক্ষেপগুলি …

পরবর্তী পদক্ষেপ…
পরবর্তী পদক্ষেপ…
পরবর্তী পদক্ষেপ…
পরবর্তী পদক্ষেপ…

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

  • ইয়াও এবং চৌম্বকীয় শিরোনাম সংকেতের সেন্সর সংযোজন
  • ক্যামেরা ইমেজ প্রসেসিং (এর জন্য শুধুমাত্র কম CPU উপলব্ধ)
  • সংঘর্ষ সনাক্তকরণ (অতিস্বনক দূরত্ব এবং ক্যামেরা)
  • ম্যাপ বিল্ডিং বা ওরিয়েন্টেশন

এখন যান এবং আপনার নিজের চ্যালেঞ্জ বা লক্ষ্য তৈরি করুন …

প্রস্তাবিত: