فهرست مطالب:

ربات خودمختار والاس - قسمت 4 - اضافه کردن فاصله IR و سنسورهای "آمپر": 6 مرحله
ربات خودمختار والاس - قسمت 4 - اضافه کردن فاصله IR و سنسورهای "آمپر": 6 مرحله

تصویری: ربات خودمختار والاس - قسمت 4 - اضافه کردن فاصله IR و سنسورهای "آمپر": 6 مرحله

تصویری: ربات خودمختار والاس - قسمت 4 - اضافه کردن فاصله IR و سنسورهای
تصویری: اینم یه ربات خود مختار که خودش لباسو تا میزنه بدون اتصال به کنترل !!! 2024, جولای
Anonim
Image
Image
افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)

سلام ، امروز مرحله بعدی بهبود قابلیت های والاس را شروع می کنیم. به طور خاص ، ما در تلاش هستیم تا توانایی آن را در تشخیص و اجتناب از موانع با استفاده از سنسورهای مادون قرمز ارتقا دهیم و همچنین از توانایی موتور کنترل Roboclaw برای نظارت بر جریان و تبدیل آن به یک "حسگر" مجازی (نرم افزاری) استفاده کنیم. در نهایت ، نحوه حرکت بدون SLAM (موقعیت مکانی و نقشه برداری) (در حال حاضر) را بررسی می کنیم ، زیرا ربات هنوز سنسور IMU (واحد اندازه گیری اینرسی) یا ToF (زمان پرواز) ندارد.

با ناوبری ، در ابتدا فقط دو هدف اصلی وجود خواهد داشت:

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

این پروژه با یک کیت روبات و به کار انداختن حرکات اولیه با استفاده از صفحه کلید و اتصال ssh آغاز شد.

مرحله دوم اضافه کردن مدارهای پشتیبانی کافی برای آماده سازی برای اضافه کردن بسیاری از سنسورها بود.

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

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

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

(به روز رسانی: در حال حاضر ، در حال حاضر ، نظارت فعلی برنامه A است در حالت معکوس ، زیرا من موقتاً سنسورها را از عقب برداشته ام).

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

آنچه در این ویدئو مشاهده می کنید شش سنسور آکوستیک جلو HCSR04 و دو سنسور IR شارپ است. سنسورهای IR چندان در این ویدئو ظاهر نشدند. نقطه قوت آنها بیشتر زمانی است که ربات خود را در ناهارخوری رو به روی میز و صندلی می بیند.

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

در نهایت ، از تاریخ 100 حرکت اخیر و برخی از تجزیه و تحلیلهای اساسی برای پاسخ به یک سوال استفاده می کند:

"آیا اخیراً پیشرفت رو به جلو (یا در رقص تکراری گیر کرده است) وجود دارد؟"

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

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

مرحله 1: اضافه کردن مدار پشتیبانی (MCP3008)

افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)
افزودن مدار پشتیبانی (MCP3008)

قبل از اینکه بتوانیم سنسورهای IR را اضافه کنیم ، به مدار رابط بین آنها و Raspberry Pi نیاز داریم.

ما یک مبدل آنالوگ به دیجیتال MCP3008 اضافه می کنیم. منابع آنلاین زیادی برای اتصال این تراشه به رزبری پای وجود دارد ، بنابراین من در اینجا به آن نمی پردازم.

در اصل ، ما یک انتخاب داریم. اگر نسخه سنسورهای IR در 3V کار می کند ، MCP3008 نیز می تواند کار کند ، و ما می توانیم مستقیماً به رزبری متصل شویم.

[سنسور IR 3V] - [MCP3008] - [Raspberrry Pi]

در مورد من ، با این حال ، من بیشتر 5 ولت کار می کنم ، بنابراین این به معنی تغییر سطح دو جهت است.

[سنسور IR 5V]-[MCP3008]-[اتوبوس دو جهته 5V-3V]-[Raspberry Pi]

توجه: فقط یک سیگنال خروجی از سنسور IR وجود دارد. مستقیماً به یکی از خطوط سیگنال آنالوگ ورودی MCP3008 می رود. از MCP3008 ، 4 خط داده وجود دارد که ما باید (از طریق گذرگاه دو طرفه) به رزبری پای متصل کنیم.

در حال حاضر ، ربات ما تنها با دو سنسور IR کار می کند ، اما ما به راحتی می توانیم تعداد بیشتری را اضافه کنیم. MCP3008 هشت کانال ورودی آنالوگ.

مرحله 2: نصب سنسورهای IR

سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR
سنسورهای Mount IR

شارپ چندین سنسور IR مختلف ایجاد می کند و دامنه و محدوده پوشش آنها متفاوت است. من اتفاقاً مدل GP2Y0A60SZLF را سفارش دادم. مدلی که انتخاب می کنید بر روی موقعیت و جهت سنسور تأثیر می گذارد. متأسفانه برای من ، من دقیقاً تحقیق نکردم که دقیقاً کدام سنسورها را دریافت کنم. این بیشتر یک تصمیم "کدام یک را می توان در زمان و قیمت مناسب از منبع معتبر تهیه کرد ، از بین مواردی که ارائه می دهند" بود.

(به روز رسانی: با این حال ، ممکن است مهم نباشد ، زیرا به نظر می رسد که سنسورها با روشنایی محیط داخلی اشتباه گرفته می شوند. من هنوز در حال بررسی این موضوع هستم)

حداقل سه روش برای نصب این سنسورها روی ربات وجود دارد.

  1. آنها را در یک موقعیت ثابت ، در جلو ، رو به کمی از یکدیگر قرار دهید.
  2. آنها را روی سروو ، در جلو ، کمی رو به رو از یکدیگر قرار دهید.
  3. آنها را در یک موقعیت ثابت ، در جلو ، اما در سمت چپ و راستترین گوشه های دور ، زاویه دار یکدیگر قرار دهید.

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

با انتخاب شماره 1 ، هرچه فاصله سنسورها از یکدیگر بیشتر باشد ، یک نقطه کور در مرکز بیشتر خواهد بود.

ما می توانیم شماره 2 را انجام دهیم (بعنوان امکان برخی از تصاویر را با سروو اضافه کردم) و آنها را جارو کنیم ، و بدیهی است که این می تواند بیشترین محدوده را پوشش دهد. با این حال ، من می خواهم استفاده از سروو را تا آنجا که ممکن است به حداقل برسانم ، حداقل به دو دلیل:

  • ما از یکی از کانال های ارتباطی PWM در رزبری پای استفاده خواهیم کرد. (ممکن است این مورد را افزایش دهید اما هنوز…)
  • تساوی فعلی با سروو می تواند قابل توجه باشد
  • بیشتر به سخت افزار و نرم افزار می افزاید

من می خواهم هنگام اضافه کردن سنسورهای مهمتر ، مانند زمان پرواز (ToF) یا شاید یک دوربین ، گزینه سروو را برای بعداً بگذارم.

یک مزیت احتمالی دیگر با انتخاب شماره 2 وجود دارد که با دو انتخاب دیگر در دسترس نیست. بسته به نور ، این سنسورهای IR ممکن است گیج شوند. ممکن است این ربات یک شیء را بخواند که به طور قریب الوقوع نزدیک است در حالی که در واقع هیچ جسم نزدیکی وجود ندارد. با انتخاب شماره 3 ، از آنجا که زمینه های آنها می توانند همپوشانی داشته باشند ، هر دو سنسور می توانند یک شیء (از زوایای مختلف) را ثبت کنند.

بنابراین ما در حال انتخاب محل شماره 3 هستیم.

مرحله 3: زمان آزمایش

Image
Image

بعد از اینکه تمام ارتباطات بین رزبری پای ، MCP3008 ADC و سنسورهای شارپ IR را برقرار کردیم ، زمان آزمایش فرا رسیده است. فقط یک آزمایش ساده برای اطمینان از کارکرد سیستم با سنسورهای جدید.

مانند دستورالعمل های قبلی ، من تا آنجا که ممکن است از کتابخانه wiringPi C استفاده می کنم. کارها را آسان می کند. چیزی که در بررسی وب سایت wiringPi چندان مشخص نیست ، پشتیبانی مستقیم از MCP3004/3008 است.

حتی بدون آن ، شما فقط می توانید از پسوند SPI استفاده کنید. اما نیازی نیست. اگر نگاهی دقیق به مخزن Giton برای سیم کشی بیاندازید ، با لیستی از تراشه های پشتیبانی شده روبرو می شوید که یکی از آنها تراشه MCP3004/3008 است.

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

مرحله 4: سنسور مجازی - AmpSensor

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

این ربات در حال حاضر دارای هشت سنسور سونار آکوستیک HCSR04 (تمرکز این دستورالعمل نیست) است و اکنون دارای دو سنسور فاصله IR شارپ است. همانطور که قبلاً گفته شد ، ما می توانیم از چیز دیگری استفاده کنیم: ویژگی سنجش جریان موتور Roboclaw.

ما می توانیم آن فراخوانی پرس و جو را به موتور کنترل کننده در یک کلاس C ++ بپیچیم و آن را AmpSensor بنامیم.

با افزودن برخی از "هوشمند" ها به نرم افزار ، می توان جریان معمولی را در حین حرکت مستقیم (به جلو ، عقب) و همچنین حرکات چرخشی (چپ ، راست) کنترل و تنظیم کرد. هنگامی که محدوده آمپرها را می دانیم ، می توانیم مقدار بحرانی را انتخاب کنیم ، به طوری که اگر AmpSensor از موتور کنترل کننده مقدار بیشتری از این مقدار بخواند ، می دانیم که احتمالاً موتورها متوقف شده اند و این معمولاً نشان می دهد که ربات دچار ضربه شده است. به چیزی

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

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

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

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

این موتور دارای موتورهای رمزگذار نیست و IMU (واحد اندازه گیری اینرسیال) ندارد ، بنابراین تشخیص اینکه آیا واقعاً در حال حرکت است یا در حال چرخش است و چقدر است.

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

من عمداً از یک میکروکنترلر مانند آردوینو استفاده نکردم زیرا الف) من محیط psuedo-C ++ را دوست ندارم ، ب) و توسعه بیش از حد حافظه خواندن و نوشتن را فرسوده می کند (؟) ، و اینکه من آیا برای توسعه نیاز به یک کامپیوتر میزبان دارد (؟). یا شاید من مثل Raspberry Pi اتفاق بیفتم.

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

این رویکرد پیچیده به نظر می رسید و چندان فایده ای ندارد ، هنگامی که می توانیم از حسگرهای بهتر ToF (زمان پرواز) (بعدا) برای این منظور (SLAM) استفاده کنیم.

یکی از رویکردهایی که می توانیم از آن استفاده کنیم این است که نوعی از دستورات حرکتی را که در آخرین X ثانیه یا دستورات صادر شده است ، پیگیری کنیم.

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

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

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

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

من می توانم به دو روش بسیار اساسی (ابتدایی) برای استفاده از تاریخ جنبش فکر کنم.

  • برای آخرین تعداد X حرکت ، آیا آنها با الگوی Y مطابقت دارند. یک مثال ساده می تواند (و این اتفاق افتاد) "جلو ، عقب ، جلو ، معکوس ، ….." باشد. بنابراین این تابع تطبیق وجود دارد که یا TRUE (الگوی یافت شده) یا FALSE (یافت نشد) را برمی گرداند. اگر TRUE است ، در قسمت ناوبری برنامه ، دنباله های دیگری از حرکت را امتحان کنید.
  • برای آخرین تعداد X حرکت ، آیا یک حرکت عمومی یا خالص به جلو وجود دارد. چگونه می توان تعیین کرد که حرکت رو به جلو واقعی چیست؟ خوب.. یک مقایسه آسان این است که برای آخرین حرکت X ، "FORWARD" بیشتر از "REVERSE" اتفاق می افتد. اما لازم نیست تنها آن باشد. این چطور است: "راست ، راست ، چپ ، راست". در این حالت ، ربات مجبور است برای بیرون آمدن از گوشه به راست بپیچد یا به این دلیل که به زاویه ای به دیوار نزدیک شده است ، می تواند پیشرفت رو به جلو واقعی تلقی شود. از سوی دیگر ، "چپ ، راست ، چپ ، راست …" ممکن است پیشرفت واقعی واقعی تلقی نشود. بنابراین ، اگر "RIGHT" بیشتر از "LEFT" یا "LEFT" بیشتر از "RIGHT" اتفاق بیفتد ، این می تواند پیشرفت واقعی باشد.

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

مرحله 6: افکار نهایی ، مرحله بعدی…

امیدوارم این دستورالعمل ایده هایی ارائه دهد.

افزودن سنسورهای بیشتر مزایا و چالش هایی را به همراه دارد.

در مورد بالا ، همه سنسورهای آکوستیک به خوبی با هم کار کردند و با نرم افزار کاملاً مستقیم بود.

هنگامی که سنسورهای IR به ترکیب وارد شدند ، کمی چالش برانگیزتر شد. دلیل آن این است که برخی از زاویه دید آنها با حوزه های سنسورهای صوتی همپوشانی دارد. حسگرهای IR با تغییر شرایط نور محیط کمی حساس و غیرقابل پیش بینی به نظر می رسند ، در حالی که البته سنسورهای صوتی تحت تأثیر نور قرار نمی گیرند.

و بنابراین چالش این بود که اگر یک سنسور آکوستیک به ما می گوید هیچ مانعی وجود ندارد ، اما سنسور IR این است که چه کنیم.

در حال حاضر ، پس از آزمایش و خطا ، همه چیز در اولویت قرار گرفت:

  1. حس آمپر
  2. حسگر IR
  3. حس صوتی

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

تا کنون ، نیازی به انجام هیچگونه نرم افزاری چند رشته ای یا متوقف نشده است ، اگرچه من گاهی اوقات با از دست دادن کنترل بین Raspberry Pi و کنترل کننده موتور Roboclaw (از دست دادن ارتباطات سریال) مواجه می شوم.

این جایی است که معمولاً از مدار E-Stop استفاده می شود (دستورالعمل های قبلی را ببینید). با این حال ، از آنجا که من نمی خواهم (هنوز) مجبور شوم با تنظیم مجدد Roboclaw در طول توسعه روبرو شوم ، و ربات به این سرعت پیش نمی رود ، و من برای نظارت و خاموش کردن آن حاضر هستم ، من این کار را نکرده ام E-Stop را متصل کرد

در نهایت ، چند رشته به احتمال زیاد ضروری خواهد بود.

مراحل بعدی…

ممنون که تا اینجا پیش رفتید

من برخی از سنسورهای VL53L1X IR Laser ToF (زمان پرواز) را بدست آوردم ، بنابراین به احتمال زیاد این موضوع دستورالعمل بعدی ، همراه با سروو است.

توصیه شده: