본문 바로가기

허큘렉스(Herkulex)

버섯돌이의 허큘렉스 다루기 - DRS-0101 서보 모터편


안녕하세요 버섯돌이 유재성입니다.

 

저와 같은 초보분들을 위해 가급적 학습한 순서대로 자세하게 작성해드리고 싶지만...

체험 기간이라 주어진 시간안에 마무리해야 할 필수 미션과 하고 싶은 미션들도 있고...

저도 학습하면서 작성 하려니 시간적 여유가 많지 않아서 글의 순서는 들쭉 날 죽 작성될 듯 싶네요^^

 

가능하면 체험 기간 이후에도 조금씩 추가 및 보완할 예정이니 나중에 목차를 참고하셔서 보시기 바라며,

편의상 많은 곳에 올려 드리고 있지만 커뮤니케이션이 원활하지 않아서 메인은 제 블로그로 하겠습니다.

(사실, 아는 게 없어서 얼마나 도움이 될지 모르겠군요.^^)

 

그럼 오늘은 가장 핵심이 되는 허큘렉스 DRS-0101 서보모터의 기본에 대해서 살펴보도록 하겠습니다.



DRS-0101 제품은 위 사진처럼 생겼으며, 메뉴얼이 너무 잘 되어있어서 중요 부분만 살펴 보겠습니다.
먼저, http://hovis.co.kr/guide/drs0101_kor.html 사이트에서 DRS-0101 제품의 메뉴얼을 다운 받습니다.

 

오늘 기준으로는 [KOR] Herkulex manual_20140218.pdf 파일이 다운로드 됩니다.

 


 

메뉴얼에는 위와 같은 내용들을 다루고 있으며, 제 경우 서보를 처움 사용하다보니 다양한 체결 방법이 많은 도움이 되더군요.

또한, 제공되는 API가 상당히 쉬운 편인데 서보 모터의 특성과 사용 방법도 도움이되었습니다.

방대한 내용이지만 내용이 상당히 좋으니 한번씩 훑어보시기를 권합니다.*^^*

 


 

흠.. 역시 초보라서 하지 말라는 것 들을 자주 했군요.^^;;;

 

각 부위및 부품 명칭을 알아두는게 나중에 도움이 되니 제품 구성및 명칭을 살펴 보겠습니다.


 


 

허큘렉스 서보의 특징으로는 Smart Servo라고 나오는군요.

그래서 그런지 처음 사용함에도 라즈베리 파이에서 어려움 없이 모션 구현이 가능했습니다.

 


 

처음에는 라즈베리 파이에서 UART로 어떻게 모터 4개를 제어해야 하나 고민했었는데...

서보 뒷면에는 2개의 커넥터가 존재하는데 모든 서보의 핀맵이 동일하며

멀티 드롭 방식으로 서보와 서보를 연결 하는 용도로 사용 가능해서 어렵지 않게 확장 및 제어가 가능하더군요.

 


 

위 그림을 참고하시면 도움이 되리라 봅니다.

 

 

 

좀 더 자세히 보시면 위 처럼 4개의 핀은 GND, VDD, TXD, RXD 순서이며,

첫 번째의 제어기와 연결되는 3개의 서보를 보면 첫번째 서보의 좌측 커넥터는 제어기와 연결되며,

그 외의 커넥터는 옆의 서보를 연결하는 용도로 사용하고 있죠?

딱히 왼쪽 커넥터와 오른쪽 커넥터의 용도가 정해진게 아니기 때문에 원하는 형태로 연결하면 됩니다.

 


 

실예로, 2족 보행 로봇의 조립 메뉴얼을 보면 상단의 서보가 하단의 서보와 케이블로 연결되는 구조입니다.

좌/우측 각 각 1개씩 남은 2개의 케이블은 제어기에 연결되는데...

호비스 제어기 없이 라즈베리로 구현 하려고 보니 씨리얼 인터페이스 유닛의 커넥터 2곳 중 하나는 전원용이고

하나가 서보와 연결되는 곳인데 남은 1개의 케이블은 어떻게 연결해야 하나 고민했던 기억이...^^;;;;

위에도 잠시 설명했듯이 서로 연결되는 구조라 남은 1개의 데이터 케이블은 아무 서보하고 연결하면 되더군요.^^;;;


 

DRS-0101 모델과 DRS-0201 모델이 있는데 크기는 동일하니 특성을 파악하셔서 적절히 활용하시기 바랍니다.

 


 

경험과 지식도 딸리고 머리가 나뻐서 이해가 안되는 부분이지만..

위와 같은 특성으로 제가 원하는 모션이 부드럽게 제어가 가능한것 같습니다.

반면, 원하는 형태로 동작을 안 하는 이유이기도 하겠지만요...ㅜㅜ;;

Profile은 사용자가 설정 가능하기 때문에 특성을 제대로 파악하면 용도에 맞게 적절하게 사용 가능하리라 봅니다.

 


 

각 서보에는 0~253까지의 고유 ID번호를 부여해서 최대 254개의 서보를 연결 가능하며,

Multicast 모드를 이용하면 직결된 모든 서보에 동시에 명령을 전달 할 수 있습니다.

참고로, Multicast 모드는 서보 ID 값으로 254를 사용합니다.

 


 

DRS-0101의 분해능은 0.325도이며, 허큘렉스에서는 편의를 위해 절대 위치 개념과 각도 개념을 함께 제공합니다.

다른 개념들은 다 잊어 버리셔도 서보의 직결 방법과 분해능및 동작 각도는 필수로 알고 계셔야겠지요.


 

글 보다는 그림이 이해하기 쉽기에 그림을 살펴보시기 바랍니다.

서보 모터의 혼을 바라본 상태에서 양쪽 하단 모서리 꼭지점의 26.7도는 사용이 불 가능한 데드 존입니다.

(이해가 쉽도록 하단의 꼭지점을 빨간색 사각형으로 표시했습니다)

 

서보 혼을 바라본 상태에서 12시 방향인 초록색 숫자 512로 표시된 위치가 0도입니다.

0도를 기준으로 시계 방향은 마이너스 각도, 반 시계 방향은 플러스 각도입니다.

각도는 -166.7도 부터 166.7도 까지의 333.4도를 제어 할 수 있습니다.

다만, 권장되는 각도는 -159.8도 부터 159.8도 까지의 총 320도입니다.

 

허큘렉스 서보의 경우 분해능이 0.325도라고 했습니다.

따라서, 서보 모터 우측 하단 꼭지점부터 시작해서 반시계 방향으로 좌측 하단 꼭지점까지를

0.325도 단위로 0부터 1023까지의 절대 좌표 값을 부여합니다.

(1024 단계의 위치 값을 편의상 좌표라고 하겠습니다.)

 

그림을 보시면 쉽게 이해가 가능 할 것입니다.

따라서, 0~1023까지의 1024 단계의 좌표를 이용하시거나 -166.7~166.7도의 범위에서 사용하시면 됩니다.

(안정적으로 사용하시려면 권장 범위 값으로 사용 하셔야겠지요^^)

 

+/-의 각도 제어가 편하신 분들은 각도 개념을 이용하시면 되겠지만..

각도보다 위치 값 개념이 편하신 분들은 0~1023까지의 좌표 값을 이용하시면 됩니다.

 

가끔은 DR-SIM등의 특정 툴이나 다른 작품의 각도 데이터를 절대 좌표로 변환해야 하는 경우가 있습니다.

이 경우 아래의 공식을 이용하시면 편하게 작업이 가능 하리라 봅니다.

 

[각도를 좌표 값으로 변환하는 공식]

 (각도 + 166.7) / 0.325 - 0.325

 

예를들어, -40.889의 경우 공식을 적용하면 386이 되겠습니다.

(-40.889 + 166.7) / 0.325 - 0.325 = 386

 

실수 타입을 정수로 변환하는 과정이라 오차는 존재 할 수 밖에 없으며,

참고로, 다운 받은 메뉴얼의 끝 부분에 0~1023까지의 좌표에 따른 각도 맵핑 표가 있으니 참고 하시기 바랍니다.

 

 

위에서 언급 한 3D Motion Simulator인 DR-SIM의 경우 아래 URL에서 다운로드 가능합니다.

DR-SIM : http://hovis.co.kr/guide/dr_sim_kor.html

 


 

호비스 라이트용 DR-SIM을 내려 받으셔서 설치 하시면 됩니다.(그냥 Next~~~ 연속~~~)

 



먼저 환경 설정에서 원하는 모델을 선택하시고 프레임 메뉴에서 키 프레임을 추가하는 형태로 작업하면 됩니다.

제품이 호비스 라이트용이라서 모델도 호비스 라이트 위주로 나오는데...

제 경우 서보가 4개 있기 때문에 가장 근사치인 5DOF 모델을 선택했습니다.^^;;

참고로, 상단의 사격형 영역이 타임 라인이며, 우측의 사각형 영역이 해당 타임 라인에서의 모터들의 각도입니다.

 

모션 구현시 아쉬운 대로 위 제품을 이용 하시거나 제공되는 API를 이용하셔서 직접 만드셔도 좋으리라 봅니다.

허큘렉스 메니저 프로그램도 함께 활용하면 좋더군요.

제 경우 기존에 DR-SIM으로 구현된 모션을 참고하기 위해 DR-SIM을 이용 하고...

모터의 간단한 테스트를 위해 매니저 프로그램을 함께 이용하는데 괜찮더군요.

그 외에는 getXX 계열 메소드들을 이용해서 간단한 기능들을 구현하면서 작업하고 있습니다.

 

그럼, 절대 좌표 값과 각도 개념을 라즈베리 파이에서 어떻게 사용하는지 API를 잠시 살펴 보겠습니다.

 

절대 좌표 값의 경우 라즈베리 파이용 API에서는 movePos()을 사용하면 됩니다.



movePos()의 경우 id와 pos 파라메터 대신 map 자료형을 전달하면 여러 개의 서보를 한 번에 제어가 가능합니다.



특정 서보의 좌표 값을 조회하기 위한 getPos()이 있으니 적절히 활용하세요.




각도의 경우에는 라즈베리 파이용 API에서는 moveAngle()을 사용하면 됩니다.


 

Angle의 경우 아쉽게도 map 타입은 제공되지 않으며,

특정 서보의 각도 값을 조회하기 위한 getAngle()이 있으니 적절히 활용하세요.


 


 

이전 글에서 살펴봤던 필수 품인 허큘렉스 메니저 킷입니다.

여기서 주의 해야 할 부분에 빨간색으로 표시했습니다.

서보와 서보는 직결하지만 서보와 제어기나 PC는 RX와 TX를 서로 교차시켜야 합니다.

Manager Kit을 이용하시면 굳이 신경쓰지 않아도 됩니다.^^;;

그리고 2번째 주의 사항이 가장 조심해야 할 듯 싶네요...

처음 입문하시는 분들은 반드시 기억 해 두세요.*^^*

 

그 외 메뉴얼을 보시면 통신 방법이나 레즈스터등에 대한 설명이 있습니다.

개인적으로는 서보의 다양한 체결 방법이 나와있으니 살펴 보시길 권해드리며....

허쿨렉스의 최소 반응 시간은 11.2ms입니다.

PWM이었나 어디서 봤었는데 기억이 안나니 대충 시간 단위들은 11.2ms를 배경에 깔고 생각하면 될 듯 싶군요.

 

예를들어, API에서 요청 각도에 도달 시간인 Playtime이 10이라면 11.2ms * 10 = 112ms로 보시면되고,

최대 가속 시간이 254라면 11.2ms* 254 = 2,844 ms = 약 2.844 Sec 라고 보시면 됩니다.

 

대충 이정도만 알면 간단한 작업하는데 문제는 없으리라 봅니다.(제 한계가 여기까지..^^)

다음에는 간단한 메니저 킷의 사용 방법과 라즈베리 파이에서 허큘렉스를 사용하는 방법을 살펴보겠습니다.

 

"본 제품은 동부로봇에서 후원하고 아이씨뱅큐 무상체험단 13기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다."