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



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


Здравствуйте! Меня зовут Вячеслав Голицын, и я ГИК! Это началось все еще в школе, меня на это подсадили друзья из физмат класса. На переменах, украдкой в туалете и за углом школы мы обсуждали новые гаджеты и схемы для жучков-радиопередатчиков. Я думал просто побалуюсь, но затем я уже не мог соскочить. Электронику, которую я собирался починить, в доме уже никогда никто работающей не видел, во время очередного феерического разгулья мною жестоко был убит магнитофон «Электроника 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

Спасибо за внимание!

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


  1. utya
    02.09.2015 11:00
    +2

    Круто!


  1. frolic
    02.09.2015 11:20

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


    1. enterdv
      02.09.2015 11:29

      PS: Пардон, ошибся.


    1. webzuweb
      02.09.2015 12:10
      +2

      Готов даже к челенджу. Может до следующего лета сформируем уже небольшое сообщество. Готов предоставить поле для соревнования, поле с BBQ и печеньками.


      1. r00tGER
        02.09.2015 14:33
        +2

        Зрителем возьмете? :)


        1. webzuweb
          09.09.2015 15:40

          Уже можете зарегистрироваться.


  1. ToSHiC
    02.09.2015 11:30
    +1

    В моторе стеклоочистителя 3 щётки, потому что у него две скорости. Ещё у него должен быть один провод, который замыкается или размыкается 1 раз за оборот, штатно он используется для остановки дворников в нижнем положении, а вы можете использовать для подсчёта расстояния, например.


    1. webzuweb
      02.09.2015 11:59

      Спасибо! По поводу использования встроенного «энкодера» думал, но один оборот колеса это 80см. Это слишком много. Пришлось двигатель просверлить и нарастить ось, на которую разместил оптический энкодер с 20 прорезями, т.е. один шаг это движение тележки на 4 см. вперед.
      За разъяснение со скоростью спасибо.


  1. enterdv
    02.09.2015 11:30
    +2

    Вертикальное видео! Зачем Вы так?


    1. webzuweb
      02.09.2015 12:00

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


  1. AVI
    02.09.2015 11:56
    +6

    Раз на улице обитает, то просится GPS. Чтобы лучше ориентировался на участке покоса. Так же можно держать несколько карт участков и автоматически определять нахождение в них.
    Еще установить купюроприемник и отправлять его на заработки к соседям.
    По объему денежных поступлений с участка регулировать частоту его посещения. «На участке №32 дали 500р — надо заезжать каждую неделю».
    Так же добавить датчик удара и микрофон. «На участке №57 два раза пнули ногой и громко ругались — больше туда не ездить».
    :)


    1. webzuweb
      02.09.2015 12:04

      Идея хорошая. Вы еще, наверное, хотели сказать про селфи-палку и размещение проекта на кикстартер..:) Если честно думал про установку магнитометра для определения севера, но думаю что помехи от работы двс и двух электродвигателей будут сильные. Про GPS идея отличная. Куда бы Вы его установили к малине или к ардуино?


      1. wrewolf
        02.09.2015 12:21

        просится к малине, вы же туда сливаете информацию с других датчиков.
        А магнитометр можно попробовать вынести максимально далеко, и учитывая коробку датчиков на попробовать он у вас уже есть.


        1. Rumlin
          02.09.2015 12:40
          +2

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


          1. darkfrei
            09.09.2015 15:19

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


            1. Rumlin
              09.09.2015 19:32

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


              1. darkfrei
                10.09.2015 01:07

                При перемещении колеса, на которых часть веса не приходит, будет проскальзывать в любом случае.
                А «ловить» просказывание ведущих колес при повороте тоже нужно.


    1. vmarunin
      03.09.2015 03:35

      GPS даст уж очень примерную точность.
      Понять на чьём участке аппарат можно, а где именно на нём — нет.

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


      1. frolic
        03.09.2015 09:37

        Проще поставить ультразвуковые излучатели в углах периметра, по ним вполне точно получится.


      1. Svrg
        04.09.2015 09:16

        Можно попробовать RTK, если более менее открытая местность.


        1. Svrg
          04.09.2015 09:43

          Если будет интерес готовы предоставить комплект базы и ровера ;)


          1. webzuweb
            04.09.2015 12:03

            Интерес? Да во мне Визувий клокочет. Куда выезжать?


      1. Visphord
        04.09.2015 18:08

        А разве нельзя использовать BLE маячки и по силе сигнала с 3-х маячков получать координаты на местности? Вроде так определяют координаты на всяких там кнференциях\выставках\etc. Маячки с китая стоят совсем недорого.


    1. beaverBox
      03.09.2015 06:48

      Это ж ИИон как есть, а ТС на пару с Маском отрицают любую возможность троллить соседей сингулировать этот мир.: о)

      А задумка и реализация круты, автор, не теряйте задор!


  1. noonv
    02.09.2015 11:58

    Отличная работа!


    1. webzuweb
      02.09.2015 12:04

      Спасибо!


  1. Konachan700
    02.09.2015 12:50
    +2

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


    1. webzuweb
      02.09.2015 14:24

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


  1. velezh
    02.09.2015 12:58

    Автовазу до Ваших идей далеко. Удачи в начинаниях и продолжениях!


  1. eta4ever
    02.09.2015 13:44
    +1

    Ох. Что только не делают из этих движков. Вот у меня уже не первый год работает управляемая заслонка вентиляции в производственном помещении. Только из стеклоподъемника.


    1. webzuweb
      02.09.2015 14:28

      Меня на использование этих движков сподвиг пост geektimes.ru/post/258518, из общения с автором родилась идея использовать Monster Motor Shield. Отличная вещь, до 30А при 12В.


      1. eta4ever
        02.09.2015 14:32
        +1

        Ну, движки реально хороши по соотношению полезность-цена.
        Шилдами я уже наигрался, сейчас делаю «узкие» устройства под конкретные задачи.
        А заслонка — там вообще дубовейшая автоматика. Реле, концевики.


      1. heaver
        05.09.2015 00:33

        На фото разобранного двигателя видно, что из него выходят два провода. Можно предположить, что это земля и две скорости. Значит земля не соединяется с корпусом внутри двигателя. Возможно соединяется на контактной группе в редукторе. Стоило попробовать отсоединить провода от редуктора, возможно контакт минусового провода с корпусом исчез бы. Вам стоило взять такие двигатели, как в той статье. В них нет контакта минуса с корпусом и они втрое мощнее.

        Китайские Monster Motor Shield'ы не такие пушистые, как я думал. Купил в Китае 7 подобных полушилдов, рабочими оказались только два, остальные дохлые по приезду. Возможно то же самое и в Вашем случае.


        1. heaver
          05.09.2015 00:41

          *три провода


  1. minakov
    02.09.2015 13:56

    а чертежа нет?


    1. webzuweb
      02.09.2015 14:21
      +1

      Скажу даже больше, его и не было! Был эскиз и сварочный аппарат.


      1. eta4ever
        02.09.2015 14:34

        Это называется «сляпать по наитию и по месту» :)))


  1. Yogami
    02.09.2015 15:13
    +1

    Есть ли в продаже роботы-газонокосильщики с баком? Что-то нагуглить не могу. Без бака весь газон в сухой траве окажется.


    1. Shoohurt
      02.09.2015 16:55

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


    1. webzuweb
      02.09.2015 18:40

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


  1. drobzik
    02.09.2015 16:20
    +1

    Прикольный проект:) Кстати, вы уже знаменитость, вас на Медузе опубликовали


    1. webzuweb
      02.09.2015 18:42

      Есть шанс что и соревнования роботов-газонокосилок следующим летом будет широко освещаться…


  1. LexB
    02.09.2015 17:51
    +5

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


    1. webzuweb
      02.09.2015 18:41

      +в план


      1. darkfrei
        09.09.2015 15:38

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


  1. spc
    02.09.2015 20:37

    Не в тему, но по моим воспоминаниям кроме фантастики ничего интересного в ТМ не было вообще. Унылый журнал по сравнению с ЮТ и Радио )


    1. 4dmonster
      03.09.2015 09:02

      А вы почитайте подшивки за 60е-80е года.


      1. webzuweb
        03.09.2015 09:59

        Как раз этих годов и было несколько связок у отчима на балконе.


      1. spc
        03.09.2015 10:30

        Полагаю, я примерно в то время на них и смотрел. Не знаю, может возраст был неподходящий, но ЮТ и Радио — более «прикладные» журналы. Пожалуй, мне не удалось выбрать правильную формулировку. Не «унылый», а скучный именно для меня.


  1. kacang
    03.09.2015 06:49

    Отлично! Даёшь полную видео-демонстрацию!

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


    1. webzuweb
      03.09.2015 09:58

      Он эти квадратики по спирали, из центра проходит

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


  1. frolic
    03.09.2015 09:43

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


    1. heaver
      05.09.2015 00:17