본문 바로가기
Robot/Device Control

허큘렉스 2족 로봇 Moving Test

by lifeseed 2014. 4. 8.

허큘렉스 서보모터 4개를 이용하여 만든 2족 로봇의 Walking Test를 진행하였다.

 

관절이 적다 보니 발바닥의 마찰을 이용한 이동으로 간신히 걸음마 비슷한 것을 구현하게 되었다.

 

동부로봇에서 제공하는 HerkuleX.cpp 및 HerkuleX.h 를 이용하여 구현하였다.

또한 Torque를 끄게 되면 손으로 서보모터를 원하는 만큼 움직일 수 있다. 이를 이용하여 특정 모션을 만든후 HerkuleX.cpp 에서 제공하는 getPos 함수를 이용하여 필요한 모터 값을 찾았다.

 

Detail한 코드 설명은 다음에 다루기로 한다.

 

1. Torque On/Off

 BROADCAST_ID는 0xFE로 정의되어 있으며, 이는 연결된 모든 서보 모터에 대하여 동일한 명령을 전달하고자 할때 사용된다.

아래와 같이 TorqueOn / TorqueOff 함수가 제공된다. TorqueOff 함수를 호출시 모터를 손으로 돌려서 원하는 위치로 돌려 놓을 수 있다.

  1.     HerkuleX motor;
  2.     motor.TorqueOn(BROADCAST_ID);
  3.     motor.TorqueOff(BROADCAST_ID);

 

2. 모터 값 가져오기 getPos()

현제 상태의 모터 정보를 읽어 올 수 있다.

아래와 같은 코드로 0~3 번의 ID를 가지는 모터들의 값을 읽어올 수 있다.

 

  1.     cout<<"ID 0 :" << motor.getPos(0) <<endl;
  2.     cout<<"ID 1 :" << motor.getPos(1) <<endl;
  3.     cout<<"ID 2 :" << motor.getPos(2) <<endl;
  4.     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기 활동의 일환으로 체험 제품을 제공받아 작성되었습니다."