Привет, Пикабу!
В своем предыдущем посте я немного затронул тему коллаборативных роботов-манипуляторов, и с удивлением осознал, что это может быть интересно относительно широкому кругу людей. Сегодня продолжу рассказывать о специфике разработки подобных устройств, уделяя основное внимание программной составляющей. И, чтобы мы все представляли в голове одно и тоже, выглядят девайс примерно так:
Основных проблем, связанных с разработкой софта для колоборативных манипов - две. Первая - чтобы манипулятор не уткнулся сам в себя и в своего собрата по работе, вторая - чтобы, вхерачившись в руку-ногу-голову человека, каким-то образом попавшего в рабочую область, не проломил ему все, что можно проломить. А еще лучше - не оставил даже синяка, вовремя прекратив движение. Собственно, решение второй проблемы и является основным критерием, прибавляющий девайсу эпитет "коллаборативный".
Решение первой задачи, кстати, не является обязательным по дефолту. К примеру, если поставить одного робота на ленту конвейера, научить трем позициям и заставить повторять их до скончания времен, то доп. функционал тут вообще не нужен. А вот если два манипулятора с разными таймингами совершают операции, точки выхода которых динамически меняются - это уже интереснее.
Так вот, самый действенный способ заставить робота выполнять третий закон Айзимова (робот должен заботиться о своей безопасности) - предварительное моделирование. Идея проста: на управляющем компе, выдающим сигналы на платы управления сервоприводами, крутится софт, прогнозирующий и визуализирующий положение манипулятора в процессе выполнения той или иной задачи. При условии нахождения двух или более манипуляторов рядом друг с другом - их рабочие области связываются и подгружаются в симулятор, а затем, если нет никаких коллизий, значения углов поворота и скоростей вращения передаются на реальное железо. При виртуальном столкновении же, симуляция повторяется с измененными траекториями/скоростями/таймингами. Выглядит это, примерно, вот так, но только в 3D пространстве. 2D представлено исключительно в целях визуализации принципа действия :)
А теперь к первому закону Айзимова, который нельзя нарушать ну вообще не при каких обстоятельствах (хаха, теперь, ikomas, иди и скажи это разработчикам военных роботов). Есть два способа сделать так, чтобы манипулятор оставил в покое человека, оказавшегося у него на пути. Первый способ заключается в том, чтобы поставить в рабочей области камеру, натренировать нейросети на распознавание кожаного мешка и останавливать движение при опасном сближении. Этот способ практически никем не используется, ибо ресурсов много кушает, вероятность остановки не стопроцентная и ложное срабатывание тоже возможно. Но его реализовать достаточно просто. А вот второй способ - тот еще геморрой.
Суть его заключается в том, что на каждом из движков (а их, как минимум, 6) устанавливаются силомоментные датчики, которые (кто бы мог подумать) измеряют текущую силу и крутящий момент. Эти датчики обрабатываются управляющим компом, который останавливает движение манипулятора при превышении критических значений момента (робот плавно уперся в стену и уже начал ее продавливать) либо при резких скачках момента (робот отвесил неслабую оплюху оказавшемуся рядом человеку). Да, на словах звучит достаточно просто, а вот на практике все несколько сложнее ибо и датчики надо калибровать и пороговые значения моментов настраивать и вообще человек - штука мягкая, а резкий скачок момента происходит при ударе по более жестким объектам.
И какого-то универсального решения этой проблемы в мире пока еще нет. У каждой компании-производителя коллаборативных роботов есть свои коэффициенты, алгоритмы определения столкновений, методики расчета и всякие другие интересные штуки, которые делают роботов все более и более безопасными для нас с вами.