Как сделать так, чтобы беспилотник переместился из одного места в другое в лесу, не столкнувшись ни с одним деревом? Как сделать так, чтобы робот поднял болт и вставил его в паз, не столкнувшись ни с каким объектом на многолюдной фабрике? Наша способность находить решение этой проблемы — которая называется планированием движений — будет крайне важной для создания нового поколения роботов, которые, в отличие от промышленных роботов сегодняшнего дня, смогут работать в мире, который не был тщательно для них подготовлен.
На первый взгляд, планирование движений кажется простым. Ведь мы делаем это постоянно, даже не обращая внимания. Нам не приходится задумываться о том, как должна маневрировать рука, чтобы достать яйцо из холодильника и не разбить его; мы просто это делаем. И даже маленькие дети, которые весело резвятся в песочнице, становятся экспертами в планировании движений в очень раннем возрасте. К сожалению, планирование движений — это прекрасный пример проблемы, которую люди решают очень просто, а машины — нет. В большинстве случаев самые лучшие планировщики движений для машин планируют движение не меньше чем за несколько секунд.
Основная проблема лежит в выявлении столкновений: когда робот генерирует возможные пути, он должен проверять, столкнется ли он с другими объектами этого мира. Современные планировщики движений генерируют тысячи или даже миллионы коротких движений, которые вместе образуют полное движение и проверяют их на возможность столкновения по одному за раз. На этот процесс уходит порядка 99% расчетной стоимости планирования движения.
Но мозг человека, однако, редко принимает решения одно за другим. Вместо этого он выполняет параллельную обработку задач — то есть использует колоссальное количество нейронов, чтобы делать много вещей одновременно и параллельно. Наш подход в лаборатории, по идее, должен быть таким же параллельным за счет создания отдельных процессоров с огромным количеством цепей, которые могли бы работать параллельно.
В поисках верного пути
Наш подход основан на распространенном методе планирования движений, известном как «дорожная карта». Роботизированные движения наносятся на дорожную карту, подобно тому, как прокладывается маршрут по городу с использованием географической карты. В таком дорожном пути вы прокладываете маршрут из точки А в точку Б, пытаясь сделать его максимально коротким.
В дорожной карте робота каждый пункт является позой робота (скажем, положением манипулятора), а каждая улица, соединяющая два пункта, представляет собой движение между этими двумя позами. Планирование движений включает поиск пути от стартовой позиции до целевой, который не столкнется с препятствиями, которые могут быть поблизости.
Типичные алгоритмы планирования движений строят дорожные карты из десятков или сотен тысяч возможных движений и положений робота. Чем больше дорожная карта, тем лучше, но она требует больше вычислений, поскольку каждое движение приходится проверять на возможность столкновения с окружающей средой, по одному за раз.
Компьютерные процессоры общего назначения, вроде тех, что в вашем ноутбуке или смартфоне, предлагают прекрасную производительность по широкому ряду задач, но недостаточно хороши для планирования движений. Эти процессы состоят из схем, которые осуществляют расчеты по инструкции программы. Они могут быстро просчитывать эти инструкции, но лишь по несколько за раз. Это ограничение имеет смысл, поскольку обычная программа не выдает множества инструкций, которые нужно выполнять, не дожидаясь выполнения предыдущих. Как и в реальном мире: вы сначала готовите пищу, а уже потом моете сковороду.
Работа же по составлению плана движения требует проведения независимых друг от друга расчетов. При обнаружении столкновений, каждое движение в дорожной карте должно проверяться по всем возможным препятствиям одновременно и параллельно.
Рабочий процессор на такой случай имеет отдельную схему для каждого движения на дорожной карте, и все эти схемы работают параллельно. Точно так же, как мозг осуществляет параллельное вычисление, так и процессор просчитывает возможности столкновений.
Новые возможности
Дэниэл Сорин, профессор электрической и компьютерной инженерии из Университета Дьюка, говорит, что для получения дорожной карты с тысячами движений ими был разработан новый процессор. Предыдущие методы просчета занимали несколько секунд и десятки ватт на типичных процессорах. Даже высокопроизводительные графические процессоры занимали около секунды и тратили сотни ватт. Их процессор выполняет планирование движения менее чем за 100 мкс и использует менее 10 ватт мощности.
«Наша производительность настолько выше и эффективнее, что у предыдущих методов, что она открывает новые возможности для роботов и автономного транспорта. Например, робот в вашем доме однажды сможет готовить вам завтрак, даже если молоко не всегда будет на одном и том же месте и даже если вы купили новый холодильник. Автономные автомобили смогут избегать внезапно появляющихся препятствий — вроде коробки, падающей с грузовика, — и при этом не выпуская из вида все возможные будущие движения других автомобилей на дороге. Роботизированные заводы, которые сейчас очень дорогие, поскольку их приходится точно настраивать, в будущем смогут производить более широкий набор товаров по более низкой цене».
Может оказаться, что роботы будущего не будут машинами с одним мощным компьютером в сердце — они будут машинами с несколькими микросхемами специального назначения, оптимизированными для выполнения серьезной вычислительной работы по зондированию и поведению. Как мозг.
Как заставить роботов двигаться быстро и эффективно?
Илья Хель