Jeffrey Cross
Jeffrey Cross

Програм са роботским оперативним системом за глатки серво покрет

Роботски оперативни систем (РОС) је роботска платформа отвореног кода која помаже вашем роботу да визуализује свет, мапира га и навигира, и изводи физичке интеракције користећи најсавременије алгоритме. Ако желите да направите сложен робот, вероватно постоји неки РОС код који је већ доступан да вам помогне. Можете користити онолико мало РОС-а колико желите, и он се инсталира на машине са нивоа Распберри Пи на горе.

Читајте чланке из часописа овде Направити:. Још немате претплату? Узми данас.

Размотримо како контролисати серво као увод у РОС. Једна од мана сервомотора је што ће они често трчати што брже могу да поштују вашу наредбу. Ово може довести до пада вашег робота јер је изненада почело да се окреће највећом брзином. Када добијемо РОС да контролише серво, можемо додати контролу сличну синусоидном како би ваш робот био стабилан. То можете урадити у РОС-у без промене контролног кода или кода који излаже серво РОС-у или самом серво хардверу. И лако можете поново користити код за друге пројекте у будућности!

РОС има веома добру подршку за инсталацију на Убунту или Дебиан, тако да нећете морати да се компајлирате да бисте започели. Ова конструкција користи Линук машину која покреће Убунту, хоби серво, Ардуино и неколико битова заједничких каблова као што су жице за спајање. РОС ће бити покренут на Убунту машини и његове поруке ће бити послане преко УСБ-а на Ардуино. Када инсталирате бинарне РОС пакете, нека Ардуино окружење зна за РОС библиотеке уносећи следеће команде у конзолни програм (као што је гноме-терминал или консоле): цд ~ / скетцхбоок / либрариес рм -рф рос_либ росрун россериал_ардуино маке_л ибрариес.пи.

Програмирајте Ардуино

Пхото би Хеп Свадја

Сада можемо да пренесемо скицу на Ардуино да извршимо серво контролу ниског нивоа и контролишемо је са Линук машине. Ово ће померити серво на локацију одређену као проценат (0.0 до 1.0) пуног покрета који желимо да дозволимо. Коришћењем процента уместо експлицитног угла Ардуино код ограничава тачан угао који се може подесити, да би се изричито избегли углови за које знате да ће изазвати судар.

Као што можете видети, нормалне функције подешавања и петље постају прилично ретке када се користи РОС. Функција петље може бити иста за било који Ардуино код који се само претплаћује на податке. У подешавању морате да покренете РОС и онда позовете претплату за сваког претплатника РОС поруке коју имате. Сваки претплатник заузима РАМ на вашем Ардуину, тако да можете имати само њих 6-12 у зависности од тога шта друго треба да урадите.

#инцлуде #инцлуде #инцлуде #инцлуде #дефине СЕРВОПИН 3 Серво серво; воид серво_цб (цонст стд_мсгс :: Флоат32 & мсг) {цонст флоат мин = 45; цонст флоат ранге = 90; флоат в = мсг.дата; ако (в> 1) в = 1; иф (в <0) в = 0; угао пловка = мин + (опсег * в); серво.врите (угао); } рос :: Субсцрибер суб (“/ хеад / тилт”, серво_цб); рос :: НодеХандле нх; воид сетуп () {серво.аттацх (СЕРВОПИН); нх.инитНоде (); нх.субсцрибе (суб); } воид лооп () {нх.спинОнце (); кашњење (1); }

Сада морате бити у могућности да разговарате са Ардуином из РОС свијета. Најједноставнији начин да то урадите је датотека за покретање робота. Док је доњи фајл веома једноставан, они могу да укључе и друге датотеке за покретање тако да на крају можете покренути веома сложен робот са једном командом.

$ цат россерво.лаунцх $ рослаунцх ./россерво.ланцх

Наредба ростопиц вам омогућава да видите где можете слати РОС поруке на вашем роботу. Као што можете видети испод / глава / нагиб је доступан у Ардуину. Порука се може послати користећи ростопиц пуб, опција -1 значи само објавити поруку једном и желимо разговарати / глава / нагиб слање једног броја с помичним зарезом.

$ ростопиц листа / дијагностика / хеад / тилт / росоут / росоут_агг $ ростопиц пуб -1 / хеад / тилт стд_мсгс / Флоат32 0.4 $ ростопиц пуб -1 / хеад / тилт стд_мсгс / Флоат32 0.9

У овој фази, све што зна како да објави број у РОС-у може се користити за контролу серво уређаја. Ако се померимо од 0 до 1, серво ће радити пуном брзином, што је само по себи добро, али можда бисмо желели да мотор убрза до пуне брзине и онда успорите када се приближи одредишној позицији. Мање изненадна кретања, мање кретање робота, мање изненађење за људе у том подручју.

Глатко са другим чвором

У наставку Питхон скрипта слуша поруке / глава / нагиб / глатка и објављује многе поруке / глава / нагиб да померате серво са спорим подизањем и рампом према доле када се приближавате жељеној позицији. Тхе мовеСерво_цб се позива кад год стигне порука / глава / нагиб / глатка. Повратни позив затим генерише број за сваких 10 степени од -90 до +90 у низове углова. Тхе син () се узима за оне углове који дају вриједности које се крећу полако од -1 до +1. Додавање 1 на то чини распон од 0 до +2, тако да подела са 2 чини наш низ рампом од 0 до +1. То је онда питање хода кроз поље м и сваки пут објављујући поруку, померајући се мало даље кроз опсег р сваки пут, завршавајући на 1 * р или пуном опсегу.

#! / уср / бин / енв питхон из временског увоза спавање импорт нумпи као нп импорт роспи из стд_мсгс.мсг импорт Флоат32 цуррентПоситион = 0.5 пуб = Нема деф мовеСерво_цб (дата): глобална цуррентПоситион, пуб таргетПоситион = дата.дата р = таргетПоситион = дата.дата р = таргетПоситион = дата.дата цуррен Позицијски кутови = нп.арраи ((опсег (1 90)) [0: 10]) - 90 м = (нп.син (углови * нп.пи / 180.) + 1) / 2 за ми у нп. ндитер (м): пос = цуррентПоситион + ми * р принт “пос:“, пос пуб.публисх (пос) слееп (0.05) цуррентПоситион = таргетПоси тион принт “пос-е:“, цуррентПос итион пуб.публисх (цуррентПоситион) деф листенер (): глобал пуб роспи.инит_ноде ('сервоенцод ер', анонимоус = Труе) роспи.Субсцрибер ('/ глава / тил т / глатко', Флоат32, мовеСер во_цб) пуб = роспи.Публисхер ('/ х еад / тилт ', Флоат32, куеуе_ сизе = 10) роспи.спин () ако је __наме__ ==' __маин__ ': листенер ()

Да бисте тестирали глатко серво покретање, покрените Питхон скрипт и објавите поруке / глава / нагиб / глатка и требало би да видите глатко кретање.

$ ./сервоенцодер.пи $ ростопиц пуб -1 / хеад / тилт / смоотх стд_мсгс / Флоат32 1 $ ростопиц пуб -1 / хеад / тилт / смоотх стд_мсгс / Флоат32 0

Можете и да измените име ствари у РОС-у. На овај начин можете пресликати / глава / нагиб / глатка бити / глава / нагиб и програм који командује серво-у неће ни знати да се користи синусоидно кретање.

Иде даље

Овде сам фокусиран на једноставну серво контролу, али РОС има подршку за много више. Ако желите да знате шта блокира ваш робот од кретања, већ постоји подршка за коришћење Кинецт-а у РОС-у. Чак и ако навигациони стог користи те податке за мапирање, такође можете нахранити мали Питхон скрипт који помера серво да прати најближи објекат роботу. Да, очи те заиста прате.

Два моја РОС пројекта су Терри и Хоундбот. Терри је затворени робот са два Кинецта, један који се користи искључиво за навигацију, а други за мапирање дубине као што сматрам да је прикладно. Са својих шест Ардуиноса, Терри се може контролисати преко веб интерфејса или директно преко ПС3 даљинског управљача.

Дизајнирао сам Хоундбота за употребу на отвореном. Има РЦ даљински управљач, ГПС, компас и РОС контролисане уши. Радим на томе да се користи навигациона камера за ПС4. Не може да користи Кинецт зато што сунце то спречава да ради. Пошто је ловачки пас око 20 кг недавно сам унапредио суспензију, наводећи да правим делове од легуре по мери.

Ресурси за роботске оперативне системе

Инсталација на Убунту Делве у свет навигације са РОС-ом РОС К&А Узмите једну од многих књига о РОС-у. Покрените НАСА-ГМ Робонаут2 у симулатору. РОС је тамо горе!

Удео

Оставите Коментар