Сборка реплики марсохода Perseverance на Arduino — пошаговое руководство
В этом уроке покажу, как построил реплику марсохода Perseverance. Вдохновленный настоящим марсоходом, проектировал так, чтобы любой — студент, мехатроник, энтузиаст робототехники — мог повторить по инструкциям.
Смотрите видео или читайте текст ниже.
Обзор
Основные фишки: рокер-богги подвеска — плавная езда по неровностям и преодоление препятствий до 2х диаметров колеса с постоянным контактом всех 6 колес с грунтом. Каждое колесо — свой двигатель постоянного тока.

Четыре угловых колеса — с рулевыми сервоприводами. Для эффективного рулевого управления без проскальзывания шин реализую геометрию Акермана: рассчитываю угол и скорость каждого колеса в зависимости от радиуса поворота.

При повороте внутренние колеса поворачивают сильнее и крутятся медленнее внешних.

Управление — дешевый RC-аппарат. На марсоходе — RC-приемник, передает команды на Arduino. Мозг — Arduino MEGA, для удобства подключения сделал кастомную PCB в формате щита для MEGA.

Есть FPV-камера в блоке камер: поворот — шаговый двигатель, наклон — серва. Видео в реальном времени на смартфон.

Многие детали — декоративные, для внешнего сходства. Манипулятора нет, но планирую добавить в следующих видео.

Теперь по порядку: проектирование, электроника, программирование Arduino.
3D-модель DIY марсохода
Проектировал в 3DEXPERIENCE Solidworks — спонсор видео.

3DEXPERIENCE Solidworks — Solidworks с облачными возможностями через платформу 3DEXPERIENCE. Данные и модели доступны команде из любой точки мира. Платформа включает приложения для продуктивности и управления данными.

Project Planning — задачи, дедлайны, прогресс. 3D Markup — просмотр, аннотации на любом устройстве. Облачный моделировщик SOLIDWORKS xDesign работает в браузере — моделирование где угодно.

С второй половины года выйдет версия для мейкеров за $99/год. Спасибо Solidworks за поддержку образования.
Попробовать 3DEXPERIENCE бесплатно: www.solidworks.com/HTMTryNow
Узнать больше: www.solidworks.com/HTMLearnMore
3DEXPERIENCE SOLIDWORKS for Makers: www.solidworks.com/htm
Возвращаемся к модели. Цель — максимальное сходство с настоящим Perseverance. На сайте NASA есть 3D-модель, скачал, открыл в Blender.

Сделал снимки спереди, сверху, сбоку, импортировал в Solidworks. Масштабировал под диаметр колеса 130 мм. Снял ключевые размеры: ширина, длина, высота, колея, параметры подвески.

По этим размерам и выбранным моторам/сервам спроектировал детали для 3D-печати и сборки, сохраняя внешний вид.

Рокер-богги — круглые алюминиевые профили 20 мм, рама — Т-образные профили 20×20 мм.
Модель на Thangs:

STL для печати:
3D-печать деталей марсохода
Печатал на Creality CR-10 и CR-10 V3. Для гибких колес нужен прямая подача (как в V3).

Оба принтера — качество за адекватные деньги. Ссылки:
- Creality CR-10…… Amazon / Banggood
- Creality CR-10 V3…… Amazon / Banggood / AliExpress
См. также: Лучшие бюджетные осциллографы для новичков и мейкеров — 2021
Важно: в слайсере включать Horizontal Expansion = –0.1 мм. Компенсирует расширение пластика.

Без этого отверстие 20 мм получится ~19.8 мм — не соберетесь.
Все напечатанные детали:

Много печати, но так получается уникальный вид. Можно сократить время вдвое, печатая только функциональные части.
Список деталей для DIY марсохода
- Т-профили алюминиевые 20×20 мм ……….. Amazon / Banggood / AliExpress
- Угловые соединители Т-профиля …………….. Amazon / Banggood / AliExpress
- Круглый алюминиевый профиль 20 мм ………………. Amazon / AliExpress
- Шарнир стержня 8 мм ………………………………….. Amazon / Banggood / AliExpress
- 8 × Подшипник 608RS – 8×22×7 мм …….. Amazon / Banggood / AliExpress
- 8 × Подшипник 626RS – 6×19×6 мм ……… Amazon / Banggood / AliExpress
- 5 × Подшипник 625RS – 5×16×5 мм ……… Amazon / Banggood / AliExpress
- Болты M3 разной длины ………………………… Amazon / Banggood / AliExpress
- 4 × Рога сервопривода ……………………………………. Amazon / Banggood / AliExpress
Нужны также болты M4, M5, M6 разной длины — полный список ниже. Болты/гайки можно купить в строительном магазине.
Сборка марсохода
Подготовка профилей. Ручной металлопилой режу под размер.

Нужно 10 Т-профилей для рамы и 8 круглых для подвески с такими размерами:

Рама из Т-профилей на угловых соединителях и болтах/гайках. Готовы верх и низ — вставляю 3D-детали рокерных шарниров по бокам, передние/задние кронштейны — на болты M3 и Т-гайки.

Рокерные шарниры — болты/гайки M5. Расстояние от переднего профиля до рокерного шарнира — 134 мм.
Сборка подвески рокер-богги
Устанавливаю основные подшипники. Вал рокерного шарнира крепится к раме болтом M8.

В валу слот под гайку M8 для закрепления. Отверстие вала 7.5 мм — плотное соединение, болт воспринимает часть нагрузки. Это самый нагруженный узел — весь вес марсохода на рокерном валу. Ориентация печати критична для прочности.

Сначала печатал вал «легко» — без поддержек, но слой разделился под нагрузкой.

Печать «на ребро» — нагрузка на контуры стенок — деталь выдерживает.

Собираю подвеску с рулевыми узлами и моторными креплениями, потом надеваю на рокерные валы.
Отверстия под круглые профили — с перехлестом, иногда надо наждачкой/наждачной бумагой подгонять.

Точные отверстия в профилях: отмечаю линию на профиле, вставляю в 3D-деталь, через отверстие детали отмечаю центры сверления по бокам.


С другой стороны то же самое. Сверлю 2.5 мм, режу резьбу M3 самим болтом — алюминий мягче.


Метод важен — в итоге все детали стоят точно относительно друг друга.
Богги-шарнир — два подшипника и болт M8.

Рулевые узлы — две детали, сбитые болтами. Соединение сервокрепления и моторокрепления — два подшипника и болт M6.

Головка болта — под рог сервы через 3D-переходник и болты M3.

Переходник с шестигранником передает крутящий момент. Нижняя часть заворачивается на болт.

Фиксирую гайкой M6. Позже понял: нужна вторая гайка M6 снизу, затянутая к первой — иначе момент от сервы откручивает узел.

То же для других угловых узлов. Проверка: поставить на ровную поверхность — все три моторокрепления должны лежать в одной плоскости.

Другая сторона зеркально (детали зеркальные, не идентичные).
Надеваю подсборки на рокерные валы рамы. Сначала вставляю латунные втулки с резьбой в вал (паяльником).

Четыре болта M4 фиксируют подвеску.

Рама свободно качается — не хватает дифференциала.

Дифференциал связывает два рокера и раму. При подъеме одной стороны вторая опускается — равномерный контакт колес. Рама принимает средний угол тангажа.

Детали дифференциала:

Дифференциальная тяга — из трех частей (влезть на малый принтер). Ось в центре рамы — два подшипника и болт M8.

Связь с рокером — шарнир стержня M8 и нарезное стержневое стержень M8 длиной 50 мм. Стержень в 3D-детали с гайкой M8 с одной стороны, с другой — в шарнир.

Расстояние между 3D-линком и шарниром ~20 мм — для горизонта рамы. Линк к рокерному рычагу — два подшипника и болт M5.

Повторяю для другой стороны. Подвеска готова: одна сторона вверх — вторая вниз.

Все колеса в контакте. Рама тангажирует на половину хода ноги.
См. также: Манипулятор Arduino и платформа на меканум-колесах — автоматика
Установка двигателей марсохода
DC-моторы 37 мм, 12V, редуктор 50 об/мин.

50 об/мин — многовато, лучше 20 или 10 об/мин.
Валовые муфты для крепления колес:

Втулки M3 под зажим муфты на валу, гайки M4 под колесо. Гайки клеить или использовать втулки.
Колеса: два элемента. Пневма — гибкий пластик (не обязательно), обод — обычный PLA.

Обод имеет пазы под пневма — момент передается на колесо. Капельку клея в пазы. Креплю колеса к муфтам/моторам 4 болтами M4.

Рулевые сервы: цифровые, высокий момент 25 кгсм, 4.8–6.8V. Крепление — 4 болта M3 в втулки сервокрепления.

Сборка блока камер
Поворот камеры — NEMA 17 (можно другой). Момент передается через нарезное стержень M5, соединенный с мотором 3D-муфтой, с другой стороны — подшипник и две гайки. Наклон — та же серва, что на рулях.


Многие детали блока камер — декоративные. Сборка на болты M3 и втулки.

Устанавливаю реальную FPV-камеру: кастомный держатель на корпусе блока. Доступ сверху, крышка на защелках. Итоговый вид:

Блок камер креплю в переднем правом углу рамы.

Можно продолжить сборку декора или подключить электронику. Сначала собрал всё 3D, потом электронику.
Сборка остальных деталей марсохода
Дальше — только декор, чтобы выглядело как настоящий. Детали из 3D-модели.

Много усилий в детализацию.

Детали крупные, печать долгая.

Быстрый обзор установки.
Две верхние средние панели — на защелках, снимаются как капот — под ними электроника.


Крепление электроники — два 3D-элемента на болтах, идет на нижнюю раму.
Электроника
Замеры проводов к моторам. Паяю прямо к моторам (нет разъемов), термоусадка.

Стяжки для аккуратной проводки.

Сервы — удлинители до отсека электроники. В креплении электроники слоты для пропуска проводов к центру.

Проводка получилась чистой — за видимыми частями.
См. также: SCARA-робот | Как построить своего Arduino-робота
Схема DIY марсохода

Компоненты:
- DC-мотор 12V 37 мм …….……………….…
- Цифровая серва 25 кг ……………………………
- Драйвер DRV8871 …………………….
- Шаговый двигатель NEMA 17…………………
- Драйвер A4988………………..…..…
- Arduino MEGA…………………….…..………
- DC-DC понижающий преобразователь …………………….
- 3S LiPo батарея ………………………..………..
- Разъем XT60 ………………………………
- RC-аппарат FLYSKY …………………..
- FPV-камера и видеопередатчик …. Amazon / Banggood / AliExpress
- FPV-приемник по выбору
6 DC-моторов → 6 драйверов DRV8871 (PWM, до 3.6А пик). Моторы 12V, 1А номинал, 3А пуск. Питание — 3S LiPo (~12V).
Сервы 4.8–6.8V → понижающий преобразователь 12V→6V, ~8А (сервы мощные, пуск ~2А). Камерный шаговый — A4988/DRV8825. Два резистора — делитель напряжения для мониторинга батареи.
RC-приемник от 6V (преобразователь), FPV-камера и передатчик — от 12V батареи.
Кастомная PCB
Для порядка — своя PCB в формате щита для Arduino MEGA.

На плате: драйверы моторов, стабилизатор 3.3V, разъем NRF24L01 (на будущее), DHT22, компас, I2C, UART, шины 12V/5V/3.3V/GND. Запас под апгрейды.
Заказал на PCBWay. Загрузка гербера, свойства, разумная цена.

Менял только цвет — синий, как Arduino. Гербер можно скачать ниже или заказать через PCBWay Projects.

Скачать гербер для PCB DIY марсохода:
Через несколько дней PCB пришли. Качество отличное, всё как в проекте.

Сборка простая — всё подписано. Начинаю с нижних пин-хедеров (под Arduino MEGA), потом верхняя сторона. Везде пин-хедеры — гибкость для правок. Не паял 3.3V стабилизатор и лишние пины — пока не нужны.

Готовую PCB креплю к Arduino (2 болта) и вставляю в крепление электроники.

Подключаю моторы к драйверам, вставляю драйверы в PCB. Сервы в свои пины, шаговый драйвер — одна перемычка (1/8 шаг).

Радио — FLYSKY, дешево и надежно.

Приемник к Arduino — сервовые удлинители (3 провода: VCC, GND, Signal). Протокол I-BUS через Serial. Для телеметрии (напряжение батареи) — второй Serial порт к Sensor I-BUS приемника.
Преобразователь — 2 болта. Батарея — две резиновые ленты (легко снимать для зарядки).

Выключатель — на задней правой панели. Провода 20 AWG (ток до нескольких А). Дважды проверяйте соединения — ошибка = пожар.
FPV-камера на 12V, видеосигнал на передатчик (тоже 12V). Электроника готова.

Задвигаю крышки. Почти готово — осталось прошить Arduino.
Программирование DIY марсохода — код Arduino
Скачать код:
Обзор кода
Библиотека IBusBM — чтение данных от RC-аппарата.
IBus.loop(); ch0 = IBus.readChannel(0); ch1 = IBus.readChannel(1); ch2 = IBus.readChannel(2); ch3 = IBus.readChannel(3); ch6 = IBus.readChannel(6);
Конвертирую в радиус поворота вправо/влево и скорость 0–100%.
// Steering right if (ch0 > 1515) { r = map(ch0, 1515, 2000, 1400, 600); } // Steering left else if (ch0 < 1485) { r = map(ch0, 1485, 1000, 1400, 600); } // Rover speed % s = map(ch2, 1000, 2000, 0, 100);
Радиус «r» → углы рулей и скорости колес (геометрия Акермана).
void calculateMotorsSpeed() { if (ch0 > 1485 && ch0 < 1515) { speed1 = speed2 = speed3 = s; } else { speed1 = s; speed2 = s * sqrt(pow(d3,2) + pow((r - d1),2)) / (r + d4); speed3 = s * (r - d4) / (r + d4); } speed1PWM = map(round(speed1), 0, 100, 0, 255); speed2PWM = map(round(speed2), 0, 100, 0, 255); speed3PWM = map(round(speed3), 0, 100, 0, 255); } void calculateServoAngle() { thetaInnerFront = round((atan((d3 / (r + d1)))) * 180 / PI); thetaInnerBack = round((atan((d2 / (r + d1)))) * 180 / PI); thetaOuterFront = round((atan((d3 / (r - d1)))) * 180 / PI); thetaOuterBack = round((atan((d2 / (r - d1)))) * 180 / PI); }
Углы серв через библиотеку ServoEasing (плавное движение).
servoW1.startEaseTo(97 - thetaOuterFront); servoW3.startEaseTo(97 + thetaOuterBack); servoW4.startEaseTo(94 - thetaInnerFront); servoW6.startEaseTo(96 + thetaInnerBack);
DC-моторы — analogWrite() (PWM на драйверы).
analogWrite(motorW1_IN1, speed2PWM); digitalWrite(motorW1_IN2, LOW);
Код не сложен — функций мало. В планах: GPS-навигация, сенсоры, манипулятор, сбор грунта.
Надеюсь, понравилось. Вопросы — в комментариях. Коллекция Arduino-проектов.
Производственный процесс
- Построение ровера на Windows IoT Core с Raspberry Pi 2 — Руководство от новичка к профи
- Детектор аудиочастот на Arduino: измеряем пик громкости с высокочувствительным модулем
- Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Сборка надежного таймера обратного отсчета на Arduino с 7-сегментным дисплеем SparkFun
- Самодельный RC Porsche на Arduino: Пошаговое руководство
- Построение надежного умного монитора энергии на Arduino UNO – Пошаговое руководство
- Создание портативного RFID-замка на Arduino — пошаговое руководство
- Определение цвета объектов с помощью Arduino Nano и датчика TCS3200
- Самодельный измеритель роста на Arduino — точно и просто