فهرست مطالب:

خودروی خودران: 7 مرحله (همراه با تصاویر)
خودروی خودران: 7 مرحله (همراه با تصاویر)

تصویری: خودروی خودران: 7 مرحله (همراه با تصاویر)

تصویری: خودروی خودران: 7 مرحله (همراه با تصاویر)
تصویری: راننده پژوپارس elx حرکت خطرناک زد 😑#shorts #شوتی 2024, نوامبر
Anonim
خودروی خودران
خودروی خودران
خودروی خودران
خودروی خودران

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

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

مرحله 1: مونتاژ خودرو

مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو
مونتاژ خودرو

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

موتور انتخاب شده یک موتور 12V DC Port Escap با رمزگذارهای داخلی بود. این موتور را می توان در ebay با قیمت بسیار مناسب خریداری کرد (به بیل مواد مراجعه کنید). کلمات کلیدی "12V Escap 16 Coreless Geared DC Motor with Encoders" را در ebay برای یافتن موتور جستجو کنید. معمولا تعداد قابل توجهی فروشنده برای انتخاب وجود دارد. مشخصات و پین های موتورها در نمودارهای زیر نشان داده شده است.

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

پیشنهاد می شود که شاسی به صورت 2Dprofile طراحی شود تا بتوان آن را به راحتی تولید کرد. ما با استفاده از برش جت آب یک ورق آلومینیوم 12 اینچی X12 اینچی را به شکل شاسی برش دادیم. سکوی شاسی را نیز می توان با اره نواری برش داد.

مرحله 2: نصب موتورها

نصب موتورها
نصب موتورها
نصب موتورها
نصب موتورها

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

سوراخ های M2 موتور و صورت دیگر را می توان به سکوی پیچ بست. سوراخ ها باید در پایه موتور حفر شوند تا بتوان از پیچ ها برای بستن موتور بر روی پایه موتور و اتصال موتور بر روی سکو استفاده کرد. پایه موتور را می توانید در شکل بالا مشاهده کنید.

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

مرحله 3: ایجاد طرح بلوک Vivado

ایجاد طرح بلوک Vivado
ایجاد طرح بلوک Vivado
ایجاد طرح بلوک Vivado
ایجاد طرح بلوک Vivado

- با ایجاد یک پروژه جدید Vivado شروع کنید و Zybo Zynq 7000 Z010 را به عنوان دستگاه هدف انتخاب کنید.

- سپس روی ایجاد طرح بلوک جدید کلیک کنید و IP Zynq را اضافه کنید. روی IP Zynq دوبار کلیک کنید و تنظیمات ارائه شده XPS را برای Zynq وارد کنید. سپس UART0 را با MIO 10..11 در برگه تنظیمات MIO فعال کنید و همچنین مطمئن شوید که تایمر 0 و تایمر Watchdog فعال هستند.

- دو AXI GPIOS به طرح بلوک اضافه کنید. برای GPIO 0 کانال دوگانه را فعال کنید و هر دو را روی همه خروجی ها تنظیم کنید. عرض GPIO را برای کانال 1 تا 4 بیت و برای کانال 2 تا 12 بیت تنظیم کنید ، از این کانال ها برای تنظیم جهت موتور و ارسال مقدار تیک اقدامات اندازه گیری کننده به پردازنده استفاده می شود. برای GPIO 1 فقط یک کانال را روی همه ورودی ها با عرض کانال 4 بیت تنظیم کنید. این برای دریافت داده ها از رمزگذارها استفاده می شود. همه درگاه های GPIO را خارجی کنید.

- بعد دو تایمر AXI اضافه کنید. پورت های pwm0 هر دو تایمر را خارجی کنید. اینها pwms هستند که سرعت چرخش موتورها را کنترل می کنند.

- در نهایت اتوماسیون بلوک و اتوماسیون اتصال را اجرا کنید. تأیید کنید که طرح بلوک شما با طرح ارائه شده مطابقت دارد.

مرحله 4: ارتباط با LiDAR

این LiDAR از پروتکل SCIP 2.0 برای برقراری ارتباط از طریق UART استفاده می کند ، فایل پیوست کل پروتکل را شرح می دهد.

برای ارتباط با LiDAR از UART0 استفاده می کنیم. LiDAR 682 نقطه داده را باز می گرداند که هریک نمایانگر فاصله تا جسم در آن زاویه است. LiDAR در جهت عقربه های ساعت از -30 درجه تا 210 درجه با یک گام 0.351 درجه اسکن می کند.

- تمام ارتباطات با LiDAR با کاراکترهای ASCI انجام می شود ، برای قالب مورد استفاده به پروتکل SCIP مراجعه کنید. ما با ارسال فرمان QT برای روشن کردن LiDAR شروع می کنیم. سپس فرمان GS را چندین بار با درخواست 18 نقطه داده به صورت همزمان به ft در UARTS 64 byte FIFO ارسال می کنیم. سپس داده های برگشتی از LiDAR تجزیه و در آرایه جهانی SCANdata ذخیره می شود.

- هر نقطه داده ذخیره شده 2 بایت داده رمزگذاری شده است. با ارسال این داده ها به رمزگشا ، فاصله ای بر حسب میلی متر برمی گردد.

در فایل main_av.c توابع زیر را برای ارتباط با LiDAR خواهید یافت

sendLIDARcmd (فرمان)

- با این کار رشته ورودی از طریق UART0 به LiDAR ارسال می شود

recvLIDAR داده ()

- این داده ها را پس از ارسال یک فرمان به LiDAR دریافت کرده و داده ها را در RECBuffer ذخیره می کند

requestDistanceData ()

- این عملکرد یک سری دستورات را برای بازیابی همه 682 نقطه داده ارسال می کند. پس از دریافت هر مجموعه از 18 نقطه داده ، parseLIDARinput () برای تجزیه داده ها و ذخیره تدریجی نقاط داده در SCANdata فراخوانی می شود.

مرحله 5: پر کردن شبکه با موانع

پر کردن شبکه با موانع
پر کردن شبکه با موانع
پر کردن شبکه با موانع
پر کردن شبکه با موانع

GRID ذخیره شده یک آرایه دو بعدی است که هر مقدار شاخص نشان دهنده یک مکان است. داده های ذخیره شده در هر شاخص به ترتیب 0 یا 1 است ، بدون مانع و مانع. فاصله مربع بر حسب میلی متر که هر نمایه نشان می دهد را می توان با تعریف GRID_SCALE در فایل autom.h تغییر داد. اندازه آرایه دو بعدی نیز می تواند متفاوت باشد تا به وسیله آن بتوان تعریف بزرگتر GRID_SIZE را در محدوده وسیع تری اسکن کرد.

پس از اسکن مجموعه جدیدی از داده های فاصله از LiDAR ، updateGrid () فراخوانی می شود. این امر از طریق هر نقطه داده ذخیره شده در آرایه SCANdata تکرار می شود تا مشخص شود که کدام شاخص ها در شبکه دارای موانع هستند. با استفاده از جهت فعلی وسیله نقلیه می توان زاویه مربوط به هر نقطه داده را تعیین کرد. برای تعیین محل مانع ، کافی است فاصله مربوطه را در cos/sin زاویه ضرب کنید. افزودن این دو مقدار به موقعیت فعلی x و y خودروها ، شاخص را در شبکه مانع باز می گرداند. تقسیم فاصله برگشت داده شده توسط این عملیات توسط GRID_SCALE به ما این امکان را می دهد که چقدر فاصله مربع هر شاخص را تغییر دهیم.

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

مرحله ششم: برقراری ارتباط با موتورها

برای برقراری ارتباط با موتورها ، ما با راه اندازی GPIO ها جهت کنترل شروع حرکت موتور به داخل را شروع می کنیم. سپس نوشتن مستقیم به آدرس پایه PWM ها در تایمر AXI به ما امکان می دهد مواردی مانند دوره و چرخه وظیفه را تنظیم کنیم که به طور مستقیم کنترل می کند. سرعت چرخش موتور در

مرحله 7: برنامه ریزی مسیر

در آینده نزدیک اجرایی شود.

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

توصیه شده: