작업 순서는 다음과 같다.
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);
}
사실 다이나믹셀 설정이나 제어 방법은 크게 바뀌지 않았다. 다만, 연결 방식이 좀 더 편리해 지고 있고 모터 종류도 점차 다양해 지고 있어 더욱 편리하게 다양한 타입의 로봇을 개발할 수 있다.
댓글 없음:
댓글 쓰기