2019년 8월 27일 화요일

로보티즈 U2D2 이용한 다이나믹셀 연결 및 제어 방법

이 글은 U2D2를 이용한 다이나믹셀 연결 및 제어 방법을 간략히 정리한다. 기존에는 시리얼 포트를 이용한 장치를 상호 연결을 위해 사용하였지만 최근 USB 타입의 U2D2로 변경되었다.

작업 순서는 다음과 같다.

1. 다이나믹셀 위저드 다운로드
2. U2D2와 다이나믹 셀 연결
3. 설정

우선 다음 그림과 같이 U2D2와 모터를 연결한다. 그리고 다이나믹셀 위저드를 실행한다.

위저드는 모터의 상태와 ID값 등을 설정할 수 있다. 모터는 데이지 체인 방식으로 전원과 신호선을 연결하는 방식이므로 같이 연결할 모터의 ID는 서로 달라야 한다.

모터 상태 모니터링 및 설정

모터 제어 코딩 방법은 기존과 동일하다. 485 확장보드를 사용하면 DXL_BUS_SERIAL3로 코드를 변경해야 하며, 앞에서 확인한 다이나믹셀과 통신속도로 Dxf.begin() 입력숫자를 설정해야 한다. 

소스 코드는 다음과 같다.

#define DXL_BUS_SERIAL1 1  //Dynamixel on Serial1(USART1)  <-OpenCM9.04
#define DXL_BUS_SERIAL2 2  //Dynamixel on Serial2(USART2)  <-LN101,BT210
#define DXL_BUS_SERIAL3 3  //Dynamixel on Serial3(USART3)  <-OpenCM 485EXP
/* Dynamixel ID defines */
#define ID_NUM 1
/* Control table defines */
#define GOAL_SPEED 32
#define CCW_Angle_Limit 8
#define CONTROL_MODE 11

Dynamixel Dxl(DXL_BUS_SERIAL3);

void setup() {
  // Dynamixel 2.0 Protocol -> 0: 9600, 1: 57600, 2: 115200, 3: 1Mbps 
  Dxl.begin(1);
  
  
  //AX MX RX Series
  Dxl.writeWord(ID_NUM, CCW_Angle_Limit, 0); 
  //disable CCW Angle Limit(L) to use wheel mode
  
  //XL-320
  //Dxl.writeByte(ID_NUM, CONTROL_MODE, 1);
}

void loop() {
  //forward
  Dxl.writeWord(ID_NUM, GOAL_SPEED, 400); 
  delay(5000);
  //reverse
  Dxl.writeWord(ID_NUM, GOAL_SPEED, 400 | 0x400);
  delay(5000); 
  //stop
  Dxl.writeWord(ID_NUM, GOAL_SPEED, 0); 
  delay(2000);
}


다이나믹셀의 기준 점은 다음과 같이 점으로 표시되어 있다. 마운트 부품도 기준점 표시가 되어 있으니 참고 한다. 모터와 마운트 조립시 이 기준점에 맞춰 조립하는 것이 좋다. 기준 각도는 6시 방향이며, 시계 반대방향이 +각도이다. 
모터 기준 각도 표시

마운트 부품과 모터가 체결한 모습 

참고로, 마운트는 각 모터별로 호환되는 것이 다르다. 마운트 호환성은 다음 링크를 참고 한다. 마운트는 구매할 수 있으나 나머지 로봇 기구부는 직접 설계해 제작하는 것이 보통이다.
아래는 로보티즈에서 제공하는 WHEEL POSITION 예제를 통해 300 지점에 각도를 회전한 모습이다.
회전 모습(MX-106. 300지점)

이 경우 소스코드는 다음과 같다.
void loop() {  
  //Turn dynamixel ID 1 to position 0
  Dxl.writeWord(ID_NUM, GOAL_POSITION, 0); //Compatible with all dynamixel serise
  // Wait for 1 second (1000 milliseconds)
  delay(1000);              
  //Turn dynamixel ID 1 to position 300
  Dxl.writeWord(ID_NUM, GOAL_POSITION, 300);
  // Wait for 1 second (1000 milliseconds)
  delay(1000);              
}

사실 다이나믹셀 설정이나 제어 방법은 크게 바뀌지 않았다. 다만, 연결 방식이 좀 더 편리해 지고 있고 모터 종류도 점차 다양해 지고 있어 더욱 편리하게 다양한 타입의 로봇을 개발할 수 있다.



댓글 없음:

댓글 쓰기