Это зеркальный репозиторий, синхронизируется ежедневно с исходного репозитория.
Внести вклад в разработку кода
Синхронизировать код
README.md
Проект UAS-Project-STM32: беспилотное судно/беспилотный автомобиль на базе STM32, совместимое с Raspberry Pi, NVIDIA Jetson Nano и другими платформами
Основные моменты:
- Архитектура системы:
- В STM32 используется операционная система, которая позволяет задачам выполняться с разной частотой. Преимущество этой архитектуры заключается в повышении гибкости системы и снижении её связанности. Подобный подход применяется многими производителями беспилотных летательных аппаратов, такими как Crazypony и другие.
- Для разработки нижнего уровня можно выбрать компиляцию, изменив только одно определение макроса. Система автоматически адаптируется к выбору датчиков. Это особенно полезно при работе с двумя наборами инерциальных измерительных устройств, таких как GY901 и MPU6050+HML5883, обеспечивая бесшовный переход между ними.
- Датчики автоматически проверяют себя после включения питания, автоматически калибруются, что обеспечивает точность данных.
- GPS-модуль использует продвинутый протокол UBX. Перед включением системы он автоматически настраивает вывод GPS, отфильтровывая ненужные данные, что значительно повышает эффективность обработки данных.
- Основные аспекты системы:
- Внутренние буферы данных верхнего и нижнего уровней используют кольцевые буферы, которые значительно снижают потери пакетов при высокоскоростной передаче данных и улучшают скорость обработки данных верхним и нижним уровнями.
- STM32 использует конечный автомат для управления различными состояниями через пульт дистанционного управления и выполнения различных операций. Это повышает гибкость системы.
- Используется продвинутый алгоритм градиентного спуска Madgwick для определения ориентации. По сравнению с предыдущим методом фильтрации Калмана, этот метод значительно сокращает количество итераций, необходимых для обработки данных нижнего уровня. С частотой выборки 10 Гц достигается сходимость к текущей ориентации транспортного средства.
Алгоритм градиентного спуска Madgwick является окончательным решением. Его преимущество заключается в том, что он требует низкой частоты итераций и частоты выборки датчиков, что компенсирует недостаток фильтра Калмана — потребление ресурсов. Поскольку нижний уровень использует STM32F1, максимальная тактовая частота которого составляет 72 МГц, одновременное использование алгоритма определения ориентации и управления на 32 может быть непрактичным. Градиентный спуск — это широко используемый алгоритм машинного обучения, который обычно применяется для оптимизации задач. В контексте определения ориентации это означает постепенное уменьшение ошибки между расчётной ориентацией и фактической ориентацией.
- Из-за необходимости в реальном времени обрабатывать большие объёмы данных, GPS-модуль потребляет значительную часть процессорного времени MCU. Поэтому в систему добавлен DMA. В процессе проектирования предоставляется выбор между DMA и прерываниями, что повышает эффективность и гибкость.
- Расширение функциональности:
- Можно настроить модель транспортного средства (автомобильная или морская), чтобы оптимизировать использование данных GPS. Данные GPS будут адаптироваться в соответствии с выбранной моделью.
- На Google Map можно напрямую экспортировать траекторию транспортного средства в виде точек.
Использование датчиков:
- GPS-модуль: Ublox M8 (версия с встроенным HMC5883).
- Инерциальный измерительный блок: MPU6050.
- Пульт дистанционного управления: WFR07\WFT07. Подробные инструкции по подключению см. в каталоге.
- Двигатель:
- Два передних колеса управляются рулём (см. каталог для модели руля и подключения).
- Задние колёса приводятся в движение отдельными двигателями (используя PID-управление для поддержания одинаковой скорости вращения обоих двигателей).
- Если конструкция транспортного средства отличается, просто удалите исходный скрипт и внесите соответствующие изменения в функции скрипта.
Инструкция по использованию:
- Загрузите файл в папку.
- Откройте Keil5, скомпилируйте и загрузите в STM32.
- Подключите датчики согласно таблице в файле «STM32 ресурсы использования.xlsx».
Этого достаточно для начала работы. Без подключения верхнего уровня управление будет осуществляться только с помощью пульта дистанционного управления. При подключении верхнего уровня доступны такие функции, как навигация по точкам и сбор данных.
Примечание:
- Модель STM32 — ZET6. Из-за использования таймера 8 требуется большой объём памяти.
- Верхний уровень отвечает за связь с наземной станцией, планирование маршрута и т. д. Он может быть перенесён на ROS.
- Нижний уровень имеет относительно простую архитектуру, разделяя задачи определения ориентации, управления двигателем и т. п. на частоты 5, 10, 50 и 100 Гц.
- Raspberry Pi использует Python-скрипт, работающий в фоновом режиме как процесс (если используется версия без ROS).
- Рекомендуется использовать версию без ROS, поскольку она проще в настройке (требуется только Python) и более стабильна.
- Адрес верхнего уровня без ROS: https://github.com/matreshka15/raspberry-pi-USV-program.
- Адрес верхнего уровня с ROS: https://github.com/matreshka15/ROS-based-unmanned-vehicle-project.
- Видео с объяснением и демонстрацией алгоритма определения ориентации: https://zhuanlan.zhihu.com/p/82973264.
Важно! Все журналы разработки и руководства для нижнего уровня хранятся по следующим адресам:
- Справочные материалы по датчикам и алгоритмам для проекта беспилотного судна: https://github.com/matreshka15/unmanned-ship-datasheets.
- Журнал разработки содержит подробную информацию о проекте, начиная с его создания и заканчивая успешными этапами тестирования. Из-за перехода от старого алгоритма определения ориентации к новому, ранние объяснения ориентации предоставляются только для справки.
- Часть коммуникационного протокола выделена и помещена в этот каталог. То есть: общая структура и коммуникационный протокол.docx.
Формат файла:
- Папка Periphrals содержит код для внешних устройств STM32.
- Папка Software содержит программный код STM32, включая алгоритмы PID и другие.
- Файл CONFIGURATION.h используется для настройки и условной компиляции.
- initialize.c — код, выполняемый при инициализации STM32.
Функции (совместно с верхним уровнем):
- Голосовые подсказки о состоянии GPS и работе транспортного средства (достаточно подключить небольшой динамик к верхнему уровню).
- Управление с помощью пульта дистанционного управления.
- Сбор координат GPS: во время управления с помощью пульта верхний уровень записывает текущие координаты GPS.
- Ввод координат GPS для автономной навигации (координаты можно получить с помощью Google Earth или использовать ранее собранные координаты GPS).
От разработчика:
- Если вы заинтересованы в совместной разработке, пожалуйста, свяжитесь с автором.
- Электронная почта: 8523429@qq.com.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )