Съдържание:
- Стъпка 1: Как работи
- Стъпка 2: Компоненти
- Стъпка 3: Окабеляване на модулите
- Стъпка 4: Код
- Стъпка 5: База данни и уеб страница
- Стъпка 6: Тестове за навигация
- Стъпка 7: Крайна
Видео: ☠WEEDINATOR☠ Част 2: Сателитна навигация: 7 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Роди се навигационната система Weedinator!
Ровизиращ селскостопански робот, който може да се управлява от смарт телефон.
… И вместо просто да мина през редовния процес на това как е съставен, реших да опитам да обясня как всъщност работи - очевидно не ВСИЧКО, а най -важните и интересни части. Моля, извинете играта на думи, но това е начинът, по който данните протичат между отделните модули, които намирам за интересни и разбити на най -ниския знаменател, в крайна сметка получаваме действителни "битове" - нули и единици. Ако някога сте били объркани относно битове, байтове, знаци и низове, може би сега е моментът да се объркате? Също така ще се опитам да разбъркам леко абстрактна концепция, наречена „Отмяна на грешки“.
Самата система разполага с:
- GPS/GNSS: Ublox C94 M8M (Rover и база)
- 9DOF Razor IMU MO цифров компас
- Fona 800H 2G GPRS клетъчен
- 2.2 "TFT екран
- Arduino Due "Master"
- Различни „роби“на Arduino.
Странно, много сателитни кораби нямат цифров компас, което означава, че ако сте неподвижни и се загубите, трябва да ходите или да шофирате в произволна посока, преди устройството да може да ви покаже правилната посока от спътниците. Ако се изгубите в гъста джунгла или подземен паркинг, сте пълнени!
Стъпка 1: Как работи
Понастоящем се качва обикновена двойка координати от смарт телефон или компютър, които след това се изтеглят от Weedinator. След това те се интерпретират в заглавие в градуси и разстояние за изминаване в мм.
GPRS фонът се използва за достъп до онлайн база данни чрез 2G клетъчна мрежа и за получаване и предаване на координатите към Arduino Due чрез Arduino Nano. Due е Master и контролира масив от други Arduinos като Slaves чрез I2C и серийни шини. Due може да взаимодейства с живи данни от Ublox и Razor и да показва заглавие, изчислено от един от неговите подчинени Arduino.
Сателитният тракер Ublox е особено умен, тъй като използва анулиране на грешки, за да получи много точни корекции - крайно номинално общо отклонение от около 40 мм. Модулът се състои от една и съща двойка, едната от които, „роувърът“, се движи с Weedinator, а другата, „основата“е фиксирана на стълб някъде навън. Отмяната на грешка се постига, като базата може да постигне наистина точно коригиране, като използва голямо количество проби с течение на времето. След това тези проби се осредняват, за да компенсират променящите се атмосферни условия. Ако устройството се движеше, то очевидно нямаше да може да получи някакво усредняване и би било в пълна милост на променящата се среда. Ако обаче статично и движещо се устройство работят заедно, стига да могат да комуникират помежду си, те могат да извлекат ползата и от двете. Във всеки даден момент базовата единица все още има грешка, но също така има предварително изчислена супер точна корекция, за да може да изчисли действителната грешка, като извади един набор от координати от друг. След това той изпраща изчислената грешка на ровъра по радиовръзка, която след това добавя грешката към собствените си координати и хей престо, имаме грешка при анулиране! На практика отмяната на грешки прави разликата между 3 метра и 40 мм общо отклонение.
Цялостната система изглежда сложна, но всъщност е сравнително лесна за изграждане, или хлабава върху непроводима повърхност, или използвайки проектираната от мен печатна платка, което позволява всички модули да бъдат здраво закрепени. Бъдещото развитие е изградено върху печатната платка, което позволява да се включи огромен набор от Arduinos за управление на двигатели за управление, движение напред и бордова CNC машина. Навигацията също ще бъде подпомогната от поне една система за разпознаване на обекти, използваща камери за усещане на цветни обекти, например флуоресцентни топки за голф, които са внимателно позиционирани в някаква мрежа - Гледайте това пространство!
Стъпка 2: Компоненти
- Ublox C94 M8M (Rover и база) x 2 of
- 9DOF Razor IMU MO цифров компас
- Fona 800H 2G GPRS клетъчен 1946
- Arduino Due
- Arduino Nano x 2 от
- SparkFun Pro Micro
- Adafruit 2.2 "TFT IL1940C 1480
- PCB (вижте приложените файлове на Gerber) x 2 of
- 1206 SMD нулеви ома резистори x 12 of
- 1206 светодиода x 24 на
ПХБ файлът се отваря със софтуер „Design Spark“.
Стъпка 3: Окабеляване на модулите
Това е лесната част - особено лесна с печатната платка, която направих - просто следвайте диаграмата по -горе. Необходимо е внимание, за да се избегне свързването на 3v модули към 5v, дори на серийни и I2C линии.
Стъпка 4: Код
По -голямата част от кода е свързана с получаването на данни, за да се движат в системата по подреден начин и доста често има нужда от преобразуване на формати на данни от цели числа в плаващи в низове и в символи, което може да бъде много объркващо! Протоколът "Serial" ще обработва само символи, а I2C протоколът ще обработва много малки цели числа, намерих за по -добре да ги преобразувам в символи и след това да ги конвертирам обратно в цели числа в другия край на предавателната линия.
Контролерът Weedinator е основно 8 -битова система с много отделни Arduinos или „MCU“. Когато 8 бита е описан като действителни двоични нули и единици, той може да изглежда така: B01100101, което би било равно:
(1x2)+(0x2)2+(1x2)3+(0x2)4+(0x2)5+(1x2)6+(1x2)7+(0x2)8 =
Десетична цифрова стойност | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | |
Двоична цифрова стойност | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
= 101
А максималната възможна стойност е 255…. Така че максималният цялостен 'байт', който можем да предадем през I2C е 255, което е много ограничаващо!
На Arduino можем да предаваме до 32 ASCII знака или байта едновременно с помощта на I2C, което е много по -полезно, а наборът от символи включва числа, букви и контролни знаци в 7 -битов формат, както е показано по -долу:
За щастие, компилаторът на Arduino върши цялата работа по преобразуване от символ в двоичен във фонов режим, но все пак очаква правилния тип символ за предаване на данни и няма да приеме „низове“.
Сега е моментът, в който нещата могат да се объркат. Символите могат да бъдат изразени като единични знаци, използвайки дефиницията на char, или като едноизмерен масив от 20 знака, използвайки char [20]. Ардуиновият низ е много подобен на масив от символи и буквално е низ от знаци, често интерпретиран от човешкия мозък като „думи“.
// Изгражда знака „distanceCharacter“:
Инициатор на низ = ""; distanceString = инициатор + distanceString; int n = distanceString.length (); for (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }
Кодът по -горе може да преобразува дълъг низ от знаци в символен масив от знаци, който след това може да бъде предаден през I2C или сериен.
В другия край на преносната линия данните могат да бъдат преобразувани обратно в низ, като се използва следният код:
distanceString = distanceString + c; // низ = низ + знак
Масив от символи не може да бъде преобразуван директно в цяло число и първо трябва да премине във формат на низ, но следният код ще преобразува от низ в цяло число:
int резултат = (distanceString).toInt ();
int distanceMetres = резултат;
Сега имаме цяло число, което можем да използваме за изчисления. Поплавките (числа с десетична запетая) трябва да се преобразуват в цели числа на етапа на предаване и след това да се разделят на 100 за два десетични знака, например:
float distanceMetres = разстояниеMm / 1000;
И накрая, низ може да бъде създаден от смес от знаци и цели числа, например:
// Тук данните се компилират в знак:
dataString = инициатор + "BEAR" + zbearing + "DIST" + zdistance; // Ограничено до 32 знака // Низ = низ + знаци + интергери + знаци + цяло число.
Останалата част от кода е стандартна Arduino, която може да се намери в различните примери в библиотеките на Arduino. Вижте примера „примери >>>> Струни и примери за библиотека„ проводник “.
Ето целия процес за предаване и приемане на поплавък:
Конвертирайте Float ➜ Integer ➜ String ➜ Character масив ….. след това TRANSMIT символен масив от Master ➜➜
➜➜ ВЗЕМЕТЕ отделни герои на Slave …. след това преобразувайте Character ➜ String ➜ Integer ➜ Float
Стъпка 5: База данни и уеб страница
По -горе е показана структурата на базата данни и са прикачени файловете с php и html код. Потребителските имена, имената на базата данни, имената на таблиците и паролите са изтрити за сигурност.
Стъпка 6: Тестове за навигация
Успях да свържа регистратор на данни към контролната платка на Weedinator чрез I2C и да добия представа за представянето на Ublox M8M за спътниково позициониране:
При „студен старт“, показан от зелената графика, модулът стартира с много грешки, доста подобни на „нормален“GPS, и постепенно грешката намалява, докато след около 2 часа не получи RTK корекция между ровъра и основа (показан като червен кръст). През този 2-часов период базовият модул непрекъснато изгражда и актуализира средна стойност за географска ширина и дължина и след предварително програмирания времеви интервал решава, че има добра корекция. Следващите 2 графики показват поведение след „горещ старт“. „където базовият модул вече е изчислил добра средна стойност. Горната графика е за период от 200 минути и понякога поправката се губи и ровърът изпраща съобщение NMEA до Weedinator, че поправката временно е станала ненадеждна.
Долната синя графика е „приближаване“на червеното поле в горната графика и показва добра представителна снимка на представянето на Ublox, с общо отклонение от 40 мм, което е повече от достатъчно добро, за да насочи Weedinator към местоположението му, но евентуално не е достатъчно добър, за да обработва почвата около отделни растения?
Третата графика показва данни, събрани с Rover и Base на разстояние 100 метра един от друг - Не е открита допълнителна грешка - разстоянието на разделяне няма значение за точността.
Стъпка 7: Крайна
Препоръчано:
Дървена офсетова сателитна чиния с надраскване: 11 стъпки (със снимки)
Дървена офсетова сателитна чиния с надраскване: Бях попаднал на някои уебсайтове, където няколко души създадоха свои собствени сателитни чинии с първокласен фокус, един австралиец дори построи огромна 13 метрова офсетова чиния. Каква е разликата? Основният фокус е това, за което си мислите, когато някой каже „спътниковата дис
Гласова навигация Raspberry Pi, помагаща на слепи хора: 7 стъпки (със снимки)
Гласова навигация Raspberry Pi, помагаща на слепи хора: Здравейте В тази инструкция ще видим как малиново пи може да помогне на слепи хора, използвайки дефинираната от потребителя гласова инструкция. Ето, с помощта на ултразвуковия сензорен вход за измерване на разстоянието, което можем гласови напътствия на слепите хора
Roomblock: платформа за изучаване на ROS навигация с Roomba, Raspberry Pi и RPLIDAR: 9 стъпки (със снимки)
Roomblock: платформа за изучаване на ROS навигация с Roomba, Raspberry Pi и RPLIDAR: Какво е това? &Quot; Roomblock " е робот платформа, състояща се от Roomba, Raspberry Pi 2, лазерен сензор (RPLIDAR) и мобилна батерия. Монтажната рамка може да бъде направена от 3D принтери. Навигационната система ROS позволява да се направи карта на стаите и да се използва
☠WEEDINATOR☠ Част 4: Код на геометрията на диференциалното управление: 3 стъпки
☠WEEDINATOR☠ Част 4: Код на геометрията на диференциалното управление: Ако имате време да гледате горния видеоклип, ще забележите, че има някои странни шумове, причинени от двигателите на кормилното управление, спиращи от време на време, докато WEEDINATOR се придвижва до 3 точков завой. Двигателите по същество се блокират срещу
☠WEEDINATOR☠ Част 3: Изграждане на шаси: 8 стъпки (със снимки)
☠WEEDINATOR☠ Част 3: Изграждане на шаси: Зимата е идеалното време за изграждане на машини, особено когато се включва заваряване и плазмено рязане, тъй като и двете осигуряват доста топлина. Ако се чудите какво е плазмен нож, прочетете за задълбочени процедури. Ако сте били