Автор Тема: "Марсоход" с векторно управление.  (Прочетена 16462 пъти)

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
"Марсоход" с векторно управление.
« -: Юни 22, 2012, 02:33:18 pm »
Привет на всички,

Искам да ви покажа едно от нещата, които завърших миналия семестър, но чак сега имам време да го постна. Става въпрос за "марсоход" с векторно управление, по който работих с още две момчета - едното от тях е Alternative от фурма. Векторно завиване означава, че може от спряло положение да тръгне в произволна посока, т.е. може да се движи настрани по диагонал и т.н. Роботът притежева още два режима на маневриране. Първият е стандартно акерман завиване, където предните гуми завиват в една посока и заднате в противоположна. При втория режим левите и десните гуми се завъртат огледално така, че роботът да може да се ротира около оста си.

Роботът е изграден от LEGO - използва 8 DC мотора, 4 ротационни енкодера за ориентацията на всяка гума, както и 2 RCX-а, които се командват през инфрачервена кула, управлявана от малък ноутбук върху робота. Контролът на робота се осъществява, чрез джойстик свързан към отделен лаптоп, който праща информация към малкия ноутбук върху робота чрез WiFi. Комуникацията се осъществява чрез Robot Operating System (ROS), а софтуера върху двата RCX-а (стандартен микроконтролерен модул на ЛЕГО) използва BrickOS. Цялото е писано от нулата на С++.

Ето и видео:

LEGO Rover using ROS

С удоволствие отговарям на всякакви въпроси, а също така, който има желание мога да споделя и код, но едвали ще е много от полза.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

tommyboy

  • Направо Робот! :)
  • *****
  • Публикации: 416
    • Профил
"Марсоход" с векторно управление.
« Отговор #1 -: Юни 22, 2012, 03:18:03 pm »
Супер е братле, поздравление за постиженията  :-D  ;) . Днес на масата, утре на Марс  :-D .

nunep

  • Вече знае какво е робот!
  • *****
  • Публикации: 76
    • Профил
"Марсоход" с векторно управление.
« Отговор #2 -: Юни 22, 2012, 08:48:36 pm »
Страхотно е  :clap: По конструкция и начин на движение прилича на една комбайна за бране на грозде (бяха я давали по Discovery). И умирам то любопитство защо точно "Марсоход" :)))))

bateAz

  • Зомбиран Роботостроител
  • *****
  • Публикации: 187
    • Профил
"Марсоход" с векторно управление.
« Отговор #3 -: Юни 22, 2012, 10:05:56 pm »
Интересно ми е как точно е реализирано. От главния мозък до джойстика е ясно.  След това е интересното. Къде се прави обработката на постъпващите команди ? Къде се обработва изпълнението им ? За какво служи лаптопът ( през зимата е ясно - топли ти ххх когато ти е в скута )
А бе с две думи - интересно ми е как си разпределил обработката. Какви среди и езици си ползвал ?
Не може да не може

Венцислав Караджов, 61 год.

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
"Марсоход" с векторно управление.
« Отговор #4 -: Юни 23, 2012, 11:37:07 am »
Историята, че е "Марсоход" е дост дълга, но накратко в програмата на всички второкурсни в моята специалност влиза едно отборно състезание. То протича по предтекст, че се изследва друга планета и трябва да се снемат данни - карта на района, температура, сезимична дейност, записване и разкодиране на звукови съобщения и т.н. Отборът, който се справи най-добре е победител и получава разни награди от Microchip. Миналата година аз бях победител и реших тази година като третокурсник да участвам отново, но само за слава :Р Тъй като съм член на LEGO клуба в университета реших да е LEGO робот.

Та сега по същество - софутера го сглобих за 20на часа, така че сигурно има много концептуални недоглеждания, но ни трябваше нещо бързо и работещо. В основата на софтуера на робота седи Robot Operating System. Това е дистрибутирана псевдо-операционна система позволяваща управлението и комуникацията между много процеси върху множество компютри. Защо псевдо - защото върви върху линукс и управлява линукски процеси.

Имайки предвид архитектурата на ROS, ето как е организиран и софта за робота. Първо има един възел, който чете джойстика и публикува съобщения с позицията и натиснатите копчета. Идеята на възела е, че публикувайки информацията други n на брой възела (процеса), работещи на различни машини, имат достъп до нея. Освен това възелът идва с ROS и всичко се свежда само да пускането му с един ред в терминала, не губихме време да четем сами джойстика. Възелът е основната функционална единица на ROS - аналогично на процес при конвенционалните операционни системи.

Защо малкия лаптоп - защото искахме да стане бързо. Беше най-лесно да имаме машина с ROS на робота (то така се прави принципно с истинските и скъпите роботи управлявани от ROS). Освен това лаптопа има WiFi и камера - 1 куршум, много зайци :) Написах втори възел (езикът е С++), който върви върху лаптопа на робота, слуша за съобщения от джойстика, обработва информацията и пресмята ориентацията и скоростта на колелата. След като пресметне тези параметри ги праща към два стандартни LEGO микроконтролерни модула - RCX, чрез инфраред. RCX модулите управляват колелата и следят ротационните енкодери. За съжаление разполагаме със старите LEGO модули, с които може да се комуникара единствено чрез инфраред. Инфраред трансмитера е стандартна LEGO инфрачервена "кула" - на видето можете да я видите зад екрана на малкия лаптоп върху робота. Успях да намеря библиотека, която да управлява "кулата" кодирайки съобщението с информацията, така че двата RCX-a да го разберат.
Та работата на лаптопа се свежда до търкаляне на ROS възел, който слуша информация от джойстика, пресмята ориентацията и скоростта на колелата и изпраща тези параметри чрез инфраред до двата RCX-a. Както казах, възела го написах на C++, а средата gedit + gxx :) Просто още не съм седнал да видя как се правят ROS възли с Еclipse.

Двата RCX-а принципно имат стандартен LEGO фърмуер, който обаче е малко ограничен от към комуникация по инфраред - не поддържа адресиране, а тъй като имаме 2 RCX-a това е необходимо. Затова ги префлашнахме с къстъм фърмуер наречен BrickOS. Този BrickOS позволява да си пишеш С код, като използваш техните библиотеки, после само крос компайлваш с gcc за Hitachi H8/300 - това е микроконтролера в RCX-a. Библиотеките на BrickOS позволяват да контролираш скоростта на всеки мотор, да четеш ротационните енкодери и т.н., така че кода за самите RCX-ове е сравнително елементарен също.

Ето обобщение как преминава информацията:

Джойстик => Стационарен Лаптоп => ROS Възел - Джойстик  => WiFi => ROS Възел - Мобилен Робот => Мобилен Лаптоп => Кинематичен Модел => Ифраред трансмитер => ляв и десен RCX => скорост и ориентация на четирите колела

Знам, че е малко пресилено и същото нещо може да се реализира много по-ефективно, но това не е комерсиален проект, трябваше да стане бързо, а и все пак нещо да понауча :) Най-готиното на това решение, според мен, е че ако имаме още един идентичен робот, просто пускаме захранването му и той ще прави абсолютно същото - тоест това решение позволява управлението на множество роботи (друг е въпросът дали има смисъл да управляваш множество роботи да изпълняват еднакви движения).
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

westony

  • Заклет Роботостроител
  • *****
  • Публикации: 237
    • Профил
    • http://westony.blogspot.com
"Марсоход" с векторно управление.
« Отговор #5 -: Юли 16, 2012, 08:32:47 am »
Можеш ли да дадеш малко повече информация за векторното управление?


Моите поздравления :-)
Технически Университет - София , ФА, III курс.
Мартин, 21 години
   Ако е лесно няма да е интересно!

Един не по-различен блог
Google+