산업용 로봇의 trajectory generation 방법은 ?

여러 형태의 robot arms과 다양한 응응을 지원하기 위해 trajectory generator 에 새로운 routines이 추가되는 경우가 빈번하며, 이에 따라 trajectory generator의 source code가 점점 “스타게티 코드”로 변화되는 것을 경험할 수 있다.

robotics textbook의 trajectory generator chapter를 보면,  대부분 설명의 편의를 위해 수식의 유도 과정만을 설명하고 있다. 실제 trajectory generator를 개발하려면 많은 구현상의 문제를 해결해야 한다.

trajectory generator의 구현에 참고하기 위해 인터넷에서 trajectory generator의 source code를  검색해 보면, 많은 경우 textbooks의 수식을 단순히 C language로 작성해 놓았거나 robot package의 sub-module로서 작성되어 있기 때문에 실제  큰 도움이 되지 않는다.

trajectory generator의 구조는 오래 전에  정립이 되어 더 이상 연구 대상이 아니다. 따라서 관련 기술 자료를 찾기 어려울 뿐, trajectory generator의 구현에 대한 연구가 없었던 것은 아니다.

다음은 내 report에서 발췌한 trajectory generator의 구현 예이다.

Trajectory generator(TG)를 finite-state machine으로 정의하여 각 state에서 필요한 계산 과정을 Table 8.13에 보였다. Table 8.13의 TG를 실제 robot programming system에 적용하려면 data structure나 관련 function의 정의 및 coding이 필요하다. 이러한 작업은 많은 노력과 시간이 소요되기 때문에, TG의 실제 coding 결과를 보이고 기존 robot programming system과의 interface 방법을 설명하고자 한다.

RCCL v1.0에서 destination position은 position equation을 이용하여 기술되고, move() command에 의해 motion request가 queue에 넣어 진다. 주어진 motion request에 대해 28ms 마다 setpoint_n()을 실행하여, servo controller를 위한 setpoints를 계산한다. 따라서 RCCL의 setpoint_n() routine은 trajectory generator의 역할을 수행한다고 할 수 있다.

RFMS system의 TG는 Table 8.13을 기준으로 구현되었으며, 이에 대한 설명을 RFMS software manual과 source code listing에서 찾아 볼 수 있다. 그러나 RFMS system은 TG의 계산 기능을 supervisor processor와 joint processors로 나누어 수행하고 joint processor code의 일부는 assembly lanuguage로 작성되어 있기 때문에, RFMS의 TG를 RCCL에 그대로 적용할 수 없다.  RFMS의 TG의 구조를 참조하고,  RCCL library를 이용하여 GetEx(), ik_solve(), GetLDR()과 같은 routine()을 구현함으로써, RCCL의 TG를 새로이 작성하였다.