Менеджер очень среднего звена
0,1
рейтинг
2 сентября 2015 в 10:46

Робот-газонокосилка. От чермета до прототипа из песочницы

Это краткая история о сборке робота-газонокосилки из подручных средств обычным менеджером, а так же о становлении ГИКа, отрицании сингулярности, согласии с его величеством Илоном Маском и борьбы человека с машинами. Пристегните ремни, мы направляемся в атмосферу легкой иронии и непринужденного описания разработки робота-газонокосилки от черного металла до прототипа. Пытливый читатель, добро пожаловать под кат!



Вместо предисловия:


Здравствуйте! Меня зовут Вячеслав Голицын, и я ГИК! Это началось все еще в школе, меня на это подсадили друзья из физмат класса. На переменах, украдкой в туалете и за углом школы мы обсуждали новые гаджеты и схемы для жучков-радиопередатчиков. Я думал просто побалуюсь, но затем я уже не мог соскочить. Электронику, которую я собирался починить, в доме уже никогда никто работающей не видел, во время очередного феерического разгулья мною жестоко был убит магнитофон «Электроника 302». Меня наказали, но я не смог полностью отказаться от своей пагубной привычки, так я стал тайным гиком, но даже в радио-клубе меня за своего не приняли, да, в клубах мало что заметно, из-за пафоса все вверх дном. Когда я обменял свой новый снегокат на учебник А.Марченко и конструктор автомобильного приемника, я понял, что я качусь на ДНО! Меня стали узнавать в лицо на радио-рынках и в магазинах электроники, я читал «Технику молодежи» и посредственные форумы по ночам на dialup'e. Я начал носить очки с простыми стеклами, т.к. меня и так все называли «очкарик». Даже родной отец как-то поставил мне 3 в одноклассниках. Окончательно сорвался когда меня бросила девушка, тут меня понесло… я купил новую паяльную станцию, а мой аккаунт на Алиэкспресс начал требовать крови все большую часть моей скромной зарплаты.

Потом жизнь как-то наладилась… семья, дети, и вот уже несколько лет я в завязке, но каждый день читаю Хабр (теперь Гиктаймс). Я менеджер очень среднего звена, я как все — работаю в офисе. Технического образования у меня, увы, нет, но когда я читаю обзор нового гаджета, мини-компьютера или платы автоматизации в сознании уже формируется огромное количество идей где бы это можно было применить (автоматизацию офисного туалета не предлагать). После недолгого полета фантазии обычно следует заказ и томительное ожидание забугорного чуда чудесного. За время пока долгожданный груз проходит все круги ада сортировочных центров Почты РФ, романтика понемногу из нового образчика современного гения технической мысли улетучивается. Так было и с raspberry pi, arduino, небольшой коробочки с датчиками и проводами. Но тут появилась боль. Имя ей — дача, точнее газон на даче.

Газон косить — не дрова рубить. И не чай пить, и не квесты проходить, и не за пивом ходить. Ну Вы поняли...


Вы спросите: почему газонокосилка, лето ведь заканчивается, а зимы у нас долгие? Не зря ведь в народе говорят: «The winter is coming...». Возможно, ответ — банальная лень или любознательность, возможно — все вместе, но поддерживать газон в красивом виде — задача не из простых даже при скромных размерах угодий, кои и представлены у вашего покорного слуги. Я решил совместить активное желание познания нового + raspberry pi model B + arduino + чермет + свободную волю, героизм, профессионализм, капитализм, пофигизм и катаклизм.

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











Тележка приводится в движение двумя двигателями с редукторами от стеклоочистителя ВАЗ-2108 (импортозамещение в действии). У двигателей не две щетки на коллекторе, как мне было привычно, а три. Я так и не разобрался для чего третья щетка, но тот факт, что один из проводов подключен к корпусу, а двигатели должны были двигаться в разных направлениях для движения вперед, заставил меня изолировать один из двигателей от рамы.





С двигателями сложная история: в попытке понять устройство двигателя, я разобрал один из них — это уже было предвестником того, что двигатель со всеми своими лошадиными силами отправится в кхалосар великого табунщика навечно. В общем, «кто сому глотает — проблем не знает», купил новый двигатель и продолжил велосипедить и быдлокодить.

Источником питания служит аккумулятор на 12В. Ардуино получает питание по USB от малины. Raspberry подключено к USB-свитчу с отдельным питанием, питание на него подается с того же аккумулятора 12в через две параллельные L7805 (пока длится долгое путешествие импульсного DC-DC преобразователя).

Колеса от тележки куплены на строительном рынке. Двигатели были подключены через Monster Motor Shield, но по доброй традиции эта плата приказала долго жить после подсоединения питания к контактам вывода. Вангую холивар в комментариях по поводу того, что с кривыми руками и не стоит начинать ничего делать, но что если сердце просит? В общем сомы грамм и нету драм: оформляем заказ на такую же плату, а пока обойдемся двумя реле, т.к. двигатели на первых парах могут крутиться только в одну сторону. А вообще, учитывая отсутствие необходимости в ШИМ, можно сделать H-мост на основании блока из 8 реле для Arduino. А как к этому относишься ты, дорогой читатель?

Управление двигателями и опрос датчиков (ультразвуковые датчики расстояния и энкодеры на колесах; в версии 1.1: инфракрасные датчики препятствий, кнопка в переднем бампере) осуществляется Arduino mega 2560.

Андурина (моя жена устойчиво продолжает ее так называть) подключена к raspberry pi через USB (Все скромное общение по Serial port). Также к малинке подключена веб-камера (в версии 1.0 для вывода картинки через Motion) и wi-fi свисток.

Логика работы системы. На дворе трава, на траве...


Учитывая, как сильно Илон Маск (да и не только он) предупреждал меня (я таки надеюсь, что ко мне он тоже обращался) об опасности Искусственного Интеллекта, я решил пока его (т.е. ИИ), т.е. ИИего не внедрять в сие изделие, дабы внезапно обрушившаяся сингулярность не перекосила все хвойники на моем участке. На Raspberry pi установлена raspbian OS, OpenCV(которая так правильно не завелась) и подняты вебсервер и FTP. Управление и настройка производятся через ssh. Тот код с OpenCV, который работает на ноуте, никак не хочет запускаться на малинке. После продолжительных танцев с бубном было принято решение оставить внедрение функционала, завязанного на OpenCV для версии 2.0.

На малинке работает Python 2.7 скрипт, который сохраняет в таблице MySQL данные о текущем положении косилки в системе координат (подробнее чуть позже). При обращении по IP косилки выводится матрица (система координат), разбитая на ячейки (для удобства 0.5X0.5 метра, так как это ширина скоса). В таблице разным цветом указаны текущие состояния ячеек.

1. Серый — неизвестно;
2. Зеленый — не скошенная трава;
3. Желтый — скошенные участки;
4. Красный — участки с препятствием;
5. Синий — участок, где находится косилка.



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

Кроме этого в версии 1.1 на странице должна быть кнопка аварийного отключения, ручка управления топливной заслонкой ДВС и кнопки ручного управления.

В каждом цикле работы raspbery:


  • ожидает от arduino информации о завершении предыдущего задания (если оно было);
  • получает через arduino информацию с дальномеров;
  • обрабатывает информацию с веб-камеры;
  • если есть возможность двигаться вперед, отправляет на arduino задание совершить движение на одну клетку (0,5м.) вперед. Если клетка впереди заблокирована (есть препятствие), отправляет задание совершить поворот на 90 градусов вправо.


Arduino в каждом цикле:


  • опрашивает ультразвуковые датчики расстояния;
  • Для версии 1.1:
    — опрашивает кнопку бампера(при столкновении с препятствием выключает реле питания ДВС);
    — опрашивает инфракрасные датчики препятствий.
  • проверяет состояние переменных с энкодеров о повороте колес;
  • (энкодеры работают на прерываниях, инкрементируют соответствующие переменные до получения нужных значений, из которых следует, что предыдущее задание выполнено.);
  • отправляет на raspbery информацию о завершении задания и данные о расстоянии до препятствий;
  • получает новое задание.


Краткое кривое видео



Полноценное видео

Планы на будущее, кроме озвученных ранее в тексте:


  • Использовать OpenCV для определения калибровочных меток. Т.е. некие метки( шары оранжевого цвета) размещаем на палочках рядом с низкими растениями. Метки красного цвета размещаем рядом со стартом или по границе периметра. В OpenCV маской делаем выборку по нужному цвету, затем ищем форму — круг. По размеру круга определяем расстояние до него и размещаем в базе информацию для соответствующего квадрата.
  • С помощью OpenCV проверять нижнюю часть кадра на средний цвет, который должен быть зеленый, чтобы исключить езду по тротуарам.
  • Подключить вторую веб-камеру и с помощью openCV создавать трехмерную карту препятствий.
  • Подключить к ДВС двигатель на 12V в качестве генератора, на косилке создать систему поддержки заряда батарей, чтобы исключить необходимость заряжать ее отдельно.
  • Возможно использовать «генератор» в качестве стартера.


Быдлокод в открытом доступе. Форкайте на здоровье. Буду только рад единомышленникам: https://yadi.sk/d/qObAm0deiogvP

Спасибо за внимание!
Голицын Вячеслав @webzuweb
карма
11,0
рейтинг 0,1
Менеджер очень среднего звена
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

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

  • +2
    Круто!
  • 0
    Такую же фигню хотел, только на гусеничном ходу и нож с электроприводом, а вот питание от генератора, который будет ездить на той же раме сверху. Следующим летом будет квест))
    • 0
      PS: Пардон, ошибся.
    • +2
      Готов даже к челенджу. Может до следующего лета сформируем уже небольшое сообщество. Готов предоставить поле для соревнования, поле с BBQ и печеньками.
      • +2
        Зрителем возьмете? :)
        • 0
          Уже можете зарегистрироваться.
  • +1
    В моторе стеклоочистителя 3 щётки, потому что у него две скорости. Ещё у него должен быть один провод, который замыкается или размыкается 1 раз за оборот, штатно он используется для остановки дворников в нижнем положении, а вы можете использовать для подсчёта расстояния, например.
    • 0
      Спасибо! По поводу использования встроенного «энкодера» думал, но один оборот колеса это 80см. Это слишком много. Пришлось двигатель просверлить и нарастить ось, на которую разместил оптический энкодер с 20 прорезями, т.е. один шаг это движение тележки на 4 см. вперед.
      За разъяснение со скоростью спасибо.
  • +2
    Вертикальное видео! Зачем Вы так?
    • 0
      На то оно и краткое кривое видео. Планирую для доработанной версии сделать уже полноценное видео с обзором работы, объездом препятствий.
  • +6
    Раз на улице обитает, то просится GPS. Чтобы лучше ориентировался на участке покоса. Так же можно держать несколько карт участков и автоматически определять нахождение в них.
    Еще установить купюроприемник и отправлять его на заработки к соседям.
    По объему денежных поступлений с участка регулировать частоту его посещения. «На участке №32 дали 500р — надо заезжать каждую неделю».
    Так же добавить датчик удара и микрофон. «На участке №57 два раза пнули ногой и громко ругались — больше туда не ездить».
    :)
    • 0
      Идея хорошая. Вы еще, наверное, хотели сказать про селфи-палку и размещение проекта на кикстартер..:) Если честно думал про установку магнитометра для определения севера, но думаю что помехи от работы двс и двух электродвигателей будут сильные. Про GPS идея отличная. Куда бы Вы его установили к малине или к ардуино?
      • 0
        просится к малине, вы же туда сливаете информацию с других датчиков.
        А магнитометр можно попробовать вынести максимально далеко, и учитывая коробку датчиков на попробовать он у вас уже есть.
        • +2
          По-моему нужно добавить еще одно колесо — колесного одометра, чтобы считать реальный пройденный путь, если ведущие колеса могут пробуксовывать, например, на скошенной траве, росе.
          • 0
            Тогда и переделать его из четырехколесного в трехколесный — пять колес многовато.
            • 0
              Для правильных результатов одометр должен волочиться за тележкой, тогда он не будет проскальзывать. Если измерять обороты колеса на которое приходится часть веса, то при некоторых условиях оно будет проскальзывать, например при повороте.
              • 0
                При перемещении колеса, на которых часть веса не приходит, будет проскальзывать в любом случае.
                А «ловить» просказывание ведущих колес при повороте тоже нужно.
                • НЛО прилетело и опубликовало эту надпись здесь
                  • 0
                    Датчик будет показывать обороты колеса, но не будет знать буксует авто или нет.
                    • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      GPS даст уж очень примерную точность.
      Понять на чьём участке аппарат можно, а где именно на нём — нет.

      Некоторые промышленные системы просят закрепить провод (кольцом) и по магнитному полю понимают с какой они стороны провода. Получается точно (сантиметры), но это надо «наземную» станцию и провод закладывать.
      Наверное, если знать участок, можно попробовать камерой определять свои координаты (если известны координаты маркеров, то можно посмотреть на них камерой и посчитать углы, а там уже понять свои координаты)
      • 0
        Проще поставить ультразвуковые излучатели в углах периметра, по ним вполне точно получится.
      • 0
        Можно попробовать RTK, если более менее открытая местность.
        • 0
          Если будет интерес готовы предоставить комплект базы и ровера ;)
          • 0
            Интерес? Да во мне Визувий клокочет. Куда выезжать?
      • 0
        А разве нельзя использовать BLE маячки и по силе сигнала с 3-х маячков получать координаты на местности? Вроде так определяют координаты на всяких там кнференциях\выставках\etc. Маячки с китая стоят совсем недорого.
    • 0
      Это ж ИИон как есть, а ТС на пару с Маском отрицают любую возможность троллить соседей сингулировать этот мир.: о)

      А задумка и реализация круты, автор, не теряйте задор!
  • 0
    Отличная работа!
    • 0
      Спасибо!
  • +2
    Отличная идея. Тоже думал делать подобную косилку к следующему году. Только с измельчителем травы, чтобы потом не собирать сено руками, потому что площадь объекта несколько гектар. Обязательно, как уже сказали выше, генератор плюс электропривод. И такую машину надо снабжать мягкими бамперами, чтобы она в случае чего не покоцала стоящую по территории технику.
    Препятствия и нескошенное, кстати говоря, еще можно определять через OpenCV и пару-тройку красных лазерных линий параллельно земле, по появлению этих самых линий на картинке. Красного цвета линий на газоне нет, потому работать должно относительно надежно.
    • 0
      Насчет бамперов абсолютно согласен. С OpenCV возможно так же использовать отдельный мини-компьютер с камерой на столбе в углу участка, так можно будет определять перемещение газонокосилки, корректировать местоположение и движение по участку других объектов (детей, домашних животных)
  • 0
    Автовазу до Ваших идей далеко. Удачи в начинаниях и продолжениях!
  • +1
    Ох. Что только не делают из этих движков. Вот у меня уже не первый год работает управляемая заслонка вентиляции в производственном помещении. Только из стеклоподъемника.
    • 0
      Меня на использование этих движков сподвиг пост geektimes.ru/post/258518, из общения с автором родилась идея использовать Monster Motor Shield. Отличная вещь, до 30А при 12В.
      • +1
        Ну, движки реально хороши по соотношению полезность-цена.
        Шилдами я уже наигрался, сейчас делаю «узкие» устройства под конкретные задачи.
        А заслонка — там вообще дубовейшая автоматика. Реле, концевики.
      • 0
        На фото разобранного двигателя видно, что из него выходят два провода. Можно предположить, что это земля и две скорости. Значит земля не соединяется с корпусом внутри двигателя. Возможно соединяется на контактной группе в редукторе. Стоило попробовать отсоединить провода от редуктора, возможно контакт минусового провода с корпусом исчез бы. Вам стоило взять такие двигатели, как в той статье. В них нет контакта минуса с корпусом и они втрое мощнее.

        Китайские Monster Motor Shield'ы не такие пушистые, как я думал. Купил в Китае 7 подобных полушилдов, рабочими оказались только два, остальные дохлые по приезду. Возможно то же самое и в Вашем случае.
        • 0
          *три провода
  • 0
    а чертежа нет?
    • +1
      Скажу даже больше, его и не было! Был эскиз и сварочный аппарат.
      • 0
        Это называется «сляпать по наитию и по месту» :)))
      • –1
        Крутая телега. Рекомедую SolidWorks — позволяет не ошибиться с размерами и не переделывать.
  • +1
    Есть ли в продаже роботы-газонокосильщики с баком? Что-то нагуглить не могу. Без бака весь газон в сухой траве окажется.
    • 0
      Если косить вовремя, то количество скашиваемой травы достаточно невелико и ее можно смело оставлять прямо на газоне: за день-два уходит в почву.
    • 0
      Робот сделан скорее для мульчирования травы. Если скашивать траву часто, т.е. срез должен составлять не более миллиметра+доп. измельчение ножом. При этом траву нет необходимости собирать, это является отличным удобрением. При использовании бака появляется не только необходимость проверять заполненность, определять место и способ сброса травы, большая проблема это то, что канал регулярно забивается. О какой-либо автономности придется забыть.
      Мне бы в итоге хочется чтобы косилка сама запускалась и работала по расписанию (когда все на работе).
  • +1
    Прикольный проект:) Кстати, вы уже знаменитость, вас на Медузе опубликовали
    • 0
      Есть шанс что и соревнования роботов-газонокосилок следующим летом будет широко освещаться…
  • +5
    В финальной версии если робот будет работать без присмотра — сделайте большую красную кнопку с надписью СТОП, чтобы в экстренном случае непосвященный человек мог остановить эту машину. На всякий случай.
    • 0
      +в план
      • 0
        При этом кнопка должны быть со всю машину, чтобы не промахнуться.
  • 0
    Не в тему, но по моим воспоминаниям кроме фантастики ничего интересного в ТМ не было вообще. Унылый журнал по сравнению с ЮТ и Радио )
    • 0
      А вы почитайте подшивки за 60е-80е года.
      • 0
        Как раз этих годов и было несколько связок у отчима на балконе.
      • 0
        Полагаю, я примерно в то время на них и смотрел. Не знаю, может возраст был неподходящий, но ЮТ и Радио — более «прикладные» журналы. Пожалуй, мне не удалось выбрать правильную формулировку. Не «унылый», а скучный именно для меня.
  • 0
    Отлично! Даёшь полную видео-демонстрацию!

    Сколько времени ушло на всё про всё? И я не совсем понял алгоритм кошения :) Он эти квадратики по спирали, из центра проходит, или как-то ещё?
    • 0
      Он эти квадратики по спирали, из центра проходит

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

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