- BrainTools - https://www.braintools.ru -

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 1

После прошлой статьи [1] про железо нашего беспилотного трактора от Когнитив в комментариях набралось много конкретных вопросов: как он вообще «видит» мир, как едет там, где нет спутников, и что происходит, когда перед ним внезапно оказывается корова. Отвечаю на них здесь, и заодно рассказываю, как устроена работа в коровниках, потому что это одна из основных текущих задач для платформы.

Как трактор распознает препятствия: три источника вместо одного

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 2

У нас нет единственного «глаза», который решает, ехать дальше или нет. Есть три независимых источника информации [2], и они работают параллельно.

Первый: детекция. Нейросеть по изображению с камеры детектирует известные классы объектов: людей, технику, автомобили. Дальше мы оцениваем, как это препятствие расположено относительно нашей траектории движения, и если видим опасное сближение, заранее останавливаемся или пропускаем движущийся объект. Лидар в этой связке уточняет 3D-положение объекта: по облаку точек мы понимаем расстояние точнее, чем по одной камере.

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 3

Второй: семантическая сегментация для неклассифицированных препятствий. Яма в асфальте, забор, куст, водоем: то, для чего у нас просто нет отдельного класса объекта. У нейросети есть отдельный сегментационный выход, который размечает кадр на проезжую и непроезжаемую зону. Этот слой мы проецируем на поверхность перед трактором и пересекаем с траекторией движения: если впереди «красная» зона, туда ехать нельзя, даже если мы понятия не имеем, что там за объект.

Третий: сырой лидарный point cloud как дополнительный барьер безопасности. Если что-то физически торчит в облаке точек, но нейросеть его не распознала и не сегментировала, мы всё равно остановимся. Это просто ещё один вход в систему принятия решения об остановке, независимый от первых двух.

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 4

Что происходит дальше: объехать, остановиться или ждать

Логика [3] зависит от того, выполняем ли мы сейчас технологическую операцию или просто перемещаемся из точки А в точку Б.

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

Если же мы находимся на задании и выполняем конкретную технологическую операцию, скажем, вспашку, правило другое: мы не можем самовольно отклониться от маршрута задания. В этом случае трактор останавливается и ждёт, пока препятствие не освободит путь. Логика простая: если перед нами что-то стоит во время выполнения задания, либо это должно уехать и пропустить нас, либо задание изначально было построено некорректно, с препятствием на маршруте, потому что все стационарные препятствия на поле у нас заранее нанесены на карту, и маршрут строится уже с их учётом. А то, чего на карте нет и что появилось динамически, мы объезжаем, если движемся не по заданию, и ждём, если по заданию.

Как боремся с грязной оптикой

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

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

На какой дистанции трактор остановится

Здесь нет одной фиксированной цифры: расстояние, на котором мы физически распознаём препятствие, всегда заметно больше, чем то, которое требуется для остановки. Мы можем увидеть автомобиль в 50 метрах впереди и понимать, что он вообще не мешает нашей траектории, тогда просто продолжаем движение.

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

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

Что видит и чем управляет оператор

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 5

У оператора есть возможность запустить или остановить выполнение задания, а также джойстик для ручного управления (вперёд, назад, влево, вправо), трактор может в любой момент передать управление человеку. Оператору доступна вся телеметрия: заряд батареи, уровень топлива, число видимых спутников и вся бортовая диагностика. Отдельно можно управлять генератором: он запускается автоматически, но оператор может принудительно его остановить или, наоборот, запустить, если нужно.

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 6

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

Как трактор держит связь

Здесь несколько вариантов, и выбор зависит от объекта. Где-то используем обычную сотовую связь. Где-то у заказчика уже развёрнут собственный Wi-Fi на территории. А в одном из проектов мы разворачивали собственную дальнобойную радиосвязь, которая покрывает дистанцию порядка пяти километров и достаточно быстро разворачивается на месте.

Если рядом с трактором нет ни одного из этих специальных каналов, остаётся связь непосредственно с ручным пультом: она добивает примерно на несколько километров. А пользовательский веб-интерфейс на трактор через собственную точку Wi-Fi доступен метров на двадцать, то есть буквально рядом с машиной.

Как трактор понимает, где он находится, без спутников

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

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 7

Когда трактор периодически выезжает из помещения на улицу, например, между коровниками, предусмотрено автоматическое переключение на GPS для тех участков, которые мы не картировали лидаром. Здесь важна доступность RTK-коррекции: без достаточной точности GPS-решения и уверенности, что сигнал будет устойчиво доступен на объекте, такой переход не имеет смысла.

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

Границы и зоны, куда нельзя заезжать

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

Также в основе ситуационной аналитики выступает встроенная нейросетевая подсистема, построенная на архитектуре трансформеров. В режиме реального времени она выполняет семантическую сегментацию видеопотока, пиксельно классифицируя сцену на проходимые (drivable) и непроходимые (nondrivable) зоны. Благодаря механизмам глобального внимания [4] трансформерная модель улавливает тонкие контекстные взаимосвязи между объектами – она не просто выделяет границы дорог, а понимает структуру сцены. Сеть одинаково уверенно распознает динамические объекты: людей, другую технику, случайно оказавшиеся предметы, и учитывает их в семантической карте как временные ограничения. Это незаменимо при работе в коровниках и на подъездных путях, где пространство ограничено, а обстановка постоянно меняется. В итоге сеть корректно интерпретирует сложные неструктурированные участки, где статическая карта бессильна.

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 8

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

Что если трактор сбился с маршрута

Здесь у нас пока нет полноценного решения. Если трактор по какой-то причине сместился с задания, базовый сценарий: остановиться и запросить у оператора дальнейшие инструкции. При этом есть встроенная функция возврата на заранее заданную «домашнюю» точку: если её выбрать, трактор сам построит траекторию и доедет до дома. А вот отдельного алгоритма «самоспасения», например, автоматической попытки сдать назад и восстановить исходный маршрут без участия человека, пока не существует. Это то, что нам ещё предстоит реализовать.

Коровник: как трактор распознаёт корм и подстраивает движение

Для коровника у нас заранее построена базовая траектория движения вдоль кормового стола. Но количество наваленного корма каждый раз разное, и трактор смещает линию своего движения так, чтобы ехать по краю кормовой массы, а не по номинальной линии: в реальных заездах это смещение может доходить примерно до 30 сантиметров. Распознаём мы это тоже отдельной нейросетью, которая дает семантическое представление где находится корм и в каких границах: чем корма больше, тем сильнее смещение, до определённого порога. Если корма перед трактором нет вообще, он просто едет по базовой номинальной линии без каких-либо смещений.

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

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

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

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

Что происходит, если во время работы с орудием появляется препятствие

Если трактор выполняет задание с опущенным орудием и перед ним возникает препятствие, он не пытается строить объезд, просто останавливается и ждёт, пока путь освободится. Логика та же, что и в поле: отклонение от маршрута во время выполнения операции означает прерывание самого задания, а мы исходим из того, что нам должны дать возможность проехать дальше. При этом орудие в этот момент остаётся в том же положении, в каком было: опущенным, если было опущено.

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

Коровы у кормового стола

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

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

Скорость движения в коровнике задана отдельно и ниже полевой: где-то в районе 4–5 км/ч. Единого жёсткого технического требования по скорости здесь нет, мы выбрали значение исходя из безопасности в достаточно тесном и людном (точнее, «коровном») пространстве.

Как разрабатывалось решение именно под коровник

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

Обучение модели и неожиданные трудности

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

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 10

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

Как беспилотный трактор видит препятствия, ориентируется без GPS и толкает корм в коровнике - 11

Самой неожиданной проблемой, которую нельзя было в полной мере предугадать на этапе проектирования, оказалась именно неравномерность корма. Изначально мы не планировали динамически подстраиваться под кормовую массу: предполагалось, что на практике корм распределен более-менее равномерно. В реальности его количество вдоль стола отличается очень сильно, и без динамической подстройки трактор просто не мог нормально выполнять свою функцию. Второй момент: коровы иногда сами заходят на кормовой стол и начинают там ходить, мешая движению трактора; отдельно в симуляторе такой сценарий заранее не прорабатывался, и пришлось разбираться с ним уже по факту.

Сколько времени заняла разработка

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

Как обычно, если у вас остались вопросы по конкретным узлам: распознаванию, навигации или логике поведения [5] на задании, пишите в комментариях, соберём материал для следующего разбора.

Автор: savickiy

Источник [6]


Сайт-источник BrainTools: https://www.braintools.ru

Путь до страницы источника: https://www.braintools.ru/article/34555

URLs in this post:

[1] прошлой статьи: https://habr.com/ru/articles/1066170/

[2] источника информации: http://www.braintools.ru/article/8616

[3] Логика: http://www.braintools.ru/article/7640

[4] внимания: http://www.braintools.ru/article/7595

[5] поведения: http://www.braintools.ru/article/9372

[6] Источник: https://habr.com/ru/articles/1071138/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1071138

www.BrainTools.ru

Rambler's Top100