Оглавление:
- Шаг 1. Как это работает
- Шаг 2: Компоненты
- Шаг 3: Подключение модулей
- Шаг 4: Код
- Шаг 5: База данных и веб-страница
- Шаг 6: навигационные тесты
- Шаг 7: финал
Видео: ☠WEEDINATOR☠ Часть 2: Спутниковая навигация: 7 шагов (с изображениями)
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
Рождение системы навигации Weedinator!
Кочующий сельскохозяйственный робот, которым можно управлять с помощью смартфона.
… И вместо того, чтобы просто проходить обычный процесс сборки, я подумал, что попытаюсь объяснить, как это работает на самом деле - очевидно, не ВСЕ, а самые важные и интересные моменты. Прошу извинить за каламбур, но именно то, как данные передаются между отдельными модулями, которые мне интересны и разбитые на наименьший знаменатель, мы получим настоящие «биты» - нули и единицы. Если вы когда-нибудь запутались в битах, байтах, символах и строках, то, может быть, сейчас самое время перестать путаться? Я также собираюсь попытаться развязать несколько абстрактную концепцию под названием «Отмена ошибок».
В самой системе есть:
- GPS / GNSS: Ublox C94 M8M (ровер и база)
- Цифровой компас 9DOF Razor IMU MO
- Fona 800H 2G GPRS сотовая связь
- 2,2-дюймовый TFT-экран
- Arduino Due 'Master'
- Различные «Рабы» Arduino.
Как ни странно, у многих спутниковых навигаторов нет цифрового компаса, что означает, что если вы стоите и заблудились, вам придется идти или двигаться в любом случайном направлении, прежде чем устройство сможет показать вам правильное направление со спутников. Если вы заблудитесь в густых джунглях или на подземной автостоянке, вы наелись!
Шаг 1. Как это работает
В настоящее время со смартфона или компьютера загружается простая пара координат, которые затем загружаются Weedinator. Затем они интерпретируются в виде заголовка в градусах и пройденного расстояния в мм.
GPRS fona используется для доступа к онлайн-базе данных через сотовую сеть 2G, а также для получения и передачи координат на Arduino Due через Arduino Nano. Due является мастером и управляет множеством других Arduinos в качестве подчиненных через I2C и последовательные шины. Due может взаимодействовать с живыми данными от Ublox и Razor и отображать заголовок, рассчитанный одним из подчиненных устройств Arduino.
Спутниковый трекер Ublox особенно умен, поскольку он использует подавление ошибок для получения очень точных исправлений - окончательное номинальное общее отклонение около 40 мм. Модуль состоит из идентичной пары, одна из которых, «ровер», движется вместе с Weedinator, а другая, «база», закреплена на шесте где-то на открытом воздухе. Устранение ошибок достигается за счет того, что база может добиться действительно точного исправления, используя большое количество образцов с течением времени. Затем эти образцы усредняются, чтобы компенсировать изменение атмосферных условий. Если бы устройство двигалось, очевидно, что оно не могло бы получить какое-либо усреднение и полностью зависело бы от меняющейся среды. Однако, если статическое и движущееся устройство работают вместе, пока они могут обмениваться данными между собой, они могут пользоваться преимуществами обоих. В любой момент времени базовый блок все еще имеет ошибку, но он также имеет предварительно рассчитанное сверхточное исправление, поэтому он может вычислить фактическую ошибку, вычитая один набор координат из другого. Затем он отправляет вычисленную ошибку марсоходу по радиоканалу, который затем добавляет ошибку к своим собственным координатам, и эй, престо, у нас есть отмена ошибки! На практике устранение ошибок составляет разницу между общим отклонением от 3 до 40 мм.
Полная система выглядит сложной, но на самом деле ее довольно легко построить, либо свободно на непроводящей поверхности, либо с использованием разработанной мной печатной платы, которая позволяет надежно закрепить все модули на болтах. Будущие разработки построены на печатной плате, что позволяет включать огромное количество Arduinos для управления двигателями рулевого управления, поступательного движения и встроенного станка с ЧПУ. Навигации также будет способствовать по крайней мере одна система распознавания объектов, использующая камеры для распознавания цветных объектов, например флуоресцентных мячей для гольфа, которые аккуратно размещены в какой-то сетке - смотрите на это пространство!
Шаг 2: Компоненты
- Ublox C94 M8M (ровер и база) x 2 шт.
- Цифровой компас 9DOF Razor IMU MO
- Fona 800H 2G GPRS сотовая связь 1946 г.
- Arduino Due
- Arduino Nano x 2 шт.
- SparkFun Pro Micro
- Adafruit 2,2-дюймовый TFT IL1940C 1480
- Печатная плата (см. Прикрепленные файлы Gerber) x 2 шт.
- 1206 резисторов SMD с нулевым сопротивлением x 12 шт.
- 1206 светодиодов x 24 шт.
Файл печатной платы открывается с помощью программного обеспечения Design Spark.
Шаг 3: Подключение модулей
Это простая часть - особенно простая с печатной платой, которую я сделал - просто следуйте диаграмме выше. Необходимо соблюдать осторожность, чтобы не подключать модули 3 В к 5 В, даже по последовательным линиям и линиям I2C.
Шаг 4: Код
Большая часть кода связана с тем, чтобы данные перемещались по системе упорядоченным образом, и довольно часто возникает необходимость преобразовать форматы данных из целых чисел в числа с плавающей запятой, в строки и в символы, что может сбивать с толку! Протокол «Последовательный» обрабатывает только символы, а протокол I2Протокол C будет обрабатывать очень маленькие целые числа, я счел лучше преобразовать их в символы, а затем преобразовать обратно в целые числа на другом конце линии передачи.
Контроллер 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]. Строка Arduino очень похожа на массив символов и буквально представляет собой строку символов, часто интерпретируемых человеческим мозгом как «слова».
// Строит символ distanceCharacter:
String initiator = ""; distanceString = инициатор + distanceString; int n = distanceString.length (); для (int aa = 0; aa <= n; aa ++) {distanceCharacter [aa] = distanceString [aa]; }
Приведенный выше код может преобразовать длинную строку символов в символьный массив символов, который затем может быть передан через I2C или серийный.
На другом конце линии передачи данные можно преобразовать обратно в строку, используя следующий код:
distanceString = distanceString + c; // строка = строка + символ
Массив символов не может быть преобразован напрямую в целое число и должен сначала перейти в строковый формат, но следующий код преобразует строку в целое число:
int результат = (distanceString).toInt ();
int distanceMetres = результат;
Теперь у нас есть целое число, которое мы можем использовать для вычислений. Плавающие числа (числа с десятичной точкой) необходимо преобразовать в целые числа на этапе передачи, а затем разделить на 100 для получения двух десятичных знаков, например:
float distanceMetres = distanceMm / 1000;
Наконец, строка может быть создана из смеси символов и целых чисел, например:
// Здесь данные компилируются в символ:
dataString = инициатор + «МЕДВЕДЬ» + zbearing + «DIST» + zdistance; // Ограничено 32 символами // Строка = строка + символы + целое число + символы + целое число.
Остальной код является стандартным материалом для Arduino, который можно найти в различных примерах в библиотеках Arduino. Посмотрите пример «examples >>>> Strings» и примеры библиотеки «wire».
Вот весь процесс передачи и приема числа с плавающей запятой:
Преобразовать с плавающей точкой ➜ Целое число ➜ Строку ➜ Массив символов ….. затем ПЕРЕДАТЬ массив символов из Мастера ➜➜
➜➜ ПОЛУЧАТЬ отдельных персонажей на Slave…. затем преобразовать Character ➜ String ➜ Integer ➜ Float
Шаг 5: База данных и веб-страница
Выше показана структура базы данных и прикреплены файлы кода php и html. Имена пользователей, имена баз данных, имена таблиц и пароли не отображаются в целях безопасности.
Шаг 6: навигационные тесты
Мне удалось подключить регистратор данных к плате управления Weedinator через I2C и получить некоторое представление о характеристиках спутникового позиционирования Ublox M8M:
При «холодном запуске», показанном зеленым графиком, модуль запускался с большим количеством ошибок, что очень похоже на «нормальный» GPS, и постепенно ошибка уменьшалась до тех пор, пока примерно через 2 часа не было исправлено RTK между роверами. и основание (показано как красный крест). В течение этого двухчасового периода базовый модуль непрерывно создает и обновляет среднее значение широты и долготы, и по прошествии заранее запрограммированного временного интервала решает, что исправление исправлено. Следующие 2 графика показывают поведение после «горячего старта». ', где базовый модуль уже рассчитал хорошее среднее значение. На верхнем графике показан период более 200 минут, и иногда исправление теряется, и ровер отправляет сообщение NMEA в Weedinator о том, что исправление временно стало ненадежным.
Нижний синий график представляет собой увеличенное изображение красного квадрата на верхнем графике и показывает хороший репрезентативный снимок производительности Ublox с общим отклонением 40 мм, что более чем достаточно, чтобы направить Weedinator к месту его расположения., но, возможно, недостаточно хорош, чтобы возделывать почву вокруг отдельных растений?
На третьем графике показаны данные, собранные с помощью ровера и базы на расстоянии 100 метров - дополнительных ошибок обнаружено не было - расстояние разделения не повлияло на точность.
Шаг 7: финал
Рекомендуемые:
Спутниковая метеостанция: 5 шагов
Спутниковая метеостанция: этот проект предназначен для людей, которые хотят собирать собственные данные о погоде. Он может измерять скорость и направление ветра, температуру и влажность воздуха. Он также способен прослушивать метеорологические спутники, вращающиеся вокруг Земли, каждые 100 минут. Я буду
Деревянная смещенная спутниковая антенна, изготовленная на основе царапин: 11 шагов (с изображениями)
Деревянная смещенная спутниковая антенна, изготовленная на основе царапин: я наткнулся на несколько веб-сайтов, на которых несколько человек построили свои собственные спутниковые антенны с основным фокусом, а один австралиец даже построил огромную 13-метровую смещенную антенну. В чем разница? Главное внимание уделяется тому, о чем вы думаете, когда кто-то говорит «спутниковый дис
Навигация по программному обеспечению Raspberry Pi: часть 1:14 шагов
Навигация по программному обеспечению Raspberry Pi: Часть 1: В этом уроке вы узнаете, как перемещаться по Raspberry Pi с помощью интерфейса командной строки. Вы будете создавать папки, переходить из одного каталога в другой и узнаете, как сделать снимок экрана, чтобы запечатлеть всю свою работу в классе! Хорошо
Навигация по программному обеспечению Raspberry Pi: часть 2:10 шагов
Навигация по программному обеспечению Raspberry Pi: Часть 2: Этот урок является продолжением вашего обучения работе с командной строкой. Работая с Raspberry Pi, вы, несомненно, будете устанавливать новое программное обеспечение, чтобы учиться, пробовать и творить с его помощью. В этом уроке вы узнаете, как устанавливать пакеты программного обеспечения и
☠WEEDINATOR☠ Часть 3: Сборка шасси: 8 шагов (с изображениями)
«WEEDINATOR» Часть 3: Сборка шасси: Зима - идеальное время для сборки оборудования, особенно когда речь идет о сварке и плазменной резке, поскольку и то, и другое обеспечивает изрядное количество тепла. Если вам интересно, что такое плазменный резак, прочтите подробные инструкции