Оглавление:

☠WEEDINATOR☠ Часть 2: Спутниковая навигация: 7 шагов (с изображениями)
☠WEEDINATOR☠ Часть 2: Спутниковая навигация: 7 шагов (с изображениями)

Видео: ☠WEEDINATOR☠ Часть 2: Спутниковая навигация: 7 шагов (с изображениями)

Видео: ☠WEEDINATOR☠ Часть 2: Спутниковая навигация: 7 шагов (с изображениями)
Видео: Голубая стрела (1958) фильм 2024, Ноябрь
Anonim
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация
☠WEEDINATOR☠ Часть 2: Спутниковая навигация

Рождение системы навигации 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: финал

Рекомендуемые: