본문으로 바로가기

[1]. 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (1)

 

 

1.모터 사용을 위해 Dynamixel2Arduino.h 헤더파일을 코드에 포함시키고, 관련 값들을 정의 및 선언합니다.
 
2.모바일베이스에 있는 모터들의 아이디를 선언합니다.
MOBILE_DXL_IDS
배열은 필요한 모터가 모두 존재하는지 확인할 때 사용 할 것입니다.
 
3. setup 에서는 통신 설정 후에 필요한 모터가 모두 있는지 확인하고 모터에 drive modeoperating mode를 설정합니다.
 
1)시리얼모니터, 모터와의 통신을 설정합니다.

 

 

 

[2]. 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (2)

 

 

 

3.setup 에서는 통신 설정 후에 필요한 모터가 모두 있는지 확인하고 모터에 drive modeoperating mode를 설정합니다.
 
2) FindMobileBaseServos 함수를 사용해 MOBILE_DXL_IDS 배열에 있는 아이디의 모터들이 모두 통신 가능한지 확인합니다. 모든 모터를 찾으면 true, 아니면 false를 반환하는 함수입니다.
3) 모터의 DRIVE_MODE를 모바일베이스의 좌측 바퀴는 Normal Mode(0), 우측 바퀴는 Reverse Mode(1)로 설정하고, OPERATING_MODE1로 설정합니다. EEPROM 영역의 데이터 값을 변경하기 위해 설정 전에 모터의 토크를 껐다가 설정 후에 다시 켜 주어야 합니다.
 
 

[3]. 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (3)

 

 

 
4.FindMobileBaseServos 함수는 앞서 선언했던 상수 배열 MOBILE_DXL_IDS 에 있는 아이디를 가진 모터들과 통신이 가능한지 확인해 모두 찾아지면 true, 아니면 false를 반환합니다.
 
1) ids_pinged에는 통신 가능한 모터 아이디들을 저장할 배열입니다. is_each_motor_foundtrue로 초기화되고, 필요한 모든 모터가 찾아졌는지 여부를 저장합니다.
2) ping 함수를 사용해 통신 가능한 모터들의 아이디를 ids_pinged에 저장하고 count_pinged에 사용 가능한 모터 개수를 저장합니다. 이후 count_pinged값에 따라 분기합니다.
 
I.count_pinged 값이 0보다 크고, count_pinged 값이 찾으려는 모터 개수와 같거나 더 많을 때 실행되는 구문입니다.
 
mobile_dxl_ids를 순회할 idx변수와 ids_pinged를 순회할 idx 변수를 선언하고 0으로 초기화 합니다.
mobile_dxl_ids 에 있는 아이디들이 중복 없이 정렬 되어있다는 가정 하에 ids_pinged에 포함되는지 알아내기 위해 두 배열의 요소를 비교합니다. 비교하다가 찾으려는 모터를 모두 찾은 경우에는 breakwhile문을 벗어납니다. 더 이상 비교할 통신가능한 모터가 없는 경우에는 is_each_motor_found 변수에 false를 저장하고 breakwhile문을 벗어납니다.
앞서 while문에서 필요한 모든 모터가 통신 가능한지 확인한 결과가 false라면 에러메시지를 시리얼모니터에 출력합니다.

 

 

 

[4]. 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (4)

 

 

 

4. FindMobileBaseServos 함수는 앞서 선언했던 상수 배열 MOBILE_DXL_IDS 에 있는 아이디를 가진 모터들과 통신이 가능한지 확인해 모두 찾아지면 true, 아니면 false를 반환합니다.

 

2) ping 함수를 사용해 통신 가능한 모터들의 아이디를 ids_pinged에 저장하고 count_pinged에 사용 가능한 모터 개수를 저장합니다. 이후 count_pinged값에 따라 분기합니다.
 
II.count pinged 값이 1 미만이거나, count_pinged 값이 찾으려는 모터 개수와 더 적을 때 실행되는 구문입니다. 에러메시지를 시리얼모니터에 출력하고 is_each_motor_found 변수에 false를 저장합니다.
 

함수 실행 결과인 is_each_motor_found를 반환하고 함수가 종료됩니다.

 

 

[5]. 스마트 액츄에이터의 회전 방향과 속도 제어 코딩 실습 (5)

 

 

 

 

 

5.loop에서는 모바일베이스의 좌측 전방 모터를
 
아래와 같은 순서대로 제어하기를 반복합니다.

전진 방향(양수이므로 CCW)으로 느리게(44*0.229rpm=10rpm) 회전
2
초 대기

후진 방향(음수이므로 CW) 으로 느리게(44*0.229rpm=10rpm) 회전
2
초 대기

전진 방향(양수이므로 CCW) 으로 빠르게 (88*0.229rpm=20rpm) 회전
2
초 대기

후진 방향(음수이므로 CW) 으로 빠르게 (88*0.229rpm=20rpm) 회전
2
초 대기

    모터 정지
    5
초 대기

    * 블랙베리에 프로그램을 업로드 후 좌측 전방 모터의 회전 방향과 속도가 변화하는 것을 확인합니다.

 

728x90
728x90