Как стать автором
Обновить
113
Карма
49
Рейтинг

Пользователь

  • Подписчики 84
  • Подписки

Игроки New World заметили большое количество ботов-рыбаков и стали натравливать на них кабанов

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


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

Робот-газонокосилка, часть 1. Механика и радиоуправление

Я так понял, они возвращаются на базу вдоль повода. По колёсным энкодерам такой точности добиться невозможно, а другой системы позиционирования у них нет (кроме той что тут в комментариях проскакивала с RTK GPS).

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

А можете, если нетрудно, скинуть ссылку для «почитать» про то, как «сшиваются» видео в один поток?

Что значит сшиваются в один поток? Вам надо объединить несколько картинок в одну? Тогда на python и opencv это делается через numpy:

import numpy as np
image_result = np.hstack((image1,image2)) # две картинки рядом горизонтально
image_result = np.vstack((image1,image2)) # две картинки рядом вертикально 

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

Если у вас известна позиция стационарной камеры и вы определили на картинке объект (его пиксельные координаты х,у), то его 3д координаты в пространстве рассчитываются с помощью unproject, используя матрицу камеры, которая получается в процессе калибровки.

А если у вас есть несколько ориентиров с известными координатами, стоящих например по углам комнаты. И вы определили их пиксельные координаты на кадре, а вам нужно определять динамическую позицию самой камеры, то это делается с помощью PnP алгоритмов (Point in Perspective). В opencv их встроено несколько штук разных. Но кажется, нужно не менее 4 точек-ориентиров, а хорошие алгоритмы работают начиная с 6.

А проще всего положить в одном месте AR маркер (ARToolkit, Aruco) как наземный ориентир. И второй на движущийся объект. И использовать готовые библиотеки. Они сразу выдают координаты камеры относительно них, координаты и направление движущегося объекта относительно неподвижного ориентира и тому подобное. И все это в реальных единицах, потому что размер маркера известен и используется как масштаб.

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

Согласно сайту https://navimow.segway.com/, это обычный RTK. Там два GPS приемника (правда, более дорогих и умеющих ловить фазу сигнала). Один стоит очень долго неподвижно, вплоть до нескольких дней. И копит ошибку. В итоге он с большой точностью определяет свое абсолютное положение.

Второй GPS приемник находится на косилке. Они оба одновременно принимают GPS сигнал, искаженный из-за атмосферы и разных других факторов. А потом из второго (который на косилке) вычитается разница координат между текущими показаниями у первого и его известных абсолютных координат, накопленных раньше.

В итоге получается реальная точность GPS координат порядка 2 см (я работал с такими приемниками, поэтому подтверждаю на практике). Расстояния между неподвижной базой и ровером, так называется движущийся GPS приемник, может доходить до 10 км или около того. Более того, во многих местах стоят радиовышки, передающие этот корректирующий сигнал (но за платную подписку). И тогда можно обойтись только одним GPS приемником, если до такой вышки несколько километров. В принципе, это отличное решение. Если не считать дороговизны (хотя где-то видел за ~200$, что для RTK очень дешево).

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

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

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

Ха-ха, действительно)) Но редактировать комментарий уже нельзя, поэтому придется оставить так) *гироскопам.

Робот-газонокосилка, часть 1. Механика и радиоуправление

А вы перед тем как делать, вообще не смотрели на роботы-газонокосилки? Просто всякие BOSCH Indego 350 и прочие — они примерно про это, эдакий робопылесос, только косилка и функция дозаправки у них обычно есть вроде.

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

А так я тоже считаю, что через несколько лет промышленные робокосилки разовьются до нормальной автономности и проблема отпадет сама собой. Прогресс в этой области очень быстрый. А если вы спрашивали про использование BOSCH Indego 350 или аналогов как шасси, но доработать ее алгоритм, потому что она маленькая и удобная, то не принципиально какое шасси использовать. Экспериментировать на небольшом бюджете и с имеющимся оборудованием меньше напрягает.

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

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


Так что без глобальной системы позиционирования так не сделать. Хотя есть ещё визуальная одометрия, тот же ORB SLAM 2. Он может минут 10 довольно точно запоминать свои следы. А в фиксированном окружении неограничено долго, там есть loop closure, который распознает места где был. Я его уже пробовал. К сожалению, среди листвы и травы (ну и в лесу тоже, соответственно) все методы визуальной одометрии по классическим ключевым точкам, к которым относится и ORB SLAM 2, практически не работают. Быстро теряют слежение, начинает искажать масштаб. А жаль. Я пытался сделать карту из облака точек в ORB SLAM 2, чтобы потом в нем релокализоваться. Но за несколько попыток (в разное время и с разными камерами, так что проблема не в конкретных условиях) ни разу не смог даже составить непрерывную карту своего участка. Но даже если удалось бы, при другом освещении она перестала бы работать.


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

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

Можно развесить 2-3 простых камеры на жестких шестах с разных сторон участка и очертить зону работы газонокосилки.

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

Робот-газонокосилка, часть 3. Сегментация травы нейросетью

Органолептическим способом)

Робот-газонокосилка, часть 1. Механика и радиоуправление

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

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

Робот-газонокосилка, часть 1. Механика и радиоуправление

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

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

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

Робот-газонокосилка, часть 1. Механика и радиоуправление

Открытый участок, просматриваемый с одной камеры (или нескольких) проще все распознать визуально. Определив на нем газонокосилку, например по цвету. А ещё проще по AR маркеру на ней, потому что это даст размер и направление косилки. Для стационарной камеры карту участка можно нарисовать прямо на картинке и спроецировать ее обратно в 2д плоскость. Ну или положить в углу другой AR маркер с известными координатами. Тогда газонокосилка будет определяться относительно него.


Для вашего случая почти идеально подойдёт инструментарий из планируемой 4 части. Собственно, там уже реализован готовый код для рисования карты с препятствиями, для навигации, для возврата на базу и т.д. А в качестве камеры можно будет использовать смартфон. И на нем же обрабатывать картинку. Немного терпения, последняя часть будет самой сложной с программной точки зрения, но и самая функциональная.

Робот-газонокосилка, часть 1. Механика и радиоуправление

Триангуляция по визуальным маркерам будет в 4 части. Статья в процессе написания.

Робот-газонокосилка, часть 2. Определение высоты травы

А ещё она может наехать на хвост лежащей собаки. Или на ногу ребенку. Если не ошибаюсь, такие несчастные случаи действительно были. С ужасными травмами. Полностью автономный робот-газонокосилка наверно должен быть маломощным и игрушечным, чтобы не мог нанести большого вреда. Но и мощные для больших пространств тоже нужны, хоть они и опаснее.


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

Робот-газонокосилка, часть 1. Механика и радиоуправление

Остановка при потере связи дольше 300 мс, а бензиновый мотор на данном этапе не глушится. В таких моторах, кстати, кнопка глушения работает на замыкание. Поэтому туда достаточно легко поставить реле, управляемое с микроконтроллера ESP8266.

Робот-газонокосилка, часть 1. Механика и радиоуправление

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

Робот-газонокосилка, часть 1. Механика и радиоуправление

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

Робот-газонокосилка, часть 1. Механика и радиоуправление

Это действительно идеальный вариант! Вы не поверите, но я о нем даже не подумал). Изначально ставил целью заменить свой ручной труд, запускать газонокосилку раз в неделю под непринужденным присмотром, чтобы прокашивать за один раз весь участок.

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

Робот-газонокосилка, часть 1. Механика и радиоуправление

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

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

У меня большая площадь для кошения, с множеством случайно разбросанных кустов и деревьев. Поэтому проложить провод в земле нереально. Вручную косить это занимает примерно 2-3 часа непрерывной ходьбы, и делать это приходится каждые полторы недели. Что физически утомительно даже с самодвижущейся бензиновой косилкой (в основном, из-за кустов, с открытыми пространствами все ок). Косить случайными траекториями, как это делают коммерческие косилки, такую площадь заняло бы вечность. Готовых роботов под такую площадь и такую сложную топологию просто не существует. Или не существовало, когда искал, эта область быстро развивается. Поэтому была цель сделать робота, который справится с такой работой.

если не сложно, киньте линк на подобный гироскутер на eBay-е или на Ali (я понимаю, что, копаясь на сайте прошивок можно найти, но вам, imho, чуть проще будет)

С этим я, к сожалению, не смогу помочь. Абсолютно одинаковые гироскутеры могут внутри иметь разные платы. Остается только ориентироваться визуально на вид платы и ее процессор, открутив несколько саморезов с крышки корпуса.

какой у вас получился бюджет проекта?

Примерно 2500 рублей, включая самоцентрирующиеся колесики. Используя существующую бензиновую газонокосилку, конечно. Это бюджет на переделку ее в роботизированную. Из них 2000 руб за б/у гироскутер с Авито. Если покупать новую газонокосилку для этой цели, я бы наверно взял электрическую аккумуляторную с двумя батареями. Чтобы пока одна работает, другая успевала зарядиться.

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

На видео ручное управление с телефона. Я специально выбирал кадры подинамичнее, чтобы показать возможности. Ехать медленнее она, разумеется, может). И быстрее тоже. В этом ролике везде стояло ограничение на максимальный газ примерно 40%. Так что 10" колеса легко тянут 45 кг бензиновую газонокосилку. Позднее я косил ей высокую траву ~20-30 см, тоже ехала без проблем. При этом от самоцентрирующихся колесиков довольно большое сопротивление. Пока был вариант с 4 колесами 8", мне кажется ездила заметно легче (но фото не делал, а уже разобрал).

на видео, на 3:06, тележка забуксовала

Колесо попало в ямку, земля не очень ровная. У меня потом еще несколько раз было застревание на неровностях, откуда приходилось вытаскивать вручную. В обычном режиме она не буксует. Но должен сказать, что на сильно мокрой траве я косить не пробовал (мокрая трава забивает саму косилку).

а почему "двигаясь по спирали"?

Я наверно неправильно выразился. Двигаясь по краю нескошенной травы, как это делает человек. Со стороны это выглядит как движение по спирали, пока трава не закончится. Уже во второй части будет простой автопилот, который это делает, определяя край нескошенной травы дальномерами (ультразвуковым и лазерным) и подруливая в нужную сторону. По сути, аналог как косит человек.

судя по состоянию травы на видео (сорри!), газонокосилка пока в состоянии тестирования?

Да, в процессе тестирования и отладки. Сезон закончился, косить нечего, поэтому продолжить можно будет только в следующем. Я ей раза два косил сложные участки под деревьями с радиоуправления. Очень понравилось! Но нужно доводить и роботизированную часть для открытых пространств. Настраивать отклик по управлению и т.д. Есть трудности и с алгоритмами автопилота. Но заниматься всем этим было интересно.

Информация

В рейтинге
116-й
Зарегистрирован
Активность