Разработка MVP. Видео тестирования.
Что такое гольф?
Гольф — это спортивная игра. Основная цель — за меньшее количество ударов закатить мяч в лунку на каждом поле, за меньшее количество ударов пройти все поля. В нашей стране гольф развит крайне плохо и это печально. Игра достаточно интересная, позволяет людям проводить время на свежем воздухе, общаться во время игры, подходит для всех возрастов. В игре есть четкое измерение Вашего успеха «гандикап» — числовой показатель квалификации спортсмена. Все эти факторы делают гольф потоковым занятием. Если Вы еще не пробовали гольф — самое время!
Что такое driving range?
Чтобы ударить с первого раза в конец поля, ближе к лунке, Вы должны уметь совершать дальние и точные удары. Драйвинг-рэйндж – это тренировочное поле для отработки дальних и средних ударов игры в гольф. Выглядят эти поля примерно так.
Я на driving range. Это иллюстрация к тому, как неправильно бить.
За одну тренировку на таком поле обычно делают более сотни ударов. Руками собирать эти шары было трудоемко и опасно для жизни. В начале XX века выбора особо не было, но кое-где и сейчас ручной труд дешевле.
Сейчас еще используется ручной инструмент, но это скорее исключение.
Чаще всего шары собирают с помощью специального нацепного устройства на трактор, гольф-кар или обычное авто.
Для сбора мячей, их перетаскивания в машину для мытья, загрузку в диспенсер обычно содержится специальный человек в штате, хотя эту роль может выполнять и grasskeeper. (Грэскипер — это человек, который ответственен за качество газона на гольф-полях).
Разработка и внедрение сервисного робота для сбора мячей для гольфа выглядит оправданным шагом с экономической точки зрения, так как экономит содержание спецтехники и заработную плату сотрудника, который должен был выполнять данный процесс. Гольф развит по всему миру, данная фотография это явно показывает.
Особенное распространения данная игра получила в США и Европе, где уровень заработной платы достаточно высокий и возможность заменить сотрудника сервисным роботом окупается очень быстро.
Поиск готового решения
В результате поиска были найдены:
парочка DIY проектов
парочка красивых рендеров
и один вполне себе коммерческий проект
Из этого можно сделать вывод, что интерес есть. Скорее всего в такие нисшевые решения очень рискованно вкладываться. Стоимость разработки и наладки производства высоки, одни пресс-формы выйдут в несколько десятков тысяч $. Гольф-клубов в России немногим более 40, при этом в мире их много, в одной Германии их более 700, а во всего более 34.000. Робот сборщик мячей как продукт точно не пройдет тест зубной щетки в корпорации добра.
Очень странно, что администрация нескольких европейских гольф-клубов, с которыми я общался не слышали о существовании готового робота, хотя проявили интерес. Все мои попытки выйти на связь с данной компанией не увенчались успехом, возможно они не справляются с количеством уже имеющихся заказов.
Я не знаю точно, что из этого получится. Может быть где-то на пути от фанерной коробки до первого «взрослого» образца придет понимание нужно это кому-то или нет.
Первоначальной целью является получение работающего образца без внимания к внешнему виду. Далее планирую придать роботу аккуратный внешний вид и поставить для тестов в гольф-клуб в России. После отладки и проведения долговременных тестов — приступить к переработки модель в пригодную для производства.
Поехали!
Планируется несколько основных преимуществ относительно существующего коммерческого решения.
- Отсутствие необходимости закапывать слаботочный кабель по периметру.
- Возможность внедрения в уже существующую инфраструктуру.
- Более низкая стоимость и совокупная стоимость владения.
Корпус и механическая часть
Материалом для корпуса первого образца была выбрана фанера. Дешево, позволяет на месте быстро подрезать какие-то части или просверлить отверстия. Чтобы все было четко подогнано набросал чертеж и отдал на фрезерную резку.
Собрал все детали. С самого начала была идея сделать корпус скругленным, но решил остановится строго на MVP. Все, что не влияет на работоспособность пока умышленно исключаю из todo-листа.
Механизм захвата мячей в процессе эволюции данных приспособлений показал свою эффективность, поэтому другие варианты не рассматривались.
По двигателю 12V 30 Н/м. на каждое колесо. Такой же двигатель крутит вал с дисками захвата, так как они подняты над поверхностью для облечения поворотов и повышения маневренности.
Изначально двигатели были noname китайские. В описании не было момента, поэтому риск был велик. Момента явно не хватало, что не скажешь о двигателей от стеклоподъемников.
После смены двигателей пришлось напечатать другие шестерни.
Электроника
Так как ровер должен работать без электромагнитного кабеля по контуру поля ему как-то необходимо ориентироваться и искать базу для сброса шаров и подзарядки.
Принял решение использовать Orangepi lite и arduino для более удобной работы с 5v без зоопарка конверторов уровней для каждого датчика и драйвера двигателей.
Собрал все из готовых модулей на макетной плате. Сказывается отсутствие опыта в схемотехнике, думаю в дальнейшем не проблема будет развести плату под модули или под дискретные элементы и заказать.
Схема состоит из 11 план, 11 Карл!
— Orange Pi Lite
— Arduino nano
— GPS модуль GY-NEO6MV2
— 2 драйвера двигателя VNH2SP30
— Bluetoth Hc-06
— 2 ультразвуковых модуля J34
— Конвертер логических уровней
— Модуль 3-х осевого гироскопа и акселерометра GY-521 MPU-6050
— Блок из двух реле
Конечно это было сделано для быстрой сборки, монтажа и замены модулей.
Программная часть
Основной скрипт написан на Python. В цикле программы существует глобальная цель:
- Инициализация
- Сбор мячей
- Возврат на базу
- Зарядка
- Отдых по расписанию
- Отдых по погодным условиям.
Инициализация
Во время инициализации происходит тестирование систем, поиск GPS, построение локальной карты проходимости, определение дальнейшей цели.
Сбор мячей
Во время сбора мячей в каждом цикле, обновление локальной карты проходимости, построение вектора до текущей географической цели, опрос датчика переполненности отсека с мячами, опрос заряда батареи.
Возврат на базу
В случае переполнения отсека для мечей или разрядки батареи робот переключает глобальную цель на возврат на базу кратчайшим маршрутом. При непосредственной близости к координатам базы осуществляется визуальный поиск метки по которой происходит дальнейшее, более точное ориентирование.
Зарядка, отдых
Зарядка происходит до необходимого напряжения батарей. Отдых может быть запланирован по расписанию или по срабатыванию датчика дождя.
Корпус
За дизайн огромное спасибо habr.com/users/NikitaKhvoryk
Несущий корпус должен сверху накрываться верней частью, которая служит для защиты от дождя и падающих мячей. Первый декоративный корпус планирую сделать из стеклоткани и эпоксидной смолы. Про это готов написать отдельный пост, если будет интересно.
Видео
Планы
Уже сейчас ровер собирает 95-100% мячей на своем пути. Строит маршрут внутри полигона по GPS-координатам. В планах:
- Нахождение базы для сброса мячей и зарядки по визуальной метке.
- Сервопривод сброса мячей.
- Датчик переполненности отсека с шарами.
- WEB-интерфейс для визуального указания точек на карте, построения зон для сбора мячей с разной периодичностью.
- Корпус.
- Размещение робота в гольф-клубе в Москве для теста в боевых условиях.
Вопросы
Много раз после поста получал от хабросообщества ответы на вопросы или советы, которые очень помогали. Во всем посте есть несколько вопросов, на которые мне очень нужен ответ. Решил собрать их для удобства вместе.
- Каким образом сделать корпус для робота? Это должно выглядить красиво, без вложений в пресс-формы.
- Стоит ли уйти от модулей и делать все на одной плате? Как быть с микрокомпьютером?
- Как найти финансирование под проект? Где тестировать образцы?
- Никак не могу найти пример фильтра Калмана для данных с GPS с коррекцией по магнетометру, гироскопу. Есть Pycalman, но каким образом вместить в матрицы данные с датчиков никак не пойму. Даже на тостере не нашел ответ. Буду очень благодарен.
Спасибо за внимание. В следующем посте тест в боевых условиях. Я покажу Вам не показанное, постараюсь разгадать неразгаданное, и выведать все неизведанное!
Всегда Ваш, начинающий стартапер, менеджер самого среднего звена, разработчик всяких роботов 1, 2, 3, 4, 5, 6 и гаждетов 1, 2, 3. А еще я написал два рассказа 1, 2 и взял пару интервью 1, 2, 3.
Я открыт для диалога, советов, помощи, предложений.
Комментарии (62)
alexhott
17.09.2018 21:18про позиционирование был пост, там автор делал газонокосилку и тоже что-то с чем то скрещивал, результата не помню. Еще вариант дополнить стационарным приемником гпс/гланас и по радио сообщать роботу корректировку.
webzuweb Автор
17.09.2018 21:20+1Автор с газонокосилкой скорее всего был я. Что не скрещивай, а точность так себе.
GPS RTK стоит дорого!vasimv
17.09.2018 21:41+1RTK GPS стоит не так уж и дорого, два датчика с хорошими антеннами (2x Ublox neo-m8t с приличной антенной обошлись в чуть более 200 долларов), плюс serial-to-wifi гейт (ESP-шка или какой-нибудь raspberry pi zero) и микрокомпьютер для rtklib (тот же raspberry pi zero или orange pi zero).
ToSHiC
18.09.2018 12:51SkyTraq сделали дешёвые модули с прошивкой, которая считает RTK прямо на модуле: navspark.mybigcommerce.com/s2525f8-gl-rtk-gps-glonass-rtk-receiver-module, для работы нужна, соответственно, пара таких модулей.
Barafu_Albino_Cheetah
18.09.2018 17:54А у меня идея. В двух углах поля ставятся динамики, они регулярно делают бум!.. Скорость звука 340 м/с, ардуина без проблем замеряет разницу в 1 мкс, то есть можем посчитать расстояние до динамиков с точностью 30см, если время синхронизировать, или инициировать динамики по радиокоманде с робота. Из этой информации высчитываем, что робот может быть в одной из двух точек. А дальше — логически.
webzuweb Автор
18.09.2018 18:07Артем, боюсь члены клуба будут против.
Hilbert
19.09.2018 00:53Против ультразвука? Они и не узнают. Но для большой площади RTK может быть удобнее, конечно.
vasimv
19.09.2018 03:17Представляете какой силы нужен будет звук, чтобы на сотни метров ловился? Даже если пренебречь влиянием на здоровье собственно ультразвука — там будет слышен довольно громкий «бум» в начале импульса. Ну и как бы на больших расстояниях движущемуся роботу — ультразвук совершенно не катит. Задержка звука будет такая, что робот будет успевать проезжать существенное расстояние, искажения измерений будет страшное, да и частота этих измерений — неприемлимая.
Hilbert
19.09.2018 00:52+1Такие системы уже есть, например, Marvelmind. Двумя маяками ограничиваться не нужно, просто смысла в этом нет, измерения не идеально точные. Еще у вас ошибка в расчетах, порядка 30 см это для 1 мс, а не 1 мкс.
vasimv
17.09.2018 21:36По поводу езды по компасу — можно посмотреть ardumower (автономная газонокосилка на arduino mega 2560 или arduino due), Inav (коптеры и колесные роботы на stm32f3/4/7), openpilot (коптеры и колесные роботы на тех же контроллерах), ну и мой проект github.com/~vasimv/OMower — колесный робот на arduino due или собственной плате. Во всех есть нужные калманы и/или более продвинутые фильтры (Madgwick/Mahony). В моем еще есть поддержка получения координат от RTK (нужен внешний микрокомпьютер с rtklib), остальные тоже теоретически с ним смогут, но не проверял как хорошо.
webzuweb Автор
17.09.2018 21:46Спасибо.
Буду смотреть в этом направлении.vasimv
17.09.2018 22:00Кстати, я недавно делал эксперимент с ориентированием omower по камере (opencv распознает шахматную доску и выдает коррекцию по углу для робота), довольно хорошо получается на нескольких метрах (на большом расстоянии — нужен более мощный, чем raspberry pi zero компьютер для обработки кадров в высоком разрешении). Как раз чтобы на станцию заезжать (подъезжаем по GPS к точке перед станцией, потом по камере рулим в нее).
Принцип довольно простой — opencv выдает нам координаты точек шахматной доски, высчитываем на сколько пикселей смещены углы относительно центра камеры, рассчитываем расстояние по размерам доски на камере и получаем угол отклонения, который прямиком в pid-контроллер моторов пихаем.webzuweb Автор
17.09.2018 22:06Мне кажется можно использовать даже QR коды www.i-programmer.info/news/169-robotics/6665-robot-navigation-made-easy-with-qr-codes.html
vasimv
17.09.2018 22:11Мои тесты показали, что QR-коды на raspberry pi zero распознаются слишком долго (до единиц секунд), что крайне медленно для нормального ориентирования. Шахматную доску 3x4 на 640x480 я распознавал за 100-300 миллисекунд, что позоволяет нормально уже ездить в реальном времени. Впрочем, я не большой специалист в этой области, может и можно что-то крутить в opencv.
ra3vld
18.09.2018 13:10Для навигации больше подходят aruco маркеры.
Для ROSа есть прикольный пакет wiki.ros.org/ar_track_alvar использовали его для уточнения позиционирования по slam.
Также делали индор трекинг роботов с внешней камеры. Было 4 робота на которых стояли кубы обклеенные маркерами(т.е. до 12 маркеров в кадре одновременно) на odroid xu4 и допиленном opencv получилось 10-15фпс.webzuweb Автор
18.09.2018 13:17Да, это стоит использовать для метки. Спасибо.
В целом думаю все сделать на ROS, но тогда нужен компьютер мощнее.
webzuweb Автор
17.09.2018 21:38ardumower разве работает не с кабелем по периметру?
Решения на Калмане есть, но для Python не смог найти толкового примера как сформировать матрицу.vasimv
17.09.2018 21:43С кабелем, но GPS-ориентирование с компасом там есть (используется в варианте с внешним компом, строящим карту участка). Не знаю какую там матрицу хотите получить, но питон скорее всего не справится с реал-тайм задачей комбинации акселерометра/гироскопа/компаса.
webzuweb Автор
17.09.2018 22:08Здесь ситуация другая. На Driving range практически нет препятствий.
Точки границы участка задать можно заранее.
Какой простейший алгоритм выбрать для построения маршрута в полигоне из GPS координат, чтобы за меньшее время обойти всю площадь?vasimv
17.09.2018 22:13Тут не подскажу ничего, у меня задача чуток попроще. Читал что-то про такие алгоритмы, но пока не реализовывал.
Hilbert
19.09.2018 00:49С numpy или подобной библиотекой справится безо всяких проблем, да еще и с большим запасом. Без них тоже справится, просто смысла не использовать их нет.
vasimv
19.09.2018 03:24Там оно десятки, а то и сотни раз в секунду прет от трех датчиков, в реальном времени. Можно, конечно, потрахаться с приоритетами задач, чтобы оно все успевало, но я бы не стал…
Hilbert
19.09.2018 00:48С numpy без проблем, да и куча туториалов в сети по Калман-фильтрам на Python. Если в будущем датчиков будет много, можно на ROS посмотреть, там есть robot_localization для этого (фильтр Калмана).
ashv24
17.09.2018 22:42
Может быть заменить подбор мяча? Вот например так… Мяч попадает в направляющую по которой продвигается по земле, так как сама конструкция двигается. Затем мяч наезжает на сетчатую полку (сетчатая чтобы не собирать мусор), заезжает глубже (по инерции или подталкивается мячом который следует позади) где заталкивается резиновым валом в бункер для мячей. Может поставить резиновую крыльчатку прямо над тем местом где начинается сетка и мяч будет сразу залетать в бункер.NikitaKhvoryk
18.09.2018 09:08Утро доброе.
Здесь проще пойти в уже давно известную технологию сбора — жатка комбайна. Все ваши методы, как раз и описывают первичные концепции его разработки. Там используется интегральный шнек (это когда правая и левая части имеют разную навивку шнека). Таким образом, где бы не попал объект, он перемещается к центру. Да и регулировать зазор между шнеком и сеткой не нужно, чтобы предотвратить заклинивание механизма. В ваших случаях есть варианты развития такого сценария.
Germanjon
18.09.2018 08:13Если рассматривать не только робота, а всю инфраструктуру «автоматический сбор мячей для гольфа» в целом, то предлагаю дополнить:
— Настраиваемыми условиями, при которых начинать сбор мячей (периодический сбор, сбор после расходования определённого количества, сбор если плотность мячей в указанной области становится выше определённого предела). Вряд ли целесообразно гонять робота исключительно за двумя мячами в двух дальних углах поля.
— Добавлением отдельной камеры, которая оценивает куда приблизительно улетают мячи. В дальнейшем, данные с камеры могут служить целеуказанием для робота сборщика.
— Возможность работы в команде одинаковых роботов, чтобы не шерстить повторно участок, пройденный коллегой.
— Возможность «разделения труда». Первое, что приходит в голову: есть робот транспортёр, который отвозит мячи с поля до базы. Есть роботы поисковики, которые ведут самостоятельный поиск, собирают некоторое малое количество мячей и передают транспортёру (и попутно подзаряжаются от него)webzuweb Автор
18.09.2018 09:20Автоматическая рекуперация мячей и есть конечная цель.
Узкое место не сбор, а весь цикл обработки мячей.
Их нужно собрать, привезти, помыть и засыпать в диспенсер.
Люди вставляют монету или купюру и получают свою порцию мячей.
Весь этот процесс уже проводится на поле, необходимо интегрировать туда робота без лишних затрат.
Например для засыпки мячей в автомат для мытья думаю сделать наклонную плоскость вдоль домика с диспенсером по которой робот поднимается и сбрасывает мячи через отверстие в стене сразу в автомат мытья.
Далее траспортная наклонная лента из автомата мытья поднимает мячи в диспенсер после того, как они выпадают чистые.
DelphiCowboy
18.09.2018 08:44Фото робота вызывает большой вопрос об его проходимости.
Не застрянет ли он на таком поле для гольфа?PendalFF
18.09.2018 09:08Это уже на подходе к грину, и на самом поле, как таковом, мячи массово никто не лупит. Ты идешь со своим мячем от начала и до конца (до лунки). Потеря мячей носит единичный характер и явно не требует роботов для сборки.
А автор описывает применение робота в «гольф-тире», если угодно. то есть отдельный загончик где практикуются в «стрельбе» мячами и поэтому требуется мячи рекупирировать в промышленных масштабах
clawham
18.09.2018 09:17могу подсказать по корпусу — производим кораблики для завоза прикормки из abs пластика — выглядит офигенно, станок делается за два вечера, форма режется из ДСП на любом 3д принтере. повторяемость просто супер, скорость работы — 10 больших корпусов за 5-часовой рабочий день одним сотрудником. Клеится внутрянка(порезанная на том же чпу фрезере) дихлорэтаном(растворитель) да так что отрывается только с мясом и сквозными дырками.
PendalFF
18.09.2018 10:12«Форма режется из ДСП на любом 3Д-принтере»
Слова по отдельности понимаю а вот что имелось ввиду, поясните пожалуйстаclawham
18.09.2018 10:33имелся ввиду 3д фрезер.
склеиваются между собой до необходимой высоты 2-3-4 столещницы а потом на фрезере чпу — срезается лишнее — выходит внутренняя часть формы на которую надевают размягченный температурой лист пластика а потом ваккуумом отсасывают воздух — в результате пластик приобретает выпуклости формы, потом лишнее отрезается и вуаля — корпус готовwebzuweb Автор
18.09.2018 10:35Ось Z e фрезера нужна более 300мм., я не смог такое найти в Подольске.
Думаю насчет вакуумной формовки или стеклохоста и эпоксидки на пенопластовую форму.alexk24
19.09.2018 11:09Не обязательно. Можно наоборот нарезать слоями (из тех же столешниц), а потом склеить. Просто вначале склеить, а потом нарезать обеспечит более ровные стыки (их отсутствие) и в целом немного проще.
cgnrat
18.09.2018 11:54Я так понимаю ось для дисков, которые собирают шары, сделана из гибкого материала (садового шланга похоже не данный момент :), что впрочем не важно).
Важно то, что упругие материалы имеют тенденцию менять свои свойства со временем при активном механическом воздействии.
Вы не опасаетесь, что этот узел быстро «разболтается»?
Впрочем может это и к лучшему — нередко сервисное обслуживание является основной статьей доходов производителя. :)
webzuweb Автор
18.09.2018 11:55Ось из шпильки 12мм. Это временное решение.
Шланг для мягкой фиксации дисков.
vershinin
18.09.2018 12:21Задача интересная, сам робот и реализация тоже, а вот гольф как-то не очень…
www.youtube.com/watch?v=Z4w7H48tBS8
Или я что-то не понимаю, тогда прошу написать научно-популярную статью про гольф и почему гольф — это хорошо :)webzuweb Автор
18.09.2018 12:23В СССР гольфа не было, поэтому у нас он развит крайне плохо и считается игрой исключительно для богатых людей.
Гольф отлично подходит для нетворкинга, проведения неформальных встреч.
Это умеренные нагрузки на свежем воздухе.vershinin
18.09.2018 15:07Так-то оно так, но Джорж Калин в СССР не жил, а мнение насчёт гольфа имеет…
Aspos
18.09.2018 19:383-4 камеры по периметру робота могут распознавать мячики. Кроме того, могут распознавать маркеры на мачтах по углам зоны.
Азимуты до маркеров + примерная координата GPS = точное позиционирование.
Ардуина с таким, боюсь, не справится. Разве что слать картинки с камер на сервер и обрабатывать там.
Камеры на мачтах могут тоже следить на положением роботов, следить за траекторией летящих мячиков.webzuweb Автор
18.09.2018 21:10Это все как-то не вписывается в концепцию минимализации стоимости внедрения и стоимости владения. Тут придется здорово перерабатывать поле.
Нужно просто выпустить робота, установить разгрузочную зону, установить координаты поля.Aspos
18.09.2018 21:23Разве? ну ок, если сервер убрать, да камеры с мачт.
Сами 2-3 мачты метра 3 с яркой картинкой дорого не стоят, обслуживания не требуют.
3-4 камеры в роботе + 3-4 Raspberry Pi на борту сильно цену не увеличат.
Больше-то и расходов нет.
Можно даже без мачт обойтись если при установке указать на статичные высокие объекты вокруг. Потом, на гольф-полях часто фонари же есть.
Aspos
18.09.2018 21:40Развивая мысль: Если робот знает свою координату (GPS) и точно знает свое направление (дешевая навигационная камера), то используя HD-камеру может определять траекторию пролетающих над ним мячиков.
При поддержке второй камеры стоящей возле разгрузочного хоппера можно точно определять место падения мячика ± пара метров.
У мячей нет ускорения в полёте, мячи одинакового размера, двух камер вполне достаточно чтобы находить траекторию мяча.
Записывая места куда падают мячики можно сделать более эффективным алгоритм их сбора. Ну чтобы не кататься по всему полю как пылесос.
Я бы ещё камеру внутрь хоппера поставил чтобы оценивать степень загрузки.
sok
19.09.2018 09:35+1У компании ublox есть решения gps модулей с подключаемыми датчиками(для навигации автомобилей на парковках и в туннелях) с встроенным фильтром Калмана. Может стоит этим воспользоваться и переложить фильтр на готовое решение?
webzuweb Автор
19.09.2018 09:38Вы не могли бы прислать какой продукт Вы именно имеете ввиду. Ссылку где их можно заказать? Нa офф. сайте не нашел.
sok
19.09.2018 09:52+1К примеру Neo-m8u(не путать с другими моделями у них они на буквально одну букву могут отличаться) в нем все датчики встроены внутрь. Ссылка где купить к примеру тут в виде уже модуля www.csgshop.com/product.php?id_product=235 к сожалению не знаю насколько качественно будет лучше, но по рекламным материалам все очень и очень красиво.(реклама такая реклама)
Cyl
19.09.2018 17:00Мое мнение, алгоритм для подобных задач (в двух словах, не развернуто) — висит (летает на квадролете) на определенной высоте камера (класса PTZ), несколько камер, периодически сканируют поле (у каждой камеры свой сектор), идентифицируют объект поиска, передают его координаты уборочной машине.
Проект состоит в нескольких этапав: программная часть ID распознавания и принятия решений, навигация, управление и аппаратная часть воздух. Как-то так
terra-slav
Очень нужен робот для уборки коврика мыши=)