В этой статье мы рассмотрим создание копии марсохода Mars Perseverance на основе платы Arduino. Я думаю многие из посетителей нашего сайта вдохновлены настоящим марсоходом, который в настоящее время исследует Марс. Наш проект марсохода спроектирован таким образом, чтобы каждый, кто любит эту технологию, студенты, производители, энтузиасты мехатроники или робототехники и т. д., могли легко следовать инструкциям в этой статье и построить свой собственный марсоход.
Ранее на нашем сайте мы рассматривали проект робота-марсохода на Arduino с повышенной проходимостью, но представленный в этой статье проект марсохода, конечно же, более совершенный.
Обзор проекта
Давайте рассмотрим основные характеристики этого марсохода. Он использует подвеску с качающейся тележкой, которая позволяет марсоходу плавно двигаться по неровной местности и преодолевать препятствия, такие как камни, которые в два раза больше диаметра колеса, при этом все шесть колес постоянно находятся в контакте с землей. Каждое колесо имеет независимый двигатель постоянного тока, который движет марсоход вперед или назад.
Четыре угловых колеса имеют индивидуальные рулевые серводвигатели. Для эффективного управления вездеходом и предотвращения пробуксовки шин при движении по кривой мы реализуем геометрию рулевого управления Аккермана. С помощью этой геометрии мы можем рассчитать скорость и угол каждого колеса в зависимости от радиуса поворота.
Это означает, что при повороте внутренние управляемые колеса будут иметь больший угол по сравнению с внешними колесами. В то же время внутренние колеса будут иметь меньшую скорость по сравнению с внешними колесами.
Для управления марсоходом я использую дешевый коммерческий RC-передатчик, который посылает команды марсоходу (подобный передатчик мы рассматривали здесь).
На марсоходе у меня есть подходящий RC-приемник, который принимает команды и посылает их на плату Arduino. Да, мозг этого марсохода на самом деле — плата Arduino MEGA, и для простого соединения всего вместе я сделал специальную печатную плату, которую можно просто прикрепить поверх платы Arduino MEGA.
В марсоходе также есть FPV-камера, расположенная в блоке камер. Она управляется с помощью шагового двигателя и серводвигателя, и я получаю видео от нее в реальном времени на смартфон.
Я хотел бы отметить, что многие части на самом деле не функциональны или присутствуют только для того, чтобы соответствовать внешнему виду настоящего марсохода. Также отсутствует роботизированная рука, но я планирую сделать руку и добавить больше функций этому марсоходу в будущих видео.
Тем не менее, теперь позвольте мне провести вас через процесс его создания, начиная с проектирования марсохода, подключения электронных компонентов и программирования платы Arduino.
3D модель марсохода своими руками
Я спроектировал этот марсоход с помощью 3D EXPERIENCE Solidworks.
3DEXPERIECE Solidworks — это версия Solidworks с облачными возможностями, которые мы получаем через платформу 3DEXPERIECE. Здесь все работает через облако, поэтому вы или любой из вашей команды можете иметь доступ к данным или моделям в любое время и из любой точки мира. Платформа 3DEXPERIECE также включает в себя множество полезных приложений для повышения производительности и управления данными.
Например, приложение Project Planning — отличный способ организовать ваши задачи, установить сроки и отслеживать прогресс. С приложением 3D Markup вы можете просматривать, исследовать и делать заметки о моделях с любого устройства, например, с ноутбука, планшета или даже смартфона.
Также есть отдельный облачный 3D-моделер SOLIDWORKS xDesign, который работает внутри вашего браузера. Его можно использовать вместе с Solidworks или отдельно, и он отлично подходит для моделирования в любом месте, в любое время и на любом устройстве.
Хорошо, давайте вернемся к модели и объясним, как я спроектировал марсоход. Моей целью было сделать этот марсоход максимально похожим на настоящий Mars Perseverance Rover. На официальном сайте NASA есть 3D-модель Mars Perseverance Rover, поэтому я скачал и открыл ее в Blender.
Я сделал 3 фотографии марсохода спереди, сверху и сбоку и импортировал их в Solidworks. Я хотел, чтобы размер колес был 130 мм в диаметре, поэтому я масштабировал фотографии в соответствии с этим размером.
Затем отсюда я взял все основные размеры, такие как ширина, длина, высота, расстояние между колесами, размеры подвески коромысла и т. д.
Исходя из этих размеров, а также двигателей постоянного тока и сервоприводов, которые я планировал использовать, я спроектировал детали марсохода таким образом, чтобы их можно было легко распечатать на 3D-принтере и собрать, при этом стараясь сохранить внешний вид как можно ближе к оригиналу.
Для подвески коромысла я использую 20-миллиметровые круглые алюминиевые профили, а для базовой рамы — 20-миллиметровые алюминиевые профили с Т-образными пазами.
Файлы для загрузки 3D-моделей и STL
Эту 3D-модель, а также файлы STL для 3D-печати можно получить на сайте Cults3D.
3D-печать деталей-реплик марсохода
Для 3D-печати деталей я использовал свой старый Creality CR-10, а также новый 3D-принтер CR-10 V3. Если вы хотите напечатать колеса гибким материалом, вам определенно понадобится принтер с прямым экструдером, как у CR-10 V3.
При 3D-печати деталей важно использовать функцию «Горизонтальное расширение» в программном обеспечении для нарезки. Я использовал значение –0,1 мм. Эта функция компенсирует расширение нити при печати.
Если деталь не используется, например, если в ней имеется отверстие диаметром 20 мм, то отверстие фактической детали, напечатанной на 3D-принтере, будет около 19,8 мм, и мы не сможем ее собрать.
Тем не менее, вот все детали, напечатанные на 3D-принтере.
Честно говоря, немного странно, сколько печати, но это единственный способ получить уникальный внешний вид марсохода. Хотя, вы можете сократить время печати вдвое, если решите напечатать только функциональные части этого марсохода.
Список деталей для самодельного марсохода
Вот список компонентов, необходимых для сборки этого самодельного марсохода. Список электронных компонентов можно найти ниже в разделе схемы в статье.
- Алюминиевые профили Т-образные 20x20 мм
- Угловые кронштейны с Т-образным пазом
- Алюминиевая круглая трубка 20 мм
- Шарнир тяги 8 мм
- 8 x Подшипник 608RS – 8x22x7 мм
- 8 x Подшипник 626RS – 6x19x6 мм
- 5 x Подшипник 625RS – 5x16x5 мм
- Болты М3 разной длины
- 4 x сервоклапана
Нам также нужны болты M4, M5 и M6 разной длины. Полный список необходимых болтов и гаек вы можете скачать по следующей ссылке.
Болты и гайки также можно приобрести в местном хозяйственном магазине.
Сборка вездехода (марсохода)
Хорошо, теперь можно приступать к сборке марсохода. Сначала нужно подготовить алюминиевые профили. Я использовал ручную пилу по металлу, чтобы отрезать их по размеру.
Нам понадобится 10 профилей с Т-образными пазами для основания и 8 круглых профилей для подвески коромысла со следующими размерами.
Для сборки рамы профилей T-slot мы используем подходящие угловые кронштейны T-slot и несколько болтов и гаек. Как только у нас будут готовы верхняя и нижняя рамы, мы можем завершить основание, вставив детали качающегося шарнира, напечатанные на 3D-принтере, по бокам и несколько кронштейнов, напечатанных на 3D-принтере, спереди и сзади. Для их фиксации на месте нам понадобятся болты M3 и гайки T-slot.
Для шарниров коромысла я использовал болты и гайки М5. Расстояние от переднего профиля до шарнира коромысла должно быть 134 мм.
Сборка подвески коромысла
Далее мы можем вставить основные подшипники для подвески коромысла на место. Затем у нас есть вал коромысла, который будет прикреплен к основанию с помощью болта М8.
Вал имеет прорезь, в которую мы можем вставить гайку M8, которая используется для крепления его к основанию. Отверстие вала составляет 7,5 мм, так что у нас есть плотное соединение между болтом и валом. Таким образом мы фактически усиливаем 3D-печатный вал, так как сам болт будет нести часть веса марсохода. Это самая нагруженная часть всей сборки, так как весь вес марсохода поддерживается валом коромысла. То, как мы печатаем детали, очень важно для их прочности.
Первоначально я напечатал этот вал более простым способом, где не нужен поддерживающий материал, но печать не удалась.
Таким образом, основная сила напряжения действует на слои, которые не так уж и прочны, но если мы напечатаем деталь сбоку, где сила напряжения будет действовать на контуры стенок, то деталь будет намного прочнее и не разрушится.
Тем не менее, сейчас мы продолжим сборку подвески коромысла вместе с колесными шарнирами и креплениями двигателя, а позже прикрепим эти подузлы к осям коромысел.
Отверстия в деталях, куда входят 20-миллиметровые круглые профили, рассчитаны на плотную посадку, поэтому в некоторых случаях для их подгонки приходится использовать рашпиль или наждачную бумагу.
Теперь для правильной сборки этих деталей нам нужно сделать отверстия в круглых профилях в точных местах. Для этого сначала наметим прямую линию на профиле.
Далее мы можем вставить профиль в 3D-печатную деталь с линией разметки, проходящей через отверстие детали. Затем мы можем отметить места, где нам нужно просверлить профиль с обеих сторон этой детали.
На противоположной стороне профиля нам необходимо повторить ту же процедуру.
Я просверлил отверстия сверлом 2,5 мм, а затем с помощью болта М3 сделал в профиле резьбу, которую мы будем использовать для стягивания деталей.
Алюминиевый профиль мягче болта, поэтому резьбу легко сделать самим болтом. Соблюдение этого метода сверления отверстий очень важно, чтобы в конце все детали располагались так, как им следует, относительно друг друга.
Для шарнира тележки мы также используем два подшипника и болт М8.
После завершения сборки подвески коромысла-тележки мы можем продолжить сборку шарниров рулевого колеса. Шарнир рулевого колеса состоит из двух частей, соединенных вместе болтами.
Для фактического соединения или соединения между частью крепления сервопривода и частью крепления двигателя постоянного тока мы используем два подшипника и болт М6.
На верхней стороне или головке болта нам нужно прикрепить рог сервопривода, и мы сделаем это с помощью этой напечатанной на 3D-принтере муфты и нескольких болтов М3.
Муфта имеет шестигранный паз, через который серводвижение будет передаваться на болт. С нижней стороны мы можем прикрутить другую часть соединения.
Закрепляем это соединение гайкой М6. Это завершает соединение рулевого колеса, хотя позже я пойму, что на самом деле нам нужно добавить еще одну гайку М6 внизу и затянуть ее с другой гайкой.
Это необходимо сделать, поскольку движение от сервопривода передается на часть крепления двигателя постоянного тока с помощью самой гайки, и если ее не затянуть другой гайкой, то все соединение развинтится.
Та же процедура применяется к другому угловому соединению. Мы знаем, что все правильно подключили, если кладем эту сборку на ровную поверхность и все три крепления двигателя лежат ровно или все они параллельны друг другу.
Конечно, мы используем тот же метод для сборки другой стороны. Однако, мы можем отметить, что хотя некоторые части выглядят идентичными, они не являются теми же самыми частями, а фактически являются зеркальными.
Далее нам нужно вставить эти подузлы в валы коромысла на базовой раме или шасси. Но прежде чем мы это сделаем, нам нужно вставить в вал несколько резьбовых латунных вставок.
Используя паяльник, мы можем легко вставить их на место, и таким образом мы получаем хорошие и надежные резьбовые отверстия для крепления узла подвески. Для этого нам понадобятся четыре болта М4.
После того, как мы установим их с обеих сторон, мы можем заметить, что шасси падает или свободно вращается. Так что, на самом деле, нам чего-то не хватает для того, чтобы подвеска коромысла-тележки работала правильно, и это дифференциал.
С дифференциалом два коромысла соединены друг с другом и шасси марсохода. При такой конфигурации, когда одна сторона вращается, другая вращается в противоположном направлении, таким образом обеспечивая примерно равный контакт колес.
Шасси будет иметь средний угол наклона обоих коромысел.
Вот все детали, необходимые для сборки дифференциала.
Так как дифференциальная балка довольно длинная, я сделал ее из трех частей, скрепленных болтами, чтобы мы могли печатать их на 3D-принтерах даже меньшего размера. Дифференциальная балка будет вращаться в середине шасси с помощью соединения, сделанного из двух подшипников и болта M8.
Для соединения дифференциала с коромыслом нам понадобится шаровой шарнир тяги. Я использую шаровой шарнир тяги M8, а также нам понадобится стержень с резьбой M8 длиной 50 мм. Стержень с резьбой входит в деталь, напечатанную на 3D-принтере, с одной стороны которой есть гайка M8, а с другой стороны он входит в шаровой шарнир тяги.
Здесь нам нужно отрегулировать расстояние между 3D-печатной тягой дифференциала и концом тяги, которое должно быть около 20 мм, чтобы шасси оставалось горизонтальным. Для соединения тяги дифференциала с коромыслом мы используем два подшипника и болт М5.
Повторяем эту процедуру и для другой стороны, и на этом наша подвеска коромысла-тележки завершена. Когда одна сторона поднимается, другая опускается и наоборот.
Это обеспечивает всем колесам постоянный контакт с землей. Шасси проходит только половину хода ноги, или шасси имеет средний угол наклона обоих качалок.
Сборка двигателей для марсохода
Хорошо, теперь мы можем перейти к установке двигателей постоянного тока. Двигатели, которые я использую, имеют диаметр 37 мм, работают при напряжении 12 В и имеют редуктор с выходной мощностью 50 об/мин.
Хотя позже я понял, что 50 об/мин — это слишком много для этого марсохода, поэтому я бы посоветовал выбрать версии на 20 или 10 об/мин.
Для крепления колес к двигателям я сделал вот такие муфты.
Здесь нам нужно установить резьбовые вставки M3, которые будут использоваться для крепления муфты к валу, а также гайки M4 для крепления колеса к муфте. При установке гаек нам следует также добавить немного клея, чтобы они надежно держались на месте, или использовать вместо них резьбовые вставки.
Далее мы можем прикрепить колеса. Колеса состоят из двух частей. Одна — это колесо, которое я напечатал гибкой нитью, но это не обязательно, а другая — обод, напечатанный обычным PLA.
Обод имеет пазы, которые вставляются в колесо, и таким образом мощность от двигателя передается колесу. Мы можем добавить несколько капель клея в пазы, чтобы они были более надежными. Наконец, мы можем прикрепить колеса к муфтам вала или двигателям постоянного тока с помощью 4 болтов M4.
Хорошо, теперь мы можем установить сервоприводы рулевого управления. Я использую цифровые сервоприводы с высоким крутящим моментом 25 кгсм и рабочим напряжением от 4,8 до 6,8 В. Для закрепления сервоприводов на месте мы используем четыре болта M3, которые входят в резьбовые вставки M3 в детали крепления сервопривода, напечатанной на 3D-принтере.
Сборка блока камеры
Далее мы можем собрать блок камеры. Для панорамирования камеры я решил использовать шаговый двигатель NEMA 17, но вы можете заменить его любым другим типом двигателя.
Движение двигателя передается в верхнюю часть с помощью резьбового стержня M5, который соединен с двигателем с помощью 3D-печатной муфты вала, а с другой стороны мы используем подшипник и две гайки, чтобы закрепить резьбовой стержень на подвижном элементе. Для наклона камеры я использую сервопривод, который такой же, как тот, который мы используем для рулевых колес.
Многие из деталей здесь, на блоке камеры, не функциональны и присутствуют только для того, чтобы соответствовать внешнему виду настоящего марсохода. Для сборки этих деталей нам понадобятся различные болты М3 и несколько резьбовых вставок.
Однако я также установлю здесь настоящую FPV-камеру. Я сделал для нее специальный держатель, чтобы я мог закрепить ее на корпусе блока камеры. Камера легко доступна сверху, и мы закрываем ее защелкивающейся крышкой. Вот окончательный вид блока камеры.
Я установил весь этот узел камеры в переднем правом углу шасси.
На этом этапе мы можем продолжить либо сборку остальных 3D-печатных деталей, которые на самом деле не функциональны, а только соответствуют внешнему виду настоящего марсохода, либо соединить электронные компоненты и заставить марсоход работать. Я решил сначала собрать все 3D-печатные детали, а затем заняться электроникой.
Сборка остальной части марсохода
Как я уже сказал, следующие детали предназначены только для соответствия внешнему виду марсохода, поэтому я не буду вдаваться в подробности, как их собрать. Вы можете увидеть, как все должно быть соединено из 3D-модели.
На самом деле я приложил немало усилий, проектируя эти детали, уделяя внимание деталям, чтобы все выглядело хорошо.
Эти детали также довольно большие, и их 3D-печать занимает некоторое время.
Последние две верхние панели в средней части марсохода сконструированы так, чтобы их можно было защелкнуть в марсоходе.
Фактически они будут выполнять функцию кожуха, который можно будет легко снять, поскольку в этой области будут располагаться электронные компоненты.
Держатель электронных компонентов изготовлен из двух деталей, напечатанных на 3D-принтере, скрепленных болтами, и крепится к нижней раме шасси.
Электроника
Хорошо, теперь мы можем продолжить с электроникой. Сначала нам нужно измерить, сколько проводов нам нужно для каждого двигателя. Я припаял провода прямо к двигателям, так как у меня не было соответствующих разъемов для двигателей. Я использовал термоусадочную трубку для изоляции разъемов.
С помощью стяжек мы можем направлять и содержать провода в чистоте.
Для сервомоторов мы можем использовать сервоудлинители, чтобы протянуть провода к отсеку электроники. В части крепления электроники есть пазы, через которые мы можем пропустить провода, чтобы добраться до середины марсохода.
В целом, я считаю, что проводка получилась довольно аккуратной, провода проходят за видимыми частями.
Схема самодельного марсохода
Давайте теперь взглянем на принципиальную схему этого марсохода и посмотрим, как все должно быть подключено.
Для управления шестью двигателями постоянного тока мы используем шесть драйверов двигателей постоянного тока DRV8871, которые поддерживают управление ШИМ и пиковый ток до 3,6 А. Рабочее напряжение двигателей постоянного тока составляет 12 В, номинальный ток — 1 А, ток остановки — 3 А. Для питания марсохода я использую аккумулятор 3S LiPo, который обеспечивает около 12 В.
С другой стороны, сервоприводам нужно от 4,8 до 6,8 В, поэтому нам нужен преобразователь постоянного тока, который преобразует 12 В в 6 В. Преобразователь должен быть способен обрабатывать ток около 8 А, так как сервоприводы, которые мы используем, довольно мощные и имеют ток останова около 2 А. Для управления шаговым двигателем блока камеры мы можем использовать шаговый драйвер A4988 или DR8825. Используя два резистора, мы можем сделать простой делитель напряжения, через который мы можем контролировать напряжение батареи.
Питание радиоуправляемого приемника осуществляется от 6 Вольт, поступающих от понижающего преобразователя, а FPV-камера и ее видеопередатчик питаются от 12 В от аккумулятора.
Необходимые компоненты
- Плата Arduino Mega 2560 (купить на AliExpress).
- Шаговый двигатель NEMA 17 (купить на AliExpress).
- Двигатель постоянного тока 12 В 37 мм.
- Цифровой сервопривод 25 кг.
- Драйвер двигателя постоянного тока DRV8871.
- Модуль драйвера шагового двигателя A4988 (купить на AliExpress).
- DC-DC понижающий преобразователь.
- 3S LiPo аккумулятор.
- Разъем XT60.
- Передатчик FLYSKY RC.
- FPV-камера и видеопередатчик.
- FPV-приемник по вашему выбору.
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Печатная плата для проекта
Чтобы организовать размещение электронных компонентов, я разработал специальную печатную плату для этого самодельного марсохода.
Эта печатная плата фактически будет выступать в качестве шилда Arduino MEGA, поскольку мы сможем напрямую подключить ее поверх платы Arduino MEGA. В дополнение к драйверам двигателей я включил регулятор напряжения 3,3 В и выделенное соединение NRF24L01 на случай, если вы захотите управлять марсоходом с помощью этого модуля, а также соединения для датчика DHT22, компаса, I2C, последовательной связи, соединений 12 В, 5 В, 3,3 В и GND. На самом деле, я подготовил эту печатную плату к будущему для модернизации функций марсохода.
Здесь вы можете скачать файл Gerber для этой самодельной печатной платы марсохода: печатная плата для самодельного марсохода.
Вы можете заказать изготовление этой печатной платы в любом месте, в котором вы привыкли это делать, автор данного проекта заказывал ее изготовление на сервисе PCBWay. Качество печатной платы оказалось отличное, и все точно такое же, как в проекте.
Сборка печатной платы довольно проста, так как все промаркировано. Я начал с пайки штыревых разъемов в нижней части печатной платы для подключения Arduino MEGA, а затем продолжил с верхней стороны. На самом деле я использовал штыревые разъемы для всех соединений, потому что это дает гибкость для внесения изменений, если что-то работает неправильно. Я не припаивал регулятор напряжения 3,3 В, а также некоторые свободные штыревые разъемы Arduino, так как я все равно не собирался их сейчас использовать.
Закончив сборку печатной платы, я закрепил плату Arduino на креплении электроники с помощью двух болтов и добавил к ней печатную плату.
Затем я подключил каждый двигатель к их драйверам и установил их на место в печатной плате. Сервоприводы подключаются к соответствующим выводам сервопривода, как и шаговый драйвер, для которого я использовал одну перемычку для выбора разрешения шага 1/8.
Для радиосвязи я использую передатчик и приемник FLYSKY RC, которые действительно доступны по цене и отлично работают. Их обзор можно прочитать в этой статье.
Для подключения приемника к Arduino мы можем использовать сервоудлинители, так как нам нужно три провода: VCC, GND и сигнальный контакт. Приемник взаимодействует с Arduino через I-BUS и последовательный порт. Если мы хотим отправлять данные обратно с приемника на передатчик, в нашем случае для контроля напряжения батареи, нам также нужно подключить датчик I-BUS приемника к другому последовательному порту Arduino.
Понижающий преобразователь закреплен на месте с помощью двух болтов, а для фиксации LiPo-аккумулятора я использую две резинки, чтобы можно было легко снять аккумулятор для зарядки.
Выключатель питания находится на задней правой панели марсохода. Я использовал провода калибра 20 для этих соединений, так как ток, протекающий через них, может достигать нескольких ампер, когда марсоход полностью включен. Обязательно дважды проверьте соединения с этими проводами, потому что если вы подключите что-то неправильно, вы можете что-то запустить.
Наконец, мы можем подключить FPV-камеру к источнику питания 12 В и подключить провод видеосигнала к видеопередатчику, который также должен питаться от 12 В. На этом мы закончили с электроникой.
Мы можем вернуть на место панели крышки, и мы закончили с этим самодельным марсоходом. На самом деле, мы почти закончили, так как нам нужно дать жизнь этой машине сейчас, или запрограммировать Arduino.
Код Arduino для самодельного марсохода
Здесь вы можете скачать код Arduino для этого проекта самодельного марсохода: самодельный марсоход - код Arduino.
Обзор кода
Итак, используя библиотеку IBusBM мы считываем входящие данные с RC-передатчика.
1 2 3 4 5 6 7 |
// Reading the data comming from the RC Transmitter IBus.loop(); ch0 = IBus.readChannel(0); ch1 = IBus.readChannel(1); ch2 = IBus.readChannel(2); ch3 = IBus.readChannel(3); ch6 = IBus.readChannel(6); |
Затем мы преобразуем эти значения в радиус поворота вправо, радиус поворота влево и скорость марсохода от 0 до 100%.
1 2 3 4 5 6 7 8 9 10 11 |
// Convertign the incoming data // Steering right if (ch0 > 1515) { r = map(ch0, 1515, 2000, 1400, 600); // turining radius from 1400mm to 600mm } // Steering left else if (ch0 < 1485) { r = map(ch0, 1485, 1000, 1400, 600); // turining radius from 600mm to 1400mm } // Rover speed in % from 0 to 100 s = map(ch2, 1000, 2000, 0, 100); // rover speed from 0% to 100% |
Мы используем значение радиуса поворота «r» для расчета углов поворота рулевых колес, а также скорости вращения колес.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
void calculateMotorsSpeed() { // if no steering, all wheels speed is the same - straight move if (ch0 > 1485 && ch0 < 1515) { speed1 = speed2 = speed3 = s; } // when steering, wheels speed depend on the turning radius value else { // Outer wheels, furthest wheels from turning point, have max speed // Due to the rover geometry, all three outer wheels should rotate almost with the same speed. They differe only 1% so we asume they are the same. speed1 = s; // Inner front and back wheels are closer to the turing point and have lower speeds compared to the outer speeds speed2 = s * sqrt(pow(d3, 2) + pow((r - d1), 2)) / (r + d4); // Inner middle wheel is closest to the turning point, has the lowest speed speed3 = s * (r - d4) / (r + d4); } // speed value from 0 to 100% to PWM value from 0 to 255 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() { // Calculate the angle for each servo for the input turning radius "r" 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, которая обеспечивает более плавные движения сервоприводов.
1 2 3 4 5 |
// Servo motors servoW1.startEaseTo(97 - thetaOuterFront); servoW3.startEaseTo(97 + thetaOuterBack); servoW4.startEaseTo(94 - thetaInnerFront); servoW6.startEaseTo(96 + thetaInnerBack); |
Для управления двигателями постоянного тока используется функция analogWrite(), которая фактически посылает ШИМ-сигнал на драйверы двигателей постоянного тока.
1 2 3 |
// Motor Wheel 1 - Left Front analogWrite(motorW1_IN1, speed2PWM); // PWM value digitalWrite(motorW1_IN2, LOW); // Forward |
В целом, код не такой уж и сложный, так как сам марсоход не имеет сложных функций. Однако я планирую в будущих видео добавить больше функций к этому марсоходу, например, GPS-навигацию, различные датчики, роботизированную руку, механизм сбора почвы и так далее.