허큘렉스 서보모터 4개를 이용하여 만든 2족 로봇의 Walking Test를 진행하였다.
관절이 적다 보니 발바닥의 마찰을 이용한 이동으로 간신히 걸음마 비슷한 것을 구현하게 되었다.
동부로봇에서 제공하는 HerkuleX.cpp 및 HerkuleX.h 를 이용하여 구현하였다.
또한 Torque를 끄게 되면 손으로 서보모터를 원하는 만큼 움직일 수 있다. 이를 이용하여 특정 모션을 만든후 HerkuleX.cpp 에서 제공하는 getPos 함수를 이용하여 필요한 모터 값을 찾았다.
Detail한 코드 설명은 다음에 다루기로 한다.
1. Torque On/Off
BROADCAST_ID는 0xFE로 정의되어 있으며, 이는 연결된 모든 서보 모터에 대하여 동일한 명령을 전달하고자 할때 사용된다.
아래와 같이 TorqueOn / TorqueOff 함수가 제공된다. TorqueOff 함수를 호출시 모터를 손으로 돌려서 원하는 위치로 돌려 놓을 수 있다.
-
HerkuleX motor;
-
motor.TorqueOn(BROADCAST_ID);
-
motor.TorqueOff(BROADCAST_ID);
2. 모터 값 가져오기 getPos()
현제 상태의 모터 정보를 읽어 올 수 있다.
아래와 같은 코드로 0~3 번의 ID를 가지는 모터들의 값을 읽어올 수 있다.
-
cout<<"ID 0 :" << motor.getPos(0) <<endl;
-
cout<<"ID 1 :" << motor.getPos(1) <<endl;
-
cout<<"ID 2 :" << motor.getPos(2) <<endl;
-
cout<<"ID 3 :" << motor.getPos(3) <<endl;
3. 모터 값 찾기
다음과 같이 9개의 동작에 대한 모터 값을 getPos를 이용하여 구한다.
1) Stand Up 상태 :: 이론적으로는 모두 512 값을 가져야 하겠지만, 조립 및 모터의 상태에 따라 약간씩 어긋난 값을 가졌다.
2) Stand Up 상태에서 왼발 들기 (Left Up - LU)
3) 왼발은 든 상태로 앞으로 디딘 후의 값 (Left Forward Left Up - LFLU)
4) 왼발 앞으로 내딛은 상태에서 발을 모두 땅에 붙인 값 구하기 (Left Forward Left Down - LFLD)
5) 왼발을 앞으로 내딛은 상태에서 오른발 들기 (Left Forward Right Up - LFRU)
6) Stand Up 상태에서 오른발 들기 (Right Up - RU)
7) 오른발은 든 상태로 앞으로 디딘 후의 값 (Right Forward Right Up - RFRU)
8) 오른발 앞으로 내딛은 상태에서 발을 모두 땅에 붙인 값 구하기 (Right Forward Right Down - RFRD)
9) 오른발을 앞으로 내딛은 상태에서 왼발 들기 (Right Forward Left Up - RFLU)
(LFRU)
3.에서 구한 값들의 조합으로 전진을 구현해보자.
모든 동작은 두발을 땅에 붙인 차렷자세에서 시작한다. 3-1) 상태
앞으로 걷기 동작 시나리오는 다음과 같다.
1) 왼발 들기 (LU)
2) 왼발 든 채로 내밀기 (LFLU)
3) 왼발 내리면서 오른발 들기 (LFRU)
4) 오른발 든 채로 내밀기 (RFRU)
5) 오른발 내리면서 왼발 들기(RFLU)
2) 에서 5) 번 반복...
동작이 너무 거칠어서 차렷자세에서 발을 든 상태를 추가하였더니 훨씬 부드러워 졌다.
즉...
1) 왼발 들기 (LU)
2) 왼발 든 채로 내밀기 (LFLU)
3) 왼발 내리면서 오른발 들기 (LFRU)
3-1) 오른발 든채로 차렷자세 하기 (RU)
4) 오른발 든 채로 내밀기 (RFRU)
5) 오른발 내리면서 왼발 들기(RFLU)
1) ~ 5) 반복
걷기 동작이 끝날 경우 항상 차렷 자세로 돌아가도록 한다.
마지막 자세가 5) 상태이므로, 1) 수행후 왼발 오른발 모두 내리기를 한다.
5. 뒤로 걷기
우선 왼발을 든 후 나머지는 앞으로 걷기의 반대 순으로 한다.
1) 왼발 들기(LU)
2) 왼발 든 상태에서 뒤로 빼기(RFLU) - 앞으로 걷기의 5) 과 동일한 상태
3) 왼발 내리면서 오른발 들기 (RFRU) - 앞으로 걷기의 4) 와 동일한 상태
4) 오른발 든채로 차렷자세하기 (RU) - 오른발을 반만 뒤로 뺀 상태로 앞으로 걷기의 3-1)과 동일
5) 오른발 뒤로 빼기 (LFRU) - 앞으로 걷기의 3)과 동일한 상태
6) 오른발 내리면서 왼발 들기(LFLU) - 앞으로 걷기의 2)와 동일
1) ~ 6) 반복
6. 왼쪽으로 돌기
- 컨셉은 왼발 들어서 뒤로 뺀 뒤 왼발 내리고 차렷 자세 잡기 를 하게 되면 왼쪽으로 약간 돌게 된다.
이를 반복 하게 되면 왼쪽 Turn이 된다.
1) 왼발 들기 (LU)
2) 왼발 든 상태에서 왼발 뒤로 빼기 (RFLU)
3) 왼발 뺀 상태에서 왼발 내리기 (RFRD)
4) 차렷자세하기
1) ~ 4) 반복
7. 오른쪽으로 돌기
- 왼쪽으로 돌기와 비슷한 컨셉이며 이번에는 왼발을 앞으로 내밀고 중심잡고를 반복한다.
1) 왼발 돌기(LU)
2) 왼발 든 상태에서 왼발 내밀기 (LFLU)
3) 왼발 내민 상태에서 왼발 내리기 (LFLD)
4) 차렷자세하기
1) ~ 4) 반복
8. 모션 Table 값
지금까지 설명한 내용을 바탕으로 만든 모터 값 및 상태를 Table로 만들어 두었다.
Center | Stand 'e' | Left Up 'a' | Right Up 'z' | |
509 | 509 | 509 | ||
500 | 500 | 500 | ||
504 | 439 | 737 | ||
538 | 306 | 603 | ||
Left Forward | Left Up 's' | Left Down 'd' | Right Up 'f' | |
388 | 388 | 388 | ||
382 | 382 | 382 | ||
439 | 504 | 737 | ||
306 | 545 | 603 | ||
Right Forward | Right Up 'x' | Right Down 'c' | Left Up 'v' | |
630 | 630 | 630 | ||
618 | 618 | 618 | ||
737 | 504 | 439 | ||
603 | 545 | 306 |
stand up | a | e | |||||
forward | a | s | f | z | x | v | |
backward | a | v | x | z | f | s | |
turn right | a | s | d | e | 5~6회반복 | ||
turn left | a | v | c | e | 5~6회반복 |
쩝.... 설명하기가 왜이렇게 힘들까....
아무튼 이렇게 2족로봇, 전진 및 후진 좌/우 돌기를 내 마음대로 구현해보았다.
전진/후진 Test
좌/우 돌기 Test
"본 제품은 동부로봇에서 후원하고 아이씨뱅큐 무상체험단 13기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다."