로봇 충돌 방지를 위한 5가지 검증된 전략 (그리고 최후의 백업 플랜)
작업 공간에서 로봇이 물체와 충돌하는 것을 어떻게 막을 수 있을까요? 삶을 복잡하게 만들지 않고 로봇 충돌을 피하는 방법을 알려드립니다.
로보디케이 포럼의 최근 질문이 로봇의 일반적인 문제를 강조했습니다. 사용자 '마이크로넥스(Micronexx)'가 충돌을 피하는 방법을 물었습니다. 로보디케이가 충돌 없는 경로를 자동으로 생성하는지, 아니면 사용자가 수동으로 조정해야 하는지 물었습니다.
이 문제는 처음 보이는 것보다 더 복잡합니다. 로보디케이에는 자동 라우팅을 포함하여 충돌 방지에 도움이 되는 기능이 분명히 있습니다. 그러나 로봇 공학에서 '충돌 방지'는 깊고 복잡한 주제입니다. 전체 연구 프로젝트가 궤적 계획과 충돌 방지에 전념하고 있습니다. 이를 위한 고급 인공지능 알고리즘까지 개발되었습니다.
좋은 소식은, 우리 대부분에게는 그렇게 복잡할 필요가 없다는 것입니다. 로봇이 물체와 충돌하는 것을 막는 더 쉬운 방법들이 있습니다.
로봇 충돌을 피하는 5가지 쉬운 방법
보통 단순하게 시작하는 것이 가장 좋습니다.
로봇 프로그래밍에서 어떤 문제를 해결할 때 이 경험칙은 좋습니다. 로봇이 고급 기능을 수행할 수 있더라도, 단순한 공학적 해결책이 종종 최선입니다.
로봇이 물체와 충돌하는 것을 막는 5가지 간단한 방법은 다음과 같습니다.
1. 처음부터 작업 공간을 제대로 계획하세요
작업 공간이 잘 계획되지 않았을 때 충돌이 가장 자주 발생합니다. 종이에 스케치하는 등 작업 공간을 계획하는 것으로 로봇 통합을 시작해야 합니다.
로봇이 움직일 영역과 닿지 않을 영역을 계획하세요. 로봇의 동작 순서를 프로그래밍하기 전에 자신의 팔로 '연기'해 보세요. 이는 잠재적 문제를 발생 전에 줄이는 매우 효과적인 방법이며, 매우 빠르게 할 수 있습니다.
2. 잠재적 장애물을 물리적으로 제거하세요
충돌을 피하는 가장 좋은 방법은 로봇이 충돌할 것이 없도록 하는 것입니다. 작업 공간에서 로봇의 경로를 방해할 수 있는 모든 것을 제거하는 것을 의미합니다.

작업 공간의 다른 영역 사이에 명확한 경로가 있는지 확인하세요. 로봇이 한 위치에서 물체를 집어 다른 위치에서 조립한다면, 이 두 위치 사이의 작업 공간에서 모든 것을 제거하세요.
이것은 명백해 보이지만, 오프라인 프로그래밍을 사용할 때 잊기 쉽습니다. 예를 들어, 로봇 작업 공간에 기둥이 있는 것을 보고 "괜찮아. 로봇 프로그램에서 피하면 돼"라고 말할 수 있습니다. 하지만 기둥이 존재하지 않는 시뮬레이션 환경에서 프로그래밍하다 보면 기둥을 잊고 로봇이 기둥을 통과하도록 프로그래밍하게 됩니다.
3. 현실 세계를 시뮬레이션과 일치시키세요
현실 세계와 로보디케이 내의 시뮬레이션은 가능한 한 밀접하게 일치해야 합니다. 이는 두 가지 방법으로 달성할 수 있습니다:
- 물리적 작업 공간의 정확한 모델을 시뮬레이션 내에 만들기 — 모든 물체의 정확한 위치를 측정하고 소프트웨어에 모델링하는 과정입니다. 매우 시간이 많이 걸릴 수 있으며, 시뮬레이션의 정확도에 더 의존할수록 오류의 여지는 줄어듭니다.
- 시뮬레이션에 없는 물체를 현실 세계에서 제거하기 — 불필요한 물체를 제거하여 실제 작업 공간을 단순화하는 과정입니다.
실제로 이 둘을 결합하는 것이 최선입니다. 물리적 작업 공간에서 불필요한 모든 물체를 제거하고 필요한 모든 물체를 시뮬레이션에 추가하세요.
4. 프로그래밍 타겟을 수동으로 조정하세요
복잡한 충돌 방지 알고리즘을 사용하기 전에, 로봇의 움직임을 직접 조정해 보세요. 대부분의 애플리케이션에서 로보디케이 내 타겟을 수동으로 이동하는 것은 빠르고 효과적이며 견고한 해결책입니다.
예를 들어, 조인트 이동(Joint Move) 명령 중 로봇이 물체와 충돌한다면, 단순히 웨이포인트를 몇 개 추가하여 물체를 피하면 됩니다. 아니면 더 나아가, 그 물체가 애초에 작업 공간에 꼭 있어야 하는지 물어보세요.
충돌을 크게 줄일 수 있는 한 가지 관행은 각 이동이 '이동 이동(traveling move)'인지 '작업 이동(operational move)'인지 결정하는 것입니다. 장애물이 없는 자유 공간에서만 이동 이동을 수행하세요. 그런 다음 작업(소위 '접근 거리')에서 약간 떨어진 거리에서 멈추고 조심스럽게 작업에 들어가 작업 이동을 수행하세요.
5. 머시닝 위자드의 새로운 기능을 사용하세요
로봇 머시닝은 자동 궤적 계획이 필요할 수 있는 작업 중 하나입니다. 로보디케이는 내장된 머시닝 위자드를 사용하여 머시닝 경로를 쉽게 생성할 수 있게 합니다.
위의 조언을 따랐다면 대부분의 경우 충돌이 없을 것입니다. 하지만 최신 버전의 로보디케이에 추가된 머시닝 작업 중 자동으로 충돌을 피하는 옵션이 있습니다. 포럼에서 알버트(Albert)의 답변을 읽어보세요. 이 새로운 기능을 사용하는 방법을 설명합니다.
이 기능은 툴의 Z축을 중심으로 로봇을 자동으로 회전시켜 충돌을 피합니다. 결과적으로 모든 충돌을 피할 수는 없지만 머시닝 위자드의 견고성을 향상시킵니다.
최후의 수단: 고급 모션 플래너 사용
위의 모든 단계를 거쳤는데도 여전히 자율적 충돌 방지가 필요하다면 '대포'를 꺼내야 할 때입니다. 이는 서드파티 모션 플래닝 알고리즘을 사용하여 로봇 궤적을 생성하는 것을 의미합니다.
자동으로 충돌을 감지하고 피하는 궤적 플래너는 많습니다. 하지만 대부분 매우 초기 단계의 연구 프로그램이라 그다지 신뢰할 수 없습니다. 또한 대부분 2차원에서만 움직이는 이동 로봇용으로 설계되었습니다.
그러나 산업용 로봇 매니퓰레이터에 작동하는 괜찮은 궤적 플래너도 몇 가지 있습니다. 경고하지만, 이를 사용하려면 상당한 프로그래밍이 필요합니다.
- MoveIt! — 로봇 매니퓰레이션을 위해 가장 개발된 그래픽 모션 플래너 중 하나입니다. OMPL 프레임워크를 사용하고 비교적 쉬운 그래픽 인터페이스를 제공합니다. ROS에 통합되어 있습니다. 이미 ROS에 익숙하다면 좋은 옵션일 수 있습니다. 그렇지 않다면 꽤 가파른 학습 곡선이 있을 수 있습니다.
- 오픈 모션 플래닝 라이브러리(OMPL) — MoveIt! 없이 OMPL만 단독으로 사용할 수도 있습니다. C++ 라이브러리와 파이썬 바인딩을 제공합니다. 상당한 양의 문서가 있지만, 라이브러리 기능이 많아 여전히 학습 곡선이 있습니다.
- 버블즈(Bubbles) — 로보디케이 CEO 알버트 누비올라(Albert Nubiola)가 추천하는 작은 라이브러리입니다. 매니퓰레이터용 독립형 모션 플래너로 확률적 로드맵 알고리즘(PRM)을 사용합니다. C++로 작성되었으며 문서가 거의 없습니다. 하지만 프로그래밍 마법사이고 도전을 원한다면, MoveIt을 사용하는 것보다 훨씬 덜 부풀려진 솔루션을 제공할 수 있습니다.
일반적으로 더 쉬운 방법 중 하나를 사용하여 충돌을 피하는 것이 좋습니다. 하지만 고급 알고리즘이 필요하다면 충돌 방지는 매혹적인 주제입니다.
어떤 충돌이 여러분의 로봇 애플리케이션에 문제를 일으켰나요? 아래 댓글이나 링크드인, 트위터, 페이스북, 인스타그램 또는 로보디케이 포럼에서 토론에 참여해 알려주세요.