닫기
배너

ROS1드라이버로 ADI 트라이나믹 모터컨트롤러 마스터하기

URL복사

개요

 

ADI 트라이나믹 모터 컨트롤러(Trinamic motor controller, TMC) ROS1 드라이버는 로봇 운영체제(robot operating system, ROS) 프레임워크 내에서 TMC의 드라이버 계층과 애플리케이션 계층 간에 통신을 매끄럽고 손쉽게 구현할 수 있게 해준다. 이러한 장점은 다양한 TMC 보드에 적용된다. 이 글에서는 모터 제어, 정보 검색, 명령 실행, 파라미터 수집, 다중 구성 지원을 포함하여 TMC ROS1 드라이버의 기능에 대해 자세히 설명한다. 또한 이 모터 컨트롤러를 임베디드 시스템 및 애플리케이션에 통합함으로써 ROS 프레임워크 내에서 어떠한 이점들을 누릴 수 있는지도 함께 알아본다.

 

ADI 트라이나믹 모터 컨트롤러 ROS1 드라이버


ROS는 로봇 시스템 또는 애플리케이션을 개발할 수 있게 도와주는 드라이버에서부터 첨단 알고리즘에 이르기까지 소프트웨어 라이브러리와 강력한 개발자 도구를 모두 포함하는 로봇 미들웨어다. ADI 트라이나믹 모터 컨트롤러는 새로운 종류의 지능형 액추에이터를 구현할 수 있게 해주며, ROS가 특히 로봇 공학을 비롯해 광범위하게 활용됨에 따라 제조 및 산업 자동화 애플리케이션에서의 활용성을 넓히기 위해 ROS 드라이버와 같은 추가적인 모듈 지원도 지원한다. 아나로그디바이스의 TMC ROS1 드라이버는 ADI의 트라이나믹 모터 제어 언어 통합 개발 환경(TMCL-IDE)과 유사한 기능을 제공하지만, 주요한 차이점이 있다.

 

즉, ROS 지원 시스템 내의 노드가 추가적인 드라이버 설치 없이도 TMC를 사용할 수 있도록 한다는 점이다. 또한 adi_tmcl은 자체 TMCL 프로토콜 해석기를 통합하고 있으므로, TMCL 표준을 준수하는 사용자 요청 명령을 해석할 수 있다. 최종 계층인 tmcl_ros_node는 ROS 시스템과 직접적인 인터페이스를 구축하여 발행자, 구독자, 서비스와 같은 기능을 제공한다. 이들 각각의 기능은 일련의 파라미터를 활용해 사용자가 맞춤화할 수 있는데, 이 부분은 다음 섹션에서 자세히 설명할 것이다.

 

특징

 

1. 다양한 TMC 보드 지원
TMC ROS 드라이버 또는 adi_tmcl은 TMCL 프로토콜을 준수하는 모든 상용 TMC를 지원하도록 설계됐다. 이 글의 작성일을 기준으로 현재는 CAN 인터페이스(특히 SocketCAN)를 지원하지만, 조만간 다른 인터페이스에 대한 지원을 포함하기 위한 개발이 진행 중이다. 이러한 TMC에는 ADI 트라이나믹 PANdriveTM 스마트 모터 및 모듈이 포함되며, 이는 다시 스테퍼 모터와 브러시리스 DC(BLDC) 모터용으로 세분화될 수 있다.

 

ROS 파라미터를 사용하면 adi_tmcl이 다양한 TMC 보드를 원활하게 지원할 수 있으므로 전체 패키지를 다시 구축하지 않고도 tmcl_ros_node를 구성할 수 있다. adi_tmcl/config 디렉토리 내에서, 각 ADI 트라이나믹 모터 컨트롤러 모듈은 2개의 YAML 파일과 연관된다. 사람이 읽을 수 있는 데이터 직렬화 언어로 작성된 이 파일은 ROS 파라미터를 포함하며, 다음 실행 중에 로드돼야 한다.

 

▶adi_tmcl/config/autogenerated/TMCM-XXXX.yaml
이 YAML 파일은 자동 생성되며 모듈에 특화된 파라미터를 포함하므로, 수정할 경우 노드가 다르게 작동할 수 있기 때문에 수정하지 않는 것이 좋다.

 

▶adi_tmcl/config/TMCM-XXXX_Ext.yaml
이 YAML 파일에는 사용자가 (1) 보드와 통신하고(예 : 인터페이스 이름), (2) 모터 제어를 활성화하고, (3) ROS 토픽 이름을 변경하기 위해 수정할 수 있는 모든 파라미터가 포함되어 있다. 예를 들어 TMCM-1636(그림 3)을 사용하고자 한다면, 간단히 그림 1에 보이는 코드를 불러오면 된다.

 

 

여기서 adi_tmcl/launch/tmcm_1636.launch는 TMCM-1636 전용 YAML 파일을 로드한다.

 

 

 

TMCM-1260(그림 6)을 사용하려면 다음을 불러온다.
 

 

여기서 adi_tmcl/launch/tmcm_1260.launch는 TMCM-1260 전용 YAML 파일을 로드한다.

 

 

 

launch 디렉토리는 지원되는 모든 TMC 보드를 포함하고 있다.

 

2. TMCL-IDE를 사용한 TMC 모듈의 1회 구성 설정
ROS를 통해 TMC 보드를 사용하기 전에, 해당 보드를 사용 중인 모터로 보정해야 한다. 모든 보정 작업은 TMCL-IDE를 사용해 수행돼야 하며 EEPROM에 저장돼야 한다(그렇게 하지 않으면 모터가 정확하게 제어되지 않을 수 있다). 보정 및 튜닝 후에는 모든 파라미터를 보드의 EEPROM에 저장해야 한다. 이 작업은 (1) 파라미터 저장, (2) STAP 명령, 및/또는 (3) TMCL 프로그램 생성 및 업로드, 자동 시작 모드 활성화를 통해 수행할 수 있다. 일부 보드는 이들 옵션 중 일부만 지원한다. TMC와 모터의 구성 설정/튜닝을 마치면, TMC ROS 드라이버 설계는 TMCL-IDE를 사용한 1회 구성 설정에 기반해 모터를 제어하도록 간소화된다.

 

3. 모터 작동/중지
TMC ROS 드라이버는 다음 토픽 중 하나로 발행하여 모터를 작동/중지시킨다.
▶/cmd_vel (geometry_msgs/Twist)—모터의 속도 설정
▶/cmd_abspos (std_msgs/Int32)—모터의 절대 위치 설정
▶/cmd_relpos (std_msgs/Int32)—모터의 상대 위치 설정
▶/cmd_trq (std_msgs/Int32)—모터의 토크 설정
참고 : 다축 TMC 구성에서는 다양한 모터에 대한 개별적인 토픽이 있다.

 

사용자는 자신의 ROS 시스템을 연결해 이러한 특정 토픽을 발행함으로써 모터의 동작을 제어할 수 있다. 토픽의 선택은 특정 애플리케이션, TMC 설정, 그리고 사용 중인 모터의 종류에 따라 달라진다. 예를 들어 바퀴 달린 로봇의 경우에는 사용자가 속도를 설정하는 것을 선택할 수 있지만, 그리퍼의 경우에는 위치를 설정하는 것이 더 적절할 수 있다.

 

이해를 돕기 위해 adi_tmcl/scripts/fake_cmd_vel.sh 스크립트를 예로 들어 보면, 이 간단한 스크립트는 시계 방향과 반시계 방향으로 모두 모터의 회전을 조정하여 속도를 점점 더 높인다. 이를 실행하려면 그림 7에 보이는 명령을 수행하면 된다.

 

 

참고 :
▶터미널 2와 3은 나란히 보는 것이 가장 좋다.
▶터미널 1에서 명령을 복사(Ctrl-C)한 다음, 완료되면 터미널 2에서 실행한다.
▶터미널 3의 명령은 자동으로 중지된다.

 

모터가 작동했는지 확인할 수 있도록, 그림 8은 TMC로부터 읽어온 실제 속도의 그래프를 보여준다(/tmc_info_0).

 

 

4. TMC/모터 정보 검색
시스템은 다음 토픽을 구독함으로써 TMC ROS 드라이버에서 정보를 가져와 확인할 수 있다.
▶/tmc_info (adi_tmcl/TmcInfo)—전압, TMC 상태, 실제 속도, 실제 위치 및 실제 토크 정보를 제공한다.
참고 : 다축 TMC 구성에서는 다양한 모터에 대한 개별적인 토픽이 있다.

 

사용자는 자신의 ROS 시스템들을 연결하여 이러한 지정된 토픽을 구독할 수 있다. 이를 통해 사용자는 파라미터 값을 바탕으로 모니터링하고 필요한 조치를 취할 수 있다. 예를 들어, 특정 애플리케이션 환경에서 TMC 상태에 오류가 탐지되면 시스템을 중지할 수 있고, 또는 모터가 특정 위치에 도달하면 사전 프로그래밍된 조치를 실행하도록 선택할 수 있다. 일례로 adi_tmcl/scripts/fake_cmd_pos.sh는 모터를 시계 방향으로 회전시킨 다음, 위치의 크기가 증가하면 다시 반시계 방향으로 회전시키는 간단한 스크립트다. 그림 9에 보이는 명령을 실행하면 된다.

 

 

모터가 작동했는지 확인할 수 있도록, 그림 10은 TMC에서 읽어온 실제 위치의 그래프를 보여준다(/tmc_info_0).

 

 

5. 사용자 맞춤형 TMC 명령 실행
시스템은 다음 기능을 실행하여 TMC 파라미터에 액세스하고 조정할 수 있다.
▶tmcl_custom_cmd (adi_tmcl/TmcCustomCmd)—TMC의 축 파라미터(AP) 및 글로벌 파라미터(GP)의 값을 가져오거나 설정한다.

 

사용자는 특정 애플리케이션 요구사항을 충족하기 위해 이 서비스를 ROS 시스템에 통합하는 옵션을 사용할 수 있다. 이 기능은 사용자가 ROS 드라이버로부터 TMC 보드를 직접 설정할 수 있게 해준다. 예를 들어, 사용자는 최대 전류에 대한 축 파라미터 설정(set the axis parameter, SAP)을 선택함으로써, 허용되는 절대 전류 레벨을 조정할 수 있다.

 

그러나 잘못 설정하면 TMC ROS 드라이버 오류로 이어질 수 있으므로, 사용자는 이 기능을 통해 수정하는 파라미터를 철저히 이해하고 있어야 한다. 이러한 이유로, 모든 구성 설정은 TMCL-IDE를 통해 수행할 것을 강력히 권장한다. 그림 11은 이 서비스를 호출하는 예제로서, 명령어 유형이 208인 DrvStatusFlags에 대한 GAP(get axis parameter) 동작을 보여준다.
 

 

6. 모든 축 파라미터 값에 액세스
시스템은 다음을 통해 TMC 축 파라미터(AP)의 값에 액세스할 수 있다.
▶tmcl_gap (adi_tmcl/TmcGapGgpAll)—지정된 모터/축의 모든 TMC의 축 파라미터(AP) 값을 가져온다.

 

사용자는 ROS 시스템과 이 기능을 통합해 특정 애플리케이션의 요구를 충족할 수 있다. 예를 들어, 이 서비스는 엔코더 스텝, PI 튜닝, 정류 모드 등과 같은 AP를 포함해 TMC 보드의 현재 설정 및 상태를 캡처할 수 있다. 그림 12는 부분적인 출력의 예제를 나타낸다. 사용자는 이 결과를 분석해 1회 구성 설정이 보드의 EEPROM에 올바로 저장되었는지 확인할 수 있다. 그림 13은 이 서비스를 실행한 후 얻은 출력의 일부를 나타낸다. 사용자는 이 결과를 통해 1회 구성 설정이 보드의 EEPROM에 정확하게 저장됐는지 확인할 수 있다.

 

 

7. 모든 글로벌 파라미터 값 액세스
시스템은 다음을 통해 TMC 글로벌 파라미터(GP)의 값에 액세스할 수 있다.
▶tmcl_ggp (adi_tmcl/TmcGapGgpAll)—모든 TMC의 글로벌 파라미터(GP)의 값을 가져온다. 

 

이 기능을 활용하면 TMC 보드의 현재 구성 설정과 상태를 확인할 수 있다. 액세스할 수 있는 일부 GP에는 CAN 비트 레이트, 직렬 보 레이트(baud rate), 자동 시작 모드 등이 포함된다.

 

 

8. 다중 TMC 보드 구성
여러 개의 TMC 보드가 필요할 수 있는 대형 시스템(예 : 로봇 팔)의 경우, TMC ROS 드라이버를 사용하면 여러 장치들을 구성할 수 있다.

 

a. 다중 CAN 채널을 사용하는 다중 TMC 보드
그림 14처럼 사용자가 TMC 보드당 1개의 CAN-USB를 갖는 경우, namespaces를 추가해 각 노드의 인스턴스를 구분한다. 이 특정 활용 사례에서 comm_interface_name 파라미터는 보드와 정확한 통신을 보장할 수 있도록 업데이트돼야 한다.

 

 

 

그림 15의 코드는 이 활용 사례를 구성하기 위한 샘플 실행 파일이다. 이 예제에서 모터 A는 /tmcm1/cmd_abspos에 발행하고, 모터 B는 /tmcm2/cmd_abspos에 발행하고, 모터 C는 /tmcm3/cmd_abspos에 발행하여 제어할 수 있다.

 

b. 단일 CAN 채널을 사용하는 다중 TMC 보드
TMC ROS 드라이버에 의해 지원되는 또 다른 구성은 그림 16에서 보는 바와 같이 단일 CAN 채널을 사용하는 다중 TMC 보드다. 앞서 설명한 다중 TMC 보드 지원과 마찬가지로 각 노드 인스턴스를 구분하기 위해 namespaces가 도입됐다. 모든 보드에 대해 comm_interface_name을 일관되게 유지한다.

 

각 보드와 정확한 통신을 보장하도록 comm_tx_id 및 comm_rx_id를 조정한다. 그림 17은 이 활용 사례를 구성하기 위한 샘플 실행 파일을 보여준다. 이 예제에서 모터 A는 /tmcm1/cmd_abspos에 발행하고, 모터 B는 /tmcm2/cmd_abspos에 발행하고, 모터 C는 /tmcm3/cmd_abspos에 발행하여 제어할 수 있다.

 

9. ROS 시스템/애플리케이션에 손쉽게 통합
ROS가 제공하는 메시지 전달 시스템을 통해 대형 시스템은 노드의 상호 교환을 손쉽게 할 수 있다(드라이버, 알고리즘 등). TMC ROS 드라이버의 개발은 이러한 이점을 TMC 보드에까지 확장함으로써 ROS 시스템/애플리케이션에 매끄럽게 통합할 수 있게 해준다.
 

 

 

a. AGV/AMR에 통합
그림 18은 navigation_node가 geometry_msg/Twist 형식으로 /cmd_vel을 전송하여 모바일 로봇을 어떻게 제어하는지 보여준다. 다음으로 motor_controller가 geometry_msg/Twist 형식으로 /wheel_velocity를 통해 피드백을 전송하므로 navigation_node가 그에 따라 재보정을 할 수 있다.

 

 

navigation_node가 발행하고 구독하는 위치를 확인함으로써 motor_controller는 tmcl_ros_node에 의해 쉽게 변경될 수 있다(그림 19). TMC 정보 검색 기능과 유사하게, adi_tmcl은 휠 속도에 대한 실시간 정보를 발행하고, wheel_velocity_node는 휠 속도 정보를 adi_tmcl/TmcInfo에서 geometry_msg/Twist로 변환한다. 새로운 아키텍처와 통합 TMC 보드가 정확한 데이터 형식을 따르므로 모바일 로봇이 동일하게 작동할 것으로 예상할 수 있다.

 

 

b. 로봇 팔에 통합
그림 20은 TMC 보드를 로봇 팔의 픽-앤-플레이스 애플리케이션에 통합하려면 로봇 팔을 제어하는 데 여러 개의 모터가 필요하다는 것을 보여준다. 앞서의 사례와 유사하게, 사용자는 pick_and_place_node가 예상되는 데이터 형식을 구독·발행하도록 보장해야 한다. 

 

결론

 

ADI의 TMC ROS1 드라이버는 ROS 관리 시스템 내에서 기본 TMC 드라이버 계층과 애플리케이션 계층 간에 원활한 통신을 손쉽게 구현할 수 있게 한다. 이러한 장점은 다양한 TMC 보드에 적용된다. 지금까지 다음을 포함하여 ADI 트라이나믹 모터 컨트롤러 ROS1 드라이버가 제공하는 특징을 자세히 살펴봤다.

 

▶모터 동작 제어
▶모터 및 컨트롤러 정보 검색
▶TMC 명령 실행
▶축 및 글로벌 파라미터 값 가져오기
▶다중 TMC 보드 구성 지원

 

이러한 모든 기능은 ROS의 메시지 전달 시스템을 활용하여 구현되므로 이들 모터 컨트롤러를 ROS 기반 시스템 및 애플리케이션에 손쉽게 통합할 수 있다.

 

헬로티 서재창 기자 |









배너









주요파트너/추천기업