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

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

Не паникуй

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

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

Упрощать

Давайте рассмотрим случай, когда робот собирает предметы со стола. Если мы посмотрим на проблему, то знаем, что над объектами всегда будет свободное пространство. Очевидно, что это огромное ограничение для нашей среды, но оно значительно упрощает проблему.

Теперь, когда у нас есть это ограничение для нашей среды, можно быстро и эффективно реализовать простое решение:

  • вычислить точку, которая на один шаг ближе к цели от того места, где мы находимся

  • если следующая точка находится в столкновении, двигайтесь вверх, пока столкновения больше не будет

  • повторяйте, пока не достигнете цели.

Заключительные слова

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

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

Мне бы хотелось услышать ваши мысли. Давайте подключимся к Twitter @ugocupcic.

Молодцы, что дожили до конца! Если вам понравилось, как насчет того, чтобы поставить лайк / поделиться этой статьей?