Author Topic: Автономно возило  (Read 28313 times)

Offline Atanas

  • Експерт
  • ****
  • Posts: 729
  • Gender: Male
Автономно возило
« Opened on 27.05.2019, Monday, 15:58:28 »
Ме немаше подолго време на форумот за да поставувам "досадни" прашања, па тоа време го искористив да направам некој проект каде што ќе ги обединам моите интереси - електрониката и програмирањето.   ;D

Бидејќи се повеќе и повеќе во подем се автономните возила ( автономно автомобили, летала, подморници ... ), решив и јас да направам моја верзија на автономно возило. За да можам да ја реализирам оваа идеја, искористив мноштво на софтверски, но и хардверски алатки, како што се: камера, Raspberry Pi, мотори, драјвер за мотори итн. Целиот алгоритам на ова возило е напишан во програмскиот јазик C++, а искористена е и библиотеката за компјутерска визија OpenCV, како и TCP Wi-Fi комуникација сервер/клиент.

Возилото е направено од акрилна шасија врз која е наместена потребната електроника за возилото, сензорите. За движење на возилото се поставени два мотори кои може да се контролираат со PWM сигнал преку драјвер за контрола на мотори.

Контролата, односно движењето на самото возило се одвива преку компјутер. За добивање на локацијата на возилото, како и структурата на патеката по која се движи, искористена е камера која што стои на одредена висина над самото возило. Камерата има за цел да направи слика од самата патека и да ја испрати до компјутерот. На сликата која ќе се добие се поставени кругови на местата каде што има вртење, односно на раскрсниците. Библиотеката за обработка на слики OpenCV има за цел да ги детектира тие кругови се со цел потоа да создадеме матрица. Матрицата која ја добиваме е во размер 5х7 и во неа се запишани само темињата на детектираните (големи) кругови. Бидејќи, секој круг има свои координати (X,Y) точно можеме да го утврдиме растојание помеѓу сите кругови. Имајќи ги сите овие податоци, ги задаваме на алгоритмот Dijkstra кој што треба да ни го пресмета најкраткиот пат од зададена точка А до точка Б. Откако ќе го добиеме најкраткиот пат, односно темињата по кои треба да се движи возилото, можеме да направиме споредба на координатите од тие темиња за да одлучиме на каде треба да се движи возилото. Контролирањето на самото возило се врши со помош на комуникација сервер/клиент, каде што на серверот (компјутерот) се извршуваат сите потребни пресметки, додека самиот клиент (Raspberry Pi) ги извршува командите добиени од серверот. Целата комуникација сервер/клиент се одвива преку Wi-Fi мрежа.


Круговите кои се поставени на самата патека по која ќе се движи возилото, компјутерот ( OpenCV ) како што кажав има за цел да ги детектира тие кругови кои после детекцијата изгледаат вака:



Забележуваме дека на сликите се поставени 2 вида на кругови:
    - Големи кругови ( кои во матрицата се запишуваат како 1 и означуваат места каде што возилото треба да одлучи на каде ќе се движи )
    - Мали кругови ( кои во матрицата се запишуваат како 2 и означуваат некоја препрека, објект каде возилото не смее да се движи )

Сите темиња кои во матрицата се запишани како 1, алгоритмот Dijkstra ги добива како податок од кој што треба да го најде најкраткиот пат.

Алгоритмот Dijkstra се користи за пресметка на најкраткиот пат во даден граф помеѓу едно почетно теме (извор) и сите останати темиња во графот. На пример, ако зборуваме за патна инфраструктура, може да одбереме дека изворот е градот Скопје и алгоритмот Dijkstra ќе ни го пресмета најкраткиот пат (растојанието) од тој град до сите останати градови во државата. Единственото ограничување кое го има овој алгоритам е тоа што сите ребра мора да имаат тежина која не е негативен број.

Бидејќи, овој алгоритам го наоѓа најкраткиот пат според тежините на ребрата кои поврзуваат два извори, можеме да манипулираме со тие тежини се со цел доколку сакаме да го пренасочиме возилото во определени случаеви, како на пример доколку помеѓу два извори има зголемена фреквенција на сообраќај или патот е затворен итн. Возилото во овој случај ќе се движи по друг пат кој сепак ќе го однесе до неговата крајна дестинација.

Вака изгледа самото возило:



А, еве и едно кратко видео од работата на возилото:


Offline Mkdsime

  • Стручњак
  • ***
  • Posts: 158
Re: Автономно возило
« Reply #1 on 27.05.2019, Monday, 16:11:12 »
WOW Браво многу интересно и убаво објаснето, секоја чест ! :)

Offline Atanas

  • Експерт
  • ****
  • Posts: 729
  • Gender: Male
Re: Автономно возило
« Reply #2 on 27.05.2019, Monday, 20:44:03 »
@Mkdsime Ти благодарам  :D

Offline GigaWatt

  • Администратор
  • Топ Експерт
  • *****
  • Posts: 12894
  • Gender: Male
  • Не фалширам
Re: Автономно возило
« Reply #3 on 28.05.2019, Tuesday, 21:43:44 »
Одлично сработено, се гледа дека долго време имаш работено на проектчево ;).

Мал милион примени може да имаат ваквите автономни возила. Моментално, сметам дека е најпрактична и најизводлива (но повторно, со доработка) примена би му била во водење на хендикепирани лица (пред се мислам на слепи, но и ментално хендикепирани лица исто така :)) до нивната дестинација т.е. замена на кучињата ;). И пред се мислам на тоа да биде водилка на слепите, а не да се возат на вакво возило, бидејќи, да бидеме искрени, техниката и технологијата се на едно прилично високо ниво, но далеку од тоа дека не прават грешки... пред се поради грешки во дизајнот (бидејќи се направени од несовршени суштества - човекот ::)), а не дека самите тие грешат. Во над 99% од случаите се има покажано дека, кога машина ќе згреши, тоа е најчесто грешка во дизајнот, а не дека престанало да функционира дел од машината поради некоја необјаснива причина ::). За жал, не сме совршени, но затоа Македонија (каква, таква, наша си е :P :D) е одлично место за тестирање на несовршености ;D. Дупки на патот, несовесни возачи, несовесни пешаци, кучиња и мачки скитници, необележани работни активности... не можеш да речеш дека не е предизвик ;D. Така да, добро би било да не биде превозно средство, туку баш водилка, за во случај возилото ако не забележи некоја опасност, а хендикепираното лице ја забележи истата, да може да го пушти возилото и да скрене во друга насока на движење ;).

Во секој случај, мислам дека треба да го објавиш проектот на GitHub :). Стана „светилиште“ за open source светот, а освен тоа и заштитник на open source заедницата. Сега моментално е сопственост на Microsoft (::)), но колку што гледам, ја немаат сменето политиката нешто премногу, а освен тоа, врз база на некои нивни недамнешни потези, се гледа дека навистина сакаат да ја сменат онаа политика кои ја градеа години наназад, во однос на нивниот flagship производ, а и во однос на сите нивни производи :). Имено, неодамна, од MS објавија дека планираат во Win10 целосно да го заменат кернелот со Linux кернел, што барем според мене, е одлична вест :). Ова им беше една од последните објави со која се гледа дека сакаат смело да зачекорат во open source светот, но имаше и многу други кои и претходеа на оваа, така да, сеуште стојам зад тоа дека GitHub е светилиште на open source заедницата и дека, да, мислам дека проектов заслужува да биде објавен на GitHub :). На крајот, одлуката е твоја, се разбира ;).

Е сега, ништо не е толку добро да не може да биде и подобро, нели :D. Проектов има оргомно место за подобрување и огромен потенцијал, па мислам дека треба и понатаму да работиш на него :). Имено, може да го подобриш начинот на ротирање на возилото кога ќе стигне до контролна точка. На пример, да го направиш да ротира веднаш штом ќе ја стигне точката, а не да застанува, да застанува, да ротира и потоа да продолжува ;). Исто така, ако мислиш да биде целосно автономно, треба да има и камера и (барем за почеток), да го направиш камерата да анализира што има на патот и да следи определена траекторија. Има и open source библиотеки кои го прават ова ;). Сигурно има уште мал милион подобрувања кои може да се направат, како на пример, звучна сигнализација со говор за слепите (во стилот на „пазете, камен од вашата лева страна“ или „пазете, тротоар“, „пазете, пешачки премин“, итн.), следење на брзина на човекот кој оперира со возилото и прилагодување на истата (т.е., да не се движи возилото пребрзо, туку да ја прилагодува брзината врз база на брзината на движење на човекот), додавање на повеќе камери за да може возилото да има анализа на надворешноста од повеќе различни агли (корисно при преминување на раскрсници), додавање на микрофон и софтвер за анализа на звуци (свирка, бучење на мотори), итн. Да не редам, сигурно има премногу :).
"This is really a generic concept about human thinking - when faced with large tasks we're naturally inclined to try to break them down into a bunch of smaller tasks that together make up the whole."

"Newton's third law: The only way humans have ever figured out of getting somewhere is to leave something behind."

Offline Atanas

  • Експерт
  • ****
  • Posts: 729
  • Gender: Male
Re: Автономно возило
« Reply #4 on 30.05.2019, Thursday, 15:42:43 »
Да, на проектот работев некои 8 месеци. Најпрво започнав да го правам возилото од LEGO Mindstorms коцки, тоа се коцки со кои се изработуваат конструкции какви што сакаме, а исто така се додаваат и различни сензори, мотори итн. и сето тоа се управува од контролер кој што се програмира. Но, не ми беше интересно возилото да биде направено од готов комплет на делови, па почнав да порачувам делови од интернет какви што ми требаат за возилото да го направам самостојно ( затоа има голем дел несовршености  :P ).

Несомнено е дека има можност за доработување на проектот, всушност тој сеуште е во развој. Имам неколку нови идеи кој што сакам да ги имплементирам, како софтверски така и хардверски. Како на пример, сега сликата се зема од камера и на неа е патеката со поставени кругови и таа е непроменлива се додека не вчитаме друга слика во програмата / кодот. Ова не е толку прецизно, бидејќи кодот не се изршува баш целосно во real-time ( реално време ). За тоа да се избегне, може да се постави камера над патеката која ќе снима целовреме. Односно таа ќе ги бележи промените на самото возило непрекинато, така што ќе знаеме точно каде се наоѓа и како следно да постапува. Ова е веќе и вештачка интелигенција  :P.

Најголема пречка на ова возило во оваа состојба е непрецизноста на моторите. Односно, користам обични DC мотори на кои што можам да му ја контролирам само брзината и кога да работат, а кога не ( ON / OFF ), а немам повратна врска од нив за нивната позиција како и за патот кој е изминат. Затоа, морам растојанието да го определувам според тоа колкаво време е потребно за возилото да направи 1 ротација. Е, сега бидејќи еден голем ум рекол "времето е релативно", често се случува следниот пат кога ќе го пуштам возилото да работи времето да не се поклопува, па мора додатно да се нагодува. А, за тоа што не оди право да не зборувам... :(

Што се однесува до твојата идеја за примена кај хендикепирани лица, се сложувам целосно. Ова е технологија која наоѓа примена речиси секаде каде што има тркала, буквално.  ;D

И еве нешто интересно, доколку сака некој да го види возилото во живо, утре ( 31.05.2019 ) ќе учествувам на Skopje Mini Maker Faire кој ќе биде одржан на паркингот кај арената Борис Трајковски во Скопје. Од 10:00 до 19:00 часот. Влезот е бесплатен. Повеќе информации за ова саемче има на следниот линк:
Code: [Select]
https://www.facebook.com/events/1045688662295720/
П.С Гига, види ја последната порака која ти ја испратив  ;).

Offline GigaWatt

  • Администратор
  • Топ Експерт
  • *****
  • Posts: 12894
  • Gender: Male
  • Не фалширам
Re: Автономно возило
« Reply #5 on 31.05.2019, Friday, 22:32:54 »
Како на пример, сега сликата се зема од камера и на неа е патеката со поставени кругови и таа е непроменлива се додека не вчитаме друга слика во програмата / кодот. Ова не е толку прецизно, бидејќи кодот не се изршува баш целосно во real-time ( реално време ). За тоа да се избегне, може да се постави камера над патеката која ќе снима целовреме. Односно таа ќе ги бележи промените на самото возило непрекинато, така што ќе знаеме точно каде се наоѓа и како следно да постапува.

Ова ти е веќе добра идеја ;).

Но, мислам дека треба да земеш некоја минијатурна камера, бидејќи, дури и кај ваква изведба, пак на крајот камерата мора да го снима патот по кој ќе се движи возилото. Треба да биде по автономно, да не мора камера да лебди над него за да може да се движи по определена тракторија. Предложив камерата да е мала за да може потоа да ја искористиш за да ја монтираш на возилото и со помош на координација од GPS, да може автономно да се движи и да анализира слика и препреки на патот ;). Ова е веќе далеку покомплицирано, но идејата е да биде навистина автономно, нели ;).

Најголема пречка на ова возило во оваа состојба е непрецизноста на моторите. Односно, користам обични DC мотори на кои што можам да му ја контролирам само брзината и кога да работат, а кога не ( ON / OFF ), а немам повратна врска од нив за нивната позиција како и за патот кој е изминат. Затоа, морам растојанието да го определувам според тоа колкаво време е потребно за возилото да направи 1 ротација. Е, сега бидејќи еден голем ум рекол "времето е релативно", често се случува следниот пат кога ќе го пуштам возилото да работи времето да не се поклопува, па мора додатно да се нагодува. А, за тоа што не оди право да не зборувам... :(

Ова ќе мора да се корегира во иднина и да користиш степ мотори. Далеку попрецизни се ;). Пожелно е бројот на полови да е што е можно поголем, но се разбира дека треба да се направи некој разумен компромис меѓу цена и број на полови ;).

Тоа што не оди право ќе се корегира со степ моторите ;). Не ни треба да оди премногу право, сепак, ниедно живо суштество не може да се движи совршено право, па ни луѓето ;). Само ќе треба, исто како и сега, навремено да врши корекции на траекторијата, толку ;).

Што се однесува до твојата идеја за примена кај хендикепирани лица, се сложувам целосно. Ова е технологија која наоѓа примена речиси секаде каде што има тркала, буквално.  ;D

Мислам дека најголем бенефит ќе имаат тие од нешто вакво, затоа и спомнав ;). Сепак, далеку од инклудирани се во секојдневието, а голем дел од нив немаа никаков ментален хендикеп, само физички (како на пример слепите лица), и вакво роботче „водилка“, може многу да им помогне во секојдневието, како и за забавен ноќен живот (сигурно ќе бидат многу интересни и популарни по забавите :D).

И еве нешто интересно, доколку сака некој да го види возилото во живо, утре ( 31.05.2019 ) ќе учествувам на Skopje Mini Maker Faire кој ќе биде одржан на паркингот кај арената Борис Трајковски во Скопје. Од 10:00 до 19:00 часот. Влезот е бесплатен. Повеќе информации за ова саемче има на следниот линк:
Code: [Select]
https://www.facebook.com/events/1045688662295720/

Гледав прилог на вести, ама не го видов твоето роботче :P :D. Имаше посетители? Се заинтересира некој за твојот дизајн?
"This is really a generic concept about human thinking - when faced with large tasks we're naturally inclined to try to break them down into a bunch of smaller tasks that together make up the whole."

"Newton's third law: The only way humans have ever figured out of getting somewhere is to leave something behind."

Offline Atanas

  • Експерт
  • ****
  • Posts: 729
  • Gender: Male
Re: Автономно возило
« Reply #6 on 01.06.2019, Saturday, 10:57:18 »
@GigaWatt Фала за сугестиите и секако дека ќе продолжам да ја усовршувам оваа идеја, па ќе видиме до каде ќе стигне.  :D

Да, имаше доста посетители на кои му беше интересно ова роботче и се ми рекоа да продолжам да работам на него, па дури да размислам како може тоа да се примени во големи фабрики каде се пренесува роба од едно на друго место. Нешто вакво слично користеле во Aliexpress за да ги распределат пратките откако ќе бидат порачани, тоа ми го кажаа луѓе кои ме посетија на мојот штанд.  :)

Offline dr-mr

  • Експерт
  • ****
  • Posts: 778
  • Gender: Male
Re: Автономно возило
« Reply #7 on 01.06.2019, Saturday, 11:46:31 »
 Во многу фабрики се користат роботи кои следат линија или слични, за расзнесување на алат или  делови за работа.
Сепак се ВРТИ !!!

Offline GigaWatt

  • Администратор
  • Топ Експерт
  • *****
  • Posts: 12894
  • Gender: Male
  • Не фалширам
Re: Автономно возило
« Reply #8 on 01.06.2019, Saturday, 18:23:48 »
@Atanas: Е да, како што е сега дизајнот, скоро директно може да се примени за пренесување на роба во фабрики или магацини од едно на друго место ;).
"This is really a generic concept about human thinking - when faced with large tasks we're naturally inclined to try to break them down into a bunch of smaller tasks that together make up the whole."

"Newton's third law: The only way humans have ever figured out of getting somewhere is to leave something behind."