فهرست مطالب:

Rpibot - درباره یادگیری روباتیک: 9 مرحله
Rpibot - درباره یادگیری روباتیک: 9 مرحله

تصویری: Rpibot - درباره یادگیری روباتیک: 9 مرحله

تصویری: Rpibot - درباره یادگیری روباتیک: 9 مرحله
تصویری: آموزش علم رباتیک | چطوری رباتیک یاد بگیرم 2024, دسامبر
Anonim
Rpibot - درباره یادگیری رباتیک
Rpibot - درباره یادگیری رباتیک

من یک مهندس نرم افزار تعبیه شده در یک شرکت خودروسازی آلمانی هستم. من این پروژه را به عنوان بستر یادگیری سیستم های جاسازی شده شروع کردم. این پروژه زود لغو شد اما من آنقدر لذت بردم که در وقت آزادم ادامه دادم. این نتیجه…

من شرایط زیر را داشتم:

  • سخت افزار ساده (تمرکز نرم افزار است)
  • سخت افزار ارزان (حدود 100 یورو)
  • قابل افزایش (برخی از گزینه ها در حال حاضر بخشی از توضیحات هستند)
  • ولتاژ تغذیه برای همه قطعات از منبع 5 ولت (پاوربانک)

در واقع هدفی جدا از یادگیری وجود نداشت. این پلت فرم می تواند برای یادگیری ، نظارت ، مسابقات روباتیک و…

این آموزش مبتدی نیست. شما نیاز به دانش اولیه در مورد:

  • برنامه نویسی (پایتون)
  • الکترونیک پایه (برای اتصال ماژول ها به یکدیگر با ولتاژ مناسب)
  • نظریه کنترل اولیه (PID)

سرانجام شما نیز احتمالاً مانند من با مشکل روبرو خواهید شد. با کمی کنجکاوی و استقامت ، پروژه را پشت سر می گذارید و چالش ها را حل می کنید. کد من تا آنجا که ممکن است ساده است و خطوط کد مهم برای ارائه نکات توضیح داده می شود.

کد منبع و فایلهای کامل در اینجا موجود است:

تدارکات:

مکانیک

  • 1 تخته تخته سه لا (اندازه A4 ، ضخامت 4 میلی متر)
  • 3x و M4 x 80 پیچ و مهره
  • 2 برابر موتور Gear با محور خروجی ثانویه برای رمزگذار. چرخ ها.
  • 1x چرخ رایگان

قابلیت نصب 1 برابر پان و دوربین شیب دار (اختیاری)

الکترونیک

  • 1 برابر Raspberry Pi Zero با سربرگ و دوربین
  • 1x سروو کنترل PCA 9685
  • 2x چرخ و مدار رمزگذار نوری
  • 1 عدد سیم جهنده زن
  • 1 برابر پاوربانک USB
  • 1x راننده دو موتوره DRV8833
  • 2 برابر Micro servos SG90 برای حرکت و شیب دوربین (اختیاری)
  • 1 برابر MPU9250 IMU (اختیاری)
  • سنسور فاصله اولتراسونیک 1x HC-SR04 (اختیاری)
  • 1 برابر تخته سوراخ دار و سیم لحیم ، سربرگ ،…

مرحله 1: شاسی را بسازید

ساخت شاسی
ساخت شاسی
ساخت شاسی
ساخت شاسی
ساخت شاسی
ساخت شاسی

من یک طراح مکانیک خوب نیستم. همچنین هدف پروژه ها صرف زمان زیاد در شاسی نیست. به هر حال من الزامات زیر را تعریف کردم:

  • مواد ارزان
  • مونتاژ و جداسازی سریع
  • قابل افزایش (به عنوان مثال فضا برای سنسورهای اضافه)
  • مواد سبک برای صرفه جویی در انرژی برای لوازم الکترونیکی

یک شاسی ساده و ارزان را می توان از تخته سه لا تهیه کرد. کار با ماشین اره برقی و مته دستی آسان است. می توانید قطعات چوبی کوچکی را بچسبانید تا جای حسگرها و موتورها ایجاد شود.

در مورد جایگزینی قطعات معیوب یا اشکال زدایی الکتریکی فکر کنید. قطعات اصلی باید توسط پیچ ثابت شوند تا قابل تعویض باشند. تفنگ چسب حرارتی ممکن است ساده باشد ، اما احتمالاً بهترین راه برای ساخت شاسی نیست … من به زمان زیادی نیاز داشتم تا در مورد یک مفهوم آسان برای جدا کردن قطعات به راحتی فکر کنم. چاپ سه بعدی یک جایگزین خوب است ، اما می تواند بسیار گران یا زمان بر باشد.

چرخ رایگان در نهایت بسیار سبک است و به راحتی قابل نصب است. گزینه های جایگزین همه سنگین یا پر اصطکاک بودند (من چند مورد از آنها را قبل از یافتن آخرین مورد آزمایش کردم). من فقط مجبور شدم یک فاصله گیر چوبی را برش دهم تا چرخ بدون دم پس از نصب چرخ های اصلی تراز شود.

ویژگی های چرخ (برای محاسبات نرم افزار)

دور: 21 ، 5 سانتیمتر پالس: 20 پالس/دور. وضوح: 1 ، 075 سانتیمتر (در نهایت 1 پالس حدود 1 سانتیمتر است ، که برای محاسبات نرم افزاری آسان است)

مرحله 2: الکترونیک و سیم کشی

الکترونیک و سیم کشی
الکترونیک و سیم کشی
الکترونیک و سیم کشی
الکترونیک و سیم کشی
الکترونیک و سیم کشی
الکترونیک و سیم کشی

پروژه با استفاده از ماژول های مختلف همانطور که در نمودار نشان داده شده است.

Raspberry Pi Zero کنترل کننده اصلی است. این سنسورها را می خواند و موتورها را با سیگنال PWM کنترل می کند. این دستگاه با وای فای به رایانه از راه دور متصل می شود.

DRV8833 یک پل H دو موتوره است. این جریان کافی را برای موتورها فراهم می کند (که رزبری پای نمی تواند انجام دهد زیرا خروجی ها فقط می توانند مقداری mA را تحویل دهند).

رمزگذار نوری هر بار که نور از چرخ های رمزگذار عبور می کند ، یک سیگنال مربع شکل ارائه می دهد. ما از وقفه های HW رزبری پای برای بدست آوردن اطلاعات در هر زمان تغییر سیگنال استفاده می کنیم.

pca9695 یک برد کنترل سروو است. با یک گذرگاه سریال I2C ارتباط برقرار می کند. این برد سیگنالهای PWM و ولتاژ منبع تغذیه را کنترل می کند که سرووها را برای حرکت و چرخاندن بادامک کنترل می کند.

MPU9265 یک شتاب 3 محوری ، سرعت چرخش زاویه ای 3 محوری و سنسور شار مغناطیسی 3 محوری است. ما عمدتا از آن برای به دست آوردن عنوان قطب نما استفاده می کنیم.

ماژول های مختلف همه توسط سیم جامپر به یکدیگر متصل می شوند. یک تخته نان به عنوان یک توزیع کننده عمل می کند و ولتاژ تغذیه (5V و 3.3V) و زمین را فراهم می کند. اتصالات همه در جدول اتصال توضیح داده شده است (پیوست را ببینید). اتصال 5 ولت به ورودی 3.3 ولت احتمالاً تراشه شما را از بین می برد. مراقب باشید و قبل از تهیه دوبار تمام سیم کشی خود را بررسی کنید (در اینجا به ویژه رمزگذار باید در نظر گرفته شود). قبل از اتصال همه تخته ها ، باید ولتاژهای تغذیه اصلی روی صفحه اعزام را با مولتی متر اندازه گیری کنید. ماژول ها توسط پیچ های نایلونی به داخل شاسی ثابت شدند. همچنین در اینجا خوشحالم که آنها را ثابت می کنم اما در صورت خرابی نیز قابل حذف هستند.

تنها لحیم کاری سرانجام موتورها و تخته نان و هدر بود. صادقانه بگویم ، من سیم های بلوز را دوست دارم اما می توانند منجر به قطع ارتباط شوند. در برخی موارد ، برخی از نظارت های نرم افزاری ممکن است از شما در تجزیه و تحلیل اتصالات پشتیبانی کنند.

مرحله 3: زیرساخت نرم افزار

زیرساخت نرم افزاری
زیرساخت نرم افزاری
زیرساخت نرم افزاری
زیرساخت نرم افزاری

پس از دستیابی به مکانیک ، برخی زیرساخت های نرم افزاری را ایجاد می کنیم تا شرایط توسعه راحت را داشته باشیم.

گیت

این یک سیستم کنترل نسخه رایگان و منبع باز است. از آن برای مدیریت پروژه های بزرگ به عنوان لینوکس استفاده می شود ، اما به راحتی می توان از آن برای پروژه های کوچک نیز استفاده کرد (به Github و Bitbucket مراجعه کنید).

تغییرات پروژه را می توان به صورت محلی ردیابی کرد و همچنین به سرور راه دور هدایت شد تا نرم افزار را با جامعه به اشتراک بگذارد.

دستورات اصلی مورد استفاده عبارتند از:

git clone https://github.com/makerobotics/RPIbot.git [کد منبع و پیکربندی git را دریافت کنید]

git pull origin master [جدیدترین ها را از مخزن راه دور دریافت کنید]

git status [وضعیت مخزن محلی را دریافت کنید. آیا فایلهایی تغییر کرده اند؟] git log [دریافت لیست تعهدات] git add. [همه فایلهای تغییر یافته را به مرحله مورد نظر برای انجام بعدی اضافه کنید] git commit -m "comment for commit" [اعمال تغییرات در مخزن محلی] git push origin master [همه تعهدات را به مخزن راه دور فشار دهید]

ورود به سیستم

پایتون برخی از توابع ورود به سیستم را ارائه می دهد. ساختار نرم افزار باید قبل از شروع توسعه بیشتر ، تمام چارچوب ورود به سیستم را تعریف کند.

Logger را می توان پیکربندی کرد تا با یک قالب تعریف شده در ترمینال یا در یک فایل log ثبت شود. در مثال ما ، logger توسط کلاس وب سرور پیکربندی شده است ، اما ما می توانیم آن را به تنهایی انجام دهیم. در اینجا ما فقط سطح ورود را روی DEBUG تنظیم می کنیم:

logger = logging.getLogger (_ name_)

logger.setLevel (logging. DEBUG)

اندازه گیری و ترسیم نقشه

برای تجزیه و تحلیل سیگنال ها در طول زمان ، بهترین کار این است که آنها را در یک نمودار ترسیم کنید. از آنجا که رزبری پای فقط یک ترمینال کنسول دارد ، ما داده ها را در یک فایل csv جدا شده از ویرگول ردیابی کرده و از رایانه راه دور ترسیم می کنیم.

فایل ردیابی جدا شده از ویرگول توسط کد پایتون اصلی ما ایجاد می شود و باید دارای سرصفحه هایی مانند این باشد:

timestamp؛ yawCorr؛ encoderR؛ I_L؛ odoDistance؛ ax؛ encoderL؛ I_R؛ yaw؛ eSpeedR؛ eSpeedL؛ pwmL؛ speedL؛ CycleTimeControl؛ wz؛ pwmR؛ speedR؛ Iyaw؛ hdg؛ m_y؛ m_x؛ eYaw

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;

ستون اول حاوی نشان زمان است. ستون های زیر رایگان هستند. اسکریپت ترسیم با لیستی از ستون هایی که باید ترسیم شوند ، نامیده می شود:

رایانه از راه دور@: ~/python rpibot_plotter -f trace.csv -p speedL، speedR، pwmL، pwmR

اسکریپت طرح در پوشه ابزار موجود است:

پلاتر از mathplotlib در پایتون استفاده می کند. باید آن را در رایانه خود کپی کنید.

برای راحتی بیشتر ، اسکریپت پایتون توسط یک اسکریپت bash (plot.sh) فراخوانی می شود که برای کپی فایل ردیابی رزبری پای در رایانه از راه دور و فراخوانی پلاتر با انتخاب سیگنال استفاده می شود. اسکریپت bash "plot.sh" می پرسد اگر فایل باید کپی شود این به جای کپی دستی هر بار برای من راحت تر بود. "sshpass" برای کپی فایل از Raspberry Pi به رایانه از راه دور از طریق scp استفاده می شود. این برنامه می تواند فایلی را بدون درخواست رمز عبور کپی کند (به عنوان یک پارامتر ارسال می شود).

سرانجام پنجره ای با نمودار باز می شود که در تصویر نشان داده شده است.

ارتباط از راه دور

رابط توسعه رزبری پای SSH است. فایلها را می توان مستقیماً روی هدف ویرایش کرد یا توسط scp کپی شد.

برای کنترل ربات ، یک وب سرور روی Pi کار می کند و کنترل را از طریق WebSockets انجام می دهد. این رابط در مرحله بعد توضیح داده شده است.

Raspberry Pi را راه اندازی کنید

فایلی وجود دارد که نحوه تنظیم رزبری پای را در پوشه "doc" کد منبع (setup_rpi.txt) توضیح می دهد. توضیحات زیادی وجود ندارد ، اما دستورات و پیوندهای مفید زیادی وجود دارد.

مرحله 4: رابط کاربری

رابط کاربری
رابط کاربری

ما از وب سرور سبک Tornado برای میزبانی رابط کاربری استفاده می کنیم. این یک ماژول پایتون است که ما هنگام راه اندازی نرم افزار کنترل ربات با آن تماس می گیریم.

معماری نرم افزار

رابط کاربری توسط فایلهای زیر ساخته می شود: gui.html [شرح کنترل ها و طرح بندی صفحه وب] gui.js [شامل کد جاوا اسکریپت برای کنترل کنترل ها و باز کردن اتصال شبکه وب به ربات ما] gui.css [شامل سبک های کنترل های html موقعیت کنترل ها در اینجا تعریف شده است]

ارتباط شبکه ای

رابط کاربری جالب ترین نیست ، اما کار خود را انجام می دهد. من در اینجا بر فناوری هایی تمرکز کردم که برای من تازگی داشت ، مانند Websockets.

وب سایت با وب سرور ربات توسط Websockets ارتباط برقرار می کند. این یک کانال ارتباطی دو طرفه است که با شروع اتصال باز خواهد ماند. ما دستورات روبات را از طریق Websocket به Raspberry Pi ارسال می کنیم و اطلاعات (سرعت ، موقعیت ، جریان دوربین) را برای نمایش به عقب برمی گردانیم.

طرح رابط

رابط کاربری دارای ورودی دستی برای دستورات است. این در ابتدا برای ارسال دستورات به روبات استفاده می شد. یک چک باکس جریان دوربین را روشن و خاموش می کند. دو لغزنده در حال کنترل تخت و شیب دوربین هستند. قسمت بالا سمت راست رابط کاربر حرکت روبات ها را کنترل می کند. می توانید سرعت و فاصله هدف را کنترل کنید. اطلاعات پایه تله متری در نقاشی روبات نمایش داده می شود.

مرحله 5: برنامه نویسی بستر ربات

برنامه نویسی بستر ربات
برنامه نویسی بستر ربات
برنامه نویسی بستر ربات
برنامه نویسی بستر ربات
برنامه نویسی بستر ربات
برنامه نویسی بستر ربات

این قسمت هدف اصلی پروژه بود. هنگام معرفی شاسی جدید با موتورهای DC ، بسیاری از نرم افزارها را تغییر دادم. به دلایل مختلف از پایتون به عنوان زبان برنامه نویسی استفاده کردم:

  • این زبان اصلی رزبری پای است
  • این یک زبان سطح بالا است که دارای ویژگی ها و برنامه های افزودنی زیادی است
  • این شیء گرا است اما می تواند برای برنامه نویسی متوالی نیز استفاده شود
  • نیازی به کامپایل و زنجیره ابزار نیست. کد را ویرایش کرده و اجرا کنید.

معماری اصلی نرم افزار

این نرم افزار شی گرا است و به چند شی تقسیم شده است. ایده من این بود که کد را در 3 بلوک کاربردی تقسیم کنم:

حس بیندیشید فعال کنید

Sense.py

دستیابی و پردازش سنسور اصلی داده ها در فرهنگ لغت ذخیره می شوند تا در مرحله بعد مورد استفاده قرار گیرند.

Control.py

یک زیر کلاس فعال سازی موتورها و سرووها را پس از اندکی انتزاع کنترل می کند. شیء اصلی کنترل ، دست زدن به دستورات سطح بالا و همچنین الگوریتم های کنترل (PID) برای موتور است.

rpibot.py

این هدف اصلی مدیریت وب سرور Tornado و ایجاد کلاس های حس و کنترل در موضوعات جداگانه است.

هر ماژول را می توان به تنهایی یا به عنوان بخشی از کل پروژه اجرا کرد. فقط می توانید اطلاعات سنسور را حس کرده و چاپ کنید تا بررسی کنید که سنسورها به درستی متصل شده اند و اطلاعات مناسب را ارائه می دهند.

کنترل PID

اولین کار این است که دریابیم چه می خواهیم کنترل کنیم. من با تلاش برای کنترل موقعیت شروع کردم ، که بسیار پیچیده بود و کمک چندانی نمی کرد.

در نهایت ، ما می خواهیم سرعت هر چرخ و همچنین جهت ربات را کنترل کنیم. برای انجام این کار ، ما باید دو منطق کنترل را به هم متصل کنیم.

برای افزایش پیچیدگی مرحله به مرحله ، ربات باید کنترل شود:

حلقه باز (با قدرت ثابت)

pwm = K

سپس الگوریتم حلقه بسته را اضافه کنید

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

و در نهایت کنترل جهت را به عنوان آخرین مرحله اضافه کنید.

برای کنترل سرعت از کنترل "PI" و "P" فقط برای خمیازه استفاده کردم. با آزمایش پارامترها را به صورت دستی تنظیم کردم. احتمالاً در اینجا می توان از پارامترهای بسیار بهتری استفاده کرد. هدف من فقط یک خط مستقیم بود و تقریباً به آن رسیدم. من یک رابط در نرم افزار ایجاد کردم تا متغیرهایی را توسط رابط کاربری بنویسم. تنظیم پارامتر Kp روی 1.0 به دستور زیر در رابط کاربری نیاز دارد:

SET ؛ Kp ؛ 1.0

من می توانم پارامتر P را به اندازه کافی پایین تنظیم کنم تا از هرگونه بیش از حد جلوگیری شود. خطای باقی مانده با پارامتر I تصحیح می شود (خطای یکپارچه)

برای من دشوار بود که بفهمم چگونه می توان هر دو کنترل را آبشاری کرد. راه حل ساده است ، اما من قبلاً راههای دیگری را امتحان کردم … بنابراین ، سرانجام ، سرعت سرعت چرخها را تغییر دادم تا در یک جهت یا در جهت دیگر بچرخند. تغییر مستقیم خروجی کنترل سرعت خطا بود زیرا کنترل سرعت در تلاش بود این آشفتگی را برطرف کند.

نمودار کنترل مورد استفاده ضمیمه شده است. فقط سمت چپ کنترل ربات را نشان می دهد.

مرحله 6: کالیبراسیون سنسور

کالیبراسیون سنسور
کالیبراسیون سنسور
کالیبراسیون سنسور
کالیبراسیون سنسور
کالیبراسیون سنسور
کالیبراسیون سنسور

اولین چیزی که باید در نظر بگیرید این است که کل IMU باید به درستی کار کند. من 3 قسمت سفارش دادم و فرستادم تا سنسور کامل کار کنم. هر سنسور قبلی دارای قسمت هایی از سنسور بود که به درستی کار نمی کرد یا اصلا کار نمی کرد. من از چند اسکریپت نمونه برای آزمایش اصول اولیه قبل از نصب آن در ربات استفاده کردم.

سیگنال های حسگر IMU قبل از استفاده باید کالیبره شوند. برخی از سیگنالهای سنسور بستگی به زاویه و موقعیت نصب دارد.

کالیبراسیون سرعت و شتاب

ساده ترین کالیبراسیون مربوط به شتاب طولی (A_x) است. در حالت سکون باید حدود 0 متر بر ثانیه باشد. اگر سنسور را به درستی بچرخانید ، می توانید گرانش (حدود 9 ، 8 متر بر ثانیه) را اندازه گیری کنید. برای کالیبراسیون a_x ، فقط باید آن را به درستی نصب کرده و سپس offset را تعریف کنید تا 0 متر بر ثانیه در حالت سکون به دست آید. در حال حاضر A_x کالیبره شده است. شما می توانید تنظیمات مربوط به سرعت چرخش را به روش مشابه در حالت سکون دریافت کنید.

کالیبراسیون مغناطیس سنج برای قطب نما

کالیبراسیون پیچیده تری برای سنسورهای میدان مغناطیسی لازم است. ما از m_x و m_y برای بدست آوردن میدان مغناطیسی در سطح افقی استفاده می کنیم. داشتن m_x و m_y به ما فرصت محاسبه عنوان قطب نما را می دهد.

برای هدف ساده ما فقط انحراف آهن سخت را تنظیم می کنیم. این کار باید به این صورت انجام شود که سنسور بسته به اختلالات میدان مغناطیسی در موقعیت نهایی قرار دارد.

ما m_x و m_y را ضبط می کنیم در حالی که روبات را به دور محور z می چرخانیم. m_x vs m_y را در نمودار XY ترسیم می کنیم. نتیجه یک بیضی است همانطور که در تصویر نشان داده شده است. بیضوی باید بر مبنای آن متمرکز باشد. در اینجا ما حداکثر و حداقل مقادیر m_x و m_y را برای بدست آوردن جبران در هر دو جهت در نظر می گیریم. در نهایت کالیبراسیون را بررسی می کنیم و می بینیم که بیضی اکنون در مرکز قرار دارد.

کالیبراسیون نرم آهن به این معنی است که ما تصویر را از بیضی به یک دایره تغییر می دهیم. این را می توان با افزودن یک عامل بر روی هر مقدار سنسور ایجاد کرد.

اکنون می توان یک روال آزمایشی را برای کالیبراسیون مجدد یا حداقل برای بررسی کالیبره شدن سنسورها کدگذاری کرد.

عنوان قطب نما

داده های مغناطیس سنج اکنون برای محاسبه عنوان قطب نما استفاده می شود. برای این کار ، ما باید سیگنال های m_x و m_y را به زاویه تبدیل کنیم. پایتون مستقیماً تابع math.atan2 را ارائه می دهد که این هدف را دارد. محاسبه کامل در فایل mpu9250_i2c.py ("calcHeading (mx، my، mz)") تعریف شده است.

مرحله 7: طراحی های جایگزین

طرح های جایگزین
طرح های جایگزین
طرح های جایگزین
طرح های جایگزین
طرح های جایگزین
طرح های جایگزین

این پروژه زمان زیادی را صرف کرد زیرا طرح کاملاً باز بود. برای هر جزء پیاده سازی اولیه ای انجام دادم و محدودیت های سیستم را تجربه کردم.

پیچیده ترین موضوع رمزگذار چرخ بود. قبل از پیدا کردن رمزگذار نوری مورد استفاده ، 3 گزینه مختلف را آزمایش کردم. من فکر می کنم که راه حل های سقط شده نیز در چنین پروژه ای بسیار جالب هستند. مربوط به قسمت هایی است که بیشتر یاد گرفته ام.

سروو چرخش پیوسته متصل به pca 9695

برای جلوگیری از پل H اضافی برای موتور DC ، ابتدا با سروهای چرخشی مداوم شروع کردم. اینها توسط درایور سرو pca 9695 در حال حاضر هدایت می شوند. همه مکانیک های محرک و الکترونیک مربوطه بسیار ساده تر بودند. این طرح دو اشکال داشت:

  • محدوده کنترل ضعیف سروها.
  • رمزگذار گم شده محل نگهداری

سروها با 50 درصد pwm شروع به حرکت می کنند و سرعت کامل آنها حدود 55 درصد است. این محدوده کنترل بسیار ضعیف است.

بدون نگه داشتن رمزگذار ، پیدا کردن رمزگذار آماده برای حرکت بسیار مشکل بود. من 3 رمزگذار بازتاب مختلف را که روی شاسی نصب شده بودند ، آزمایش کردم. یک چرخ رمزگذار خود ساخته در قسمت بیرونی چرخ با قسمت های سیاه و سفید ضبط کردم. من از سنسورهای QTR-1RC استفاده کردم که برای دریافت سیگنال مناسب به پردازش سیگنال زیادی نیاز دارند. Raspberry Pi قادر به انجام این نوع پردازش زمان واقعی نبود. بنابراین تصمیم گرفتم NodeMCU D1 mini را به عنوان کنترل کننده زمان واقعی به ربات اضافه کنم. این دستگاه توسط سریال UART به تمشک Pi متصل شد تا داده های حسگر پردازش شده را تحویل دهد. NodeMCU همچنین سنسور HC-SR04 را مدیریت می کرد. مکانیک کار دشواری بود و چندان قوی نبود ، خط سریال از خط I2C و موتورها سر و صدا می کرد ، بنابراین در نهایت من نسخه دوم شاسی را با موتورهای DC ساده با دنده ساده ساختم. یک پل H این موتورها دارای شفت خروجی ثانویه برای قرار دادن رمزگذار نوری هستند.

مرحله 8: پردازش تصویر

پردازش تصویر
پردازش تصویر
پردازش تصویر
پردازش تصویر
پردازش تصویر
پردازش تصویر
پردازش تصویر
پردازش تصویر

برای بهبود رانندگی خودکار ، می توانیم پردازش تصویر را انجام دهیم.

کتابخانه opencv مرجعی برای آن است. می تواند توسط پایتون برای اجرای سریع تشخیص موانع استفاده شود.

ما یک تصویر را ضبط می کنیم و برخی از کارهای پردازش تصویر را اعمال می کنیم:

اولین آزمایشها با تبدیل Canny و Sobel انجام شد. کانی می تواند کاندیدای خوبی باشد اما به اندازه کافی معقول نیست. سوبل بسیار معقول است (اشیاء زیادی شناسایی شده است).

در نهایت من فیلتر خودم را برای مخلوط کردن همه شیب افقی و عمودی (تشخیص مبلمان) ساختم:

  • تصویر رنگی را به تصویر سطح خاکستری تبدیل کنید
  • برای حذف نویز کوچک ، تصویر را تار کنید
  • تصویر را در یک تصویر سیاه و سفید قرار دهید
  • اکنون شیب های افقی و عمودی را تشخیص می دهیم تا اشیاء را به عنوان دیوار و مبلمان تشخیص دهیم
  • ما فقط خطوط بزرگ باقی مانده را فیلتر می کنیم (خطوط رنگی را در تصویر ببینید)

اکنون می توانیم از این اطلاعات جدید برای تشخیص موانع استفاده کنیم…

مرحله نهم: مراحل بعدی…

مراحل بعدی…
مراحل بعدی…
مراحل بعدی…
مراحل بعدی…

اکنون ، ما یک پلت فرم روبات ساده با سنسورها ، محرک ها و دوربین داریم. هدف من این است که به صورت خودکار حرکت کنم و بدون اضافه کردن سنسورهای دیگر به ایستگاه برگردم. برای این کار به مراحل زیر نیاز دارم:

  • همجوشی حسگر انحراف و سیگنال های هدینگ مغناطیسی
  • پردازش تصویر دوربین (فقط CPU کم برای آن موجود است)
  • تشخیص برخورد (فاصله اولتراسونیک و دوربین)
  • نقشه سازی یا جهت گیری

حالا بروید و چالش ها یا اهداف خود را ایجاد کنید…

توصیه شده: