На хабре много раз были различные кухонные боты и мне, как инженеру, тоже всегда хотелось сделать своего. Причем, я видел его обязательно с управляемой камерой и манипулятором. Решение строить не просто руку на колесах, а модель марсианской научной лаборатории, было каким-то само собой разумеющимся. Что может быть лучше, чем сделать модель реального ровера с той же функциональностью, какая была нужна мне?

В итоге после трех лет очень неспешной работы, кучи переделок и граблей я получил вот это:



При постройки модели я не преследовал цели сделать точную копию реального марсохода. Я рисовал его исходя из того, какая элементная база мне доступна и довольствовался отдаленным сходством с оригиналом. Основным мотивом для меня было самообучение. Неожиданным, побочным и очень приятным для меня, стал эффект популяризации миссии Curiosity и 3D-печати. К своему удивлению, я обнаружил, что многие вокруг меня вообще ничего не слышали ни о марсоходе, ни о том, что 3D-печать уже достаточно доступная технология.

Аппаратное обеспечение


Начну с того, что было для меня наиболее интересно — с электроники. Можно было бы сказать, что он сделан на Arduino, но я с этим не согласен. Чуть позже объясню, почему я так считаю.

Для постройки модели я использовал следующие готовые части:
  1. Плата LinkIt One, как основной мозг ровера (79$)
  2. Две платы на микроконтроллере Atmega8 EduBoard, которые я использую для обучения программирования микроконтроллеров. В модели одна из них использована для пульта, а вторая для управления сервоприводами (21$)
  3. Четыре сервопривода Hitec HS-485 (58$)
  4. Один сервопривод MG-90S с металлическим редуктором (4,5$)
  5. Шесть редукторных двигателей постоянного тока, 77 об/мин (48$)
  6. WiFi-роутер TP-LINK TL-MR3020 (26,7$)
  7. WEB-камера Logitec C210 (больше не производят) (около 20$)
  8. Три стабилизатора напряжения 5В, 3А (17,2$)
  9. Два LiPo-аккумулятора Turnigy, 3S, 3000mAh (26,4$)
  10. Два самодельных драйвера двигателей (около 7$)

Если так грубо посчитать, то выходит чуть больше 300$. Но надо понимать, что эта сумма не учитывает кучу мелочевки, пробы, ошибки и т.д.

Ниже я нарисовал условную структурную схему электроники всей системы. Красным цветом я обозначил линии питания, а синим линии передачи данных.



Пульт управления подключается к ПК через USB. Компьютер, в свою очередь, подключен к LinkIt One через Bluetooth и транслирует команды оператора. LinkIt One пересчитывает эти команды в сигналы управления двигателями и светодиодами, которыми она управляет самостоятельно через драйверы и транзисторы.

К сожалению, сама по себе LinkIt One может управлять только двумя сервоприводами. Поэтому к LinkIt One через UART подключена плата на микроконтроллере Atmega8. Она принимает требуемые углы и формирует точные сигналы для управления пятью сервоприводами.

Роутер в этой схеме стоит практически отдельно. На него подается только питание и он начинает передавать картинку с камеры.

Питается ровер от аккумулятора. Напрямую напряжение аккумулятора подается только на драйверы двигателей. Для остальных модулей схемы используются три пятивольтовых преобразователя, а именно для роутера, логики и сервоприводов.

Вся электроника, кроме роутера с камерой, спрятана внутри «тела» модели марсохода. Может показаться, что там небольшой беспорядок, но на самом деле, если собрать все провода в жгуты (а к этому все готово), то станет гораздо аккуратней. Просто пока я не тороплюсь полностью завершать работы над моделью.



Кстати, я сделал небольшую коммутационную плату, через которую LinkIt One подключается к EduBoard. Также на ней разведено питание, сигнальные разъемы и ключи для управления подсветкой.
Исходники я выкладывать не планирую. Вряд ли кто-то захочет повторить все это один в один. Если будут вопросы, то я с радостью расскажу больше или перешлю интересующие материалы.

Пульт управления


Пульт собран на основе той же EduBoard, шилда к ней и двух джойстиков.

На шилде собраны все элементы управления, а именно два переменных резистора, две кнопки и два тумблера. К нему же подключены оба джойстика. Сигналы со всех этих устройств обрабатываются шестью каналами АЦП микроконтроллера, двумя цифровыми входами и двумя входами внешних прерываний. Полученные данные нормируются, оборачиваются протоколом и, через FT232RL, отправляются компьютеру с частотой 10Гц.

Корпус пульта напечатан на 3D-принтере:



Кузов марсохода


За эти три года я успел два раза его переделать. Изначально он был сделан из стеклотекстолита, но механика в нем была продумана очень плохо. Затем я сделал его из оргстекла. Он даже работал, но я ни кому его не стал показывать, так как выглядел он просто ужасно.

Переломным моментом в работе над проектом стало приобретение радиотехническим колледжем, в котором я немного преподаю, 3D-принтера PrintBox One. В итоге, большинство деталей для него напечатано на 3D-принтере. Кузов сделан из оргстекла, а крышка «головы» из стеклотекстолита.



Еще пара фотографий




Я чаще всего рисую в SketchUp. Только чертежи колес, которые немного сложнее, подготовлены в SolidWorks моим другом, профессиональным конструктором. Файлы для резки оргстекла сделаны в NanoCad. Перед тем, как начинать изготовление марсохода, я сделал его виртуальную модель. Все файлы проекта для 3D-печати и резки оргстекла, выложены на thingiverse.com. Там довольно много полезных кусочков, которые можно применить и в других проектах.



Получилось, на мой взгляд достаточно неплохо. Он сильно диспропорционален, но это даже добавляет ему какого-то шарма. Жена вообще говорит, что он похож на Валли.

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

Программное обеспечение


Вот тут речь пойдет о том, почему я не считаю, что это Arduino. Всего для модели марсохода используется четыре программы.

Первая, написанная на C, исполняется на пульте. О ее функциях я уже писал выше.

Вторая программа для ПК. Она написана на Python. Изначально планировалось, что компьютер будет принимать команды, пересчитывать их и отправлять роверу в обработанном виде. В итоге всеми расчетами занимается LinkIt One, а скрипт на Python'е только перанаправляет байты, принятые от пульта Bluetooth-устройству.

LinkIt One программируется на C++. Она принимает пакеты с ПК (которые доходят ровно в том же виде, какими их формирует пульт), сама управляет двигателями и подсветкой, а также пересчитывает углы сервоприводов и отправляет их в контроллер сервоприводов. Команды для двигателей прогоняются через пропорциональный регулятор, чтобы обеспечить плавность управления и исключить возможность резкого изменения направления вращения двигателей.

Четвертая программа, написанная на С, управляет сервоприводами. Она принимает команды из UART и по алгоритму, который я уже описывал, формирует управляющие импульсы для сервоприводов.

Все это программное обеспечение позволяет управлять им плавно без рывков. Немного потренировавшись, я уверенно собираю предметы с пола. Он специально сделан немного «заторможенным» и инерционным. Если бы сервоприводы дергались с максимальной скоростью, выглядело бы это гораздо хуже.

Как вы могли заметить, я использую аппаратную совместимость с ардуино и их бутлоадеры, но код для проекта написан не на Processing/Wiring. Поэтому я не считаю, что это поделка на ардуино.

Исходниками тоже могу поделиться по запросу. Только там надо чистить много харкода и я планирую дорабатывать математику манипулятора.

Передача видео


На роутер установлена прошивка OpenWrt. При включении роутер создает точку доступа и поднимает веб-сервер со страницей, транслирующей видео.

На моей прошивке самое оптимальное качество получается при частоте следования кадров 5 раз в секунду в формате QCIF (176х144). Это довольно мало, но для езды по квартире достаточно. Можно, кончено, повысить частоту или разрешение, но тогда начинают проскакивать битые кадры.

Вот как выглядит в оригинальном разрешении картинка с головы:



Видео работы


Вот так моя модель марсохода выглядит и работает на данный момент:



Чуть более ранее видео для thingiverse:



И еще одно. С неработающими сервами, но с преодолением препятствий:



Вместо заключения


Конечно, в первую очередь я делал все этого для ознакомления с многими технологиями, которые я не использовал по работе. Особенно приятно, что модель получилась интересна также для любителей космоса и 3D-печати.

За время работы над проектом накопилась куча разрозненной информации и я могу и хочу поделиться некоторыми своими изысканиями на хабре. Пользуясь случаем, задам пару вопросов о том, насколько это может быть интересно.
Я могу оформить пульт управления в виде отдельного проекта со всеми исходниками и новым корпусом. Стоит ли этим заниматься?

Проголосовало 505 человек. Воздержался 121 человек.

Мной накоплен существенный опыт по изготовлению разных корпусов, механики, собрано куча дурацких ошибок и т.д. Описать?

Проголосовало 565 человек. Воздержалось 87 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (35)


  1. radiolok
    10.06.2015 10:20

    Это просто превосходно!

    Но рекомендую поработать над главными приводами и обеспечить регулирование скорости. У вас марсход отзывается на левый джойстик со страшным перерегулированием. Сделать это можно с помощью обратной связи по скорости, применив соответствующий электродвигатель с энкодером, либо с помощью упреждающей обратной связи по току.
    Тогда можно будет обеспечить плавные повороты и ползучие скорости.


    1. ssg1712 Автор
      10.06.2015 10:38

      Я на сам так настроил регулятор. Проблема еще в том, что скважность ШИМ нелинейно связана со скоростью для низких оборотов. Датчик скорости определенно не помешал бы.


  1. aitras
    10.06.2015 10:24
    +19

    А еще можно реализовать режим с 20-минутной задержкой передачи команд :)


    1. ZimniY
      10.06.2015 11:18

      А классная идея. И управлять из соседней комнаты, не подсматривая.


      1. tegArt
        10.06.2015 11:27
        +2

        Закинуть на чердак (или крышу, тогда еще можно солнечные батареи приделать) для исследования образцов пыли и поиска признаков жизни.


      1. aitras
        10.06.2015 12:27

        Только максимальную скорость надо сильно уменьшить. Все же в комнате не так много места как на Марсе.


    1. DjSapsan
      11.06.2015 00:25

      как раз хотел написать =)
      В общем у меня такая идея — сделать робота полуавтономным, чтобы сам мог доехать до нужной точки, но если не может, то нужно управлять с 20-минутной задержкой


  1. jaiprakash
    10.06.2015 10:25

    Как в SketchUp с параметризацией?


    1. ssg1712 Автор
      10.06.2015 10:41

      Из коробки он такого не умеет, но, вроде как, можно плагинчиков поставить


      1. acos
        10.06.2015 13:58

        А какими плагинами сами пользуетесь? У меня со SketcUp что-то дружба не сложилась. Но есть ощущение, что я просто не умею его готовить


        1. ssg1712 Автор
          10.06.2015 14:21

          Я сам никакими не пользуюсь. Все нарисовано в чистой бесплатной версией. Только для экспорта в SketchUp стоит плагин


  1. rstepanov
    10.06.2015 11:34
    +2

    Неплохая р/у игрушка получилась, а нет идей сделать из нее робота с самостоятельным принятием решений?


    1. ssg1712 Автор
      10.06.2015 14:36

      Он может быть платформой для чего-то большего. Тут только фантазией все ограничено. Пока у меня таких планов нет.


  1. Roon_Boh
    10.06.2015 12:59

    Привет, частично прочитал твою статью, посмотрел фото материал.
    Круто! Возник лишь вопрос о том почему у тебя как то кусками технологии переплитаются? Почему бы не сделать упор на более дешевую технологию резки корпуса из акрила, и только механизмы которые невозможно изготовить этим способом, изготавливать на 3D печати?..
    Или все таки бюджет?


    1. ssg1712 Автор
      10.06.2015 14:56

      Это все издержки затянутости работы над проектом. Решил для себя впредь делать все как можно быстрее и не отвлекаясь от первоначального проекта. Хотя, в целом, он сделан примерно так, как вы и описали.


  1. GEOgraf
    10.06.2015 13:30

    Я думаю у вас ошибка в схеме. На двигатели нет смысла посылать данные)


    1. ssg1712 Автор
      10.06.2015 14:43

      Тут вопрос скорее философский. Я долго думал, как будет точнее нарисовать и принял решение в контексте моего проекта это скорее сигнал.


  1. dlinyj
    10.06.2015 13:33
    +1

    Нереально сложный проект. Снимаю шляпу за отличный подход и усидчивость довести его до конца. Это просто восхитительно. Не уверен, что хватило бы пороху. Сколько времени заняло от идеи до конечной реализации?

    Моё большое почтение!


    1. ssg1712 Автор
      10.06.2015 14:51
      +1

      Спасибо. Он скорее не сложный, а объемный и кропотливый. Мне действительно трудно было сохранить мотивацию. Иногда я забрасывал работу на пол года, но всегда возвращался. С самого момента высадки я и принял решение. Сегодня как-раз тысячный сол)


  1. acos
    10.06.2015 14:09
    +1

    Отличная работа и отличная статья! По поводу езды по ламинату: можно марсоходу покрышки изготовить


    1. ssg1712 Автор
      10.06.2015 15:23

      Про литье в силикон слышал, но пока не пробовал. У нас в хакспэйсе даже презентацию делали по этой теме (только я ее пропустил). Еще мне говорили про какую-то резиновую краску.


  1. HWman
    10.06.2015 14:52

    Покажите пожалуйста как ездит на неровной поверхности.


    1. ssg1712 Автор
      10.06.2015 15:09

      Пока не планирую. Подписывайтесь на канал, рано или поздно появится видео.


      1. HWman
        10.06.2015 21:03

        Если честно я уже на столько каналов подписан что за пару дней собирается больше 100 видео непросмотренных, попросту нету времени смотреть.


        1. ssg1712 Автор
          11.06.2015 08:43
          +3

          Хорошо, я постараюсь не забыть. На thingiverse есть проект, в котором автор достаточно точно повторил подвеску Curiosity.


  1. Alexeyslav
    10.06.2015 16:51

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


    1. ssg1712 Автор
      11.06.2015 08:34
      +1

      Ага) После вашего комментария всерьез задумался о том, чтобы научить его кормить кошку.


      1. Alexeyslav
        11.06.2015 09:32
        +1

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


        1. Myosotis
          11.06.2015 12:05

          Сделать док-станцию, как у роботов-пылесосов.


  1. DanNsk
    10.06.2015 20:24

    А зачем bluetooth? почему просто мегу не воткнуть в роутер через переходник или gpio

    Шины наверное из ninjaflex печатнуть можно.


    1. ssg1712 Автор
      11.06.2015 08:32

      Изначально я рассчитывал, что у меня будет обычная FPV-система с камерой, передатчиком, приемником и т.д. То есть для работы камеры было отведены исключительно проводочки на питание. К тому моменту, как я принял решил все-таки использовать перепрошитый роутер, часть с Bluetooth уже была почти готова. Кроме того, в перспективе я планирую перевести пульт на работу через Bluetooth напрямую с ровером. Это позволит мне запускать модель без ноутбука.


      1. Alexeyslav
        11.06.2015 09:30

        А почему тогда не WiFi?


        1. ssg1712 Автор
          11.06.2015 09:46

          Да. Можно и пульт через WiFi подключить


  1. PhpRu
    17.06.2015 18:49

    А можете рассказать как устроен манипулятор, который колесо захватывал на видео? Он тоже напечатан? Есть ли в нем металлические детали?


    1. ssg1712 Автор
      17.06.2015 20:57

      Да. Я готов ответить на ваши вопросы. Там два двигателя и параллельный шарнир. В узлах два подшипника высотой 3мм, диаметром 8мм, на вал .3мм. Клешня сделана через тягу. Распечатан на 3D-принтере (модель тут)