Download - SoC 로봇워 참가자 교육
SoC 로봇워 참가자 교육
2
목차
1. DRS-0101 주요 레지스터2. DRC-005T 주요 레지스터3. DRS-0101 & DRC-005T 프로토콜4. DR-Visual Logic 활용5. 두뇌보드 프로그래밍 방안6. Q&A
3
1. DRS-0101 주요 레지스터
비휘발성 (EEPROM) 과 휘발성 (RAM) 메모리– 비휘발성 : 전원이 꺼져도 유지 . 설정 값 저장– 휘발성 : 전원이 꺼지면 지워짐 . 동작에 직접적 영향 . 설정 값 , 상태 , 센
서 값 등 저장– 비휘발성 메모리 중 설정 값 영역이 부팅 시 휘발성 메모리에 복사
RW( 읽기 / 쓰기 가능 ) 와 RO( 읽기만 가능 ) 로 나뉨
값을 바꿀 때– 비휘발성 : 현재 동작에 영향 없음 . 재부팅 이후 부터 영향– 휘발성 : 현재 동작에 영향 있음 . 재부팅 시 사라짐 설정 값을 변경 시 비휘발성 & 휘발성 모두 바꾸거나 비휘발성 바꾼 후 재부팅
시켜야 .
레지스터와 프로토콜은 모두 Little Endian– 하위 바이트가 더 메모리의 앞에 위치 . 0x1234 는 0x34, 0x12
4
1. DRS-0101 주요 레지스터
ID(RW, EEP 6/RAM 0) Ack Policy(RW, EEP 7/RAM 1) Torque Policy(RW, EEP 9/RAM 3) Position Kp(RW, EEP 30/RAM 24) Position Kd(RW, EEP 32/RAM 26) Position Ki(RW, EEP 34/RAM 28) Calibration Difference(RW, EEP 53/RAM 47) Status Error(RW, RAM 48) Status Detail(RW, RAM 49) Torque Control(RW, RAM 52) Calibrated Position(RO, RAM 58) Absolute Position(RO, RAM 60)
5
1. DRS-0101 주요 레지스터
ID(RW, EEP 6/RAM 0)– Servo 식별 ID. 0x00~0xFD. 동일 ID 가 같이 연결된 경우 오동작
Ack Policy(RW, EEP 7/RAM 1)– 요청 패킷 수신 시 응답 패킷을 보낼지 여부에 대한 정책
• 0: 무응답• 1: Read CMD(EEP_READ, RAM_READ) 에만 응답• 2: 모든 패킷에 응답
– 패킷의 pID 가 254(broadcasting) 일 경우 무응답– 단 CMD 가 STAT 일 경우 무조건 응답 (254 일 경우도 )
Position Kp, Kd, Ki(RW, EEP 30, 32, 34/RAM 24, 26, 28)– 위치 제어기의 PID 게인 .– 서보에서 덜덜 거리는 소리가 날 경우 Kd 를 낮춰 보는 것을 추천
6
1. DRS-0101 주요 레지스터
Status Error(RW, RAM 48)– 서보의 에러 상태를 나타내는 레지스터
Status Detail(RW, RAM 49)– 서보의 상태와 에러의 상세 내역을 나타내는 레지스터
7
1. DRS-0101 주요 레지스터
Torque Policy(RW, EEP 9/RAM 3)– Status Error 와 비교해서 1 로 설정된 비트에 해당하는 에러가 발생 시
서보의 토크를 자동으로 해제– Status Error 를 해제 후 다시 Torque Control 값을 수동으로 바꿔 주어야
복귀
Torque Control(RW, RAM 52)– 토크의 인가 상태를 제어 .
• 0x00 : Torque Off• 0x40 : Break On( 초기 상태 )• 0x60 : Torque On
8
1. DRS-0101 주요 레지스터
Calibration Difference(RW, EEP 53/RAM 47)– 영점 조절 시 사용하는 -128~127 의 값– Calibration Difference = Absolute Position – Calibrated Position
Calibrated Position(RO, RAM 58)– Calibration Difference 가 적용된 현재 위치 + GPIO 입력 값– LSB 13 비트 (0~12 번 비트 ) : 위치 값– 그 위 2 비트 (13~14 번 비트 ) : GPIO 입력 값 (Active Low)– 마지막 MSB 1 비트 (15 번 비트 ) : reserved– 모터 움직이는 명령은 모두 Calibrated Position 이 기준
Absolute Position(RO, RAM 60)– 보정되지 않은 현재 위치의 Raw Data– 각도 = Raw Data * 0.325
9
2. DRC-005T 주요 레지스터
Special Function(RW, EEP 5) ID(RW, EEP 7/RAM 0) Ack Policy(RW, EEP 8/RAM 1) Torque Off Policy(RW, EEP 9/RAM 2) Status Check Policy(RW, EEP 11/RAM 4) Remocon Channel(RW, EEP 15/RAM 8) Status Error(RW, RAM 16) Status Detail[5](RW, RAM 17) Servo Count(RO, RAM 34) Servo ID[33](RO, RAM 35) Playing Motion(RO, RAM 68) Playing Task(RO, RAM 69) Remocon Length(RO, RAM 74) Remocon Data(RO, RAM 75) ADC Port 1 Sensor Type(RO, RAM 79) ADC Port 2 Sensor Type(RO, RAM 80) ADC Port 1 Sensor Value(RO, RAM 81) ADC Port 2 Sensor Value(RO, RAM 83) ACC/GYRO Connected(RO, RAM 85) ACC X/Y/Z Value (RO, RAM 86, 88, 90) GYRO X/Y/Z Value (RO, RAM 92, 94, 96) Servo Status Error & Detail[32](RO, RAM 106) Servo Position[32](RO, RAM 170)
10
2. DRC-005T 주요 레지스터
ID(RW, EEP 7/RAM 0)– 제어기 식별 ID. 0x00~0xFD. 기본 값 0xFD
Ack Policy(RW, EEP 8/RAM 1)– 요청 패킷 수신 시 응답 패킷을 보낼지 여부에 대한 정책
• 0: 무응답• 1: Read CMD 와 CON_CHECK 등 몇몇 CMD 에 대해서만 응답• 2: 모든 패킷에 응답
– 패킷의 pID 가 254(broadcasting) 일 경우 무응답– 단 CMD 가 STAT 일 경우 무조건 응답 (254 일 경우도 )
Torque Off Policy(RW, EEP 9/RAM 2)– 상태 에러 발생 시 제어기에 연결된 서보 모터의 토크를 풀 것인지 여부– Status Error 와 비교해서 1 로 설정된 비트에 해당하는 에러가 발생 시
연결된 모든 서보의 토크를 자동으로 해제
11
2. DRC-005T 주요 레지스터
Status Error(RW, RAM 16)– 제어기의 상태 오류 내역
Status Detail[5](RW, RAM 17)– 제어기 상태 오류의 더 상세한 내역 코드 ( 최근 5 개 )
12
2. DRC-005T 주요 레지스터
Servo Count(RO, RAM 34)– 연결된 서보의 총 수 ( 최대 32 개 )
Servo ID[33](RO, RAM 35)– 연결된 서보의 ID 가 오름차순으로 저장– 연결된 수만큼 저장되며 나머지 공간은 0xFE(Broadcasting ID)
13
2. DRC-005T 주요 레지스터
Remocon Channel(RW, EEP 15/RAM 8)– 리모컨의 채널 값 (0x61~0x6A)– 현재 사용하는 리모컨의 채널이 일치해야 리모컨 값을 인식할 수 있음
Remocon Length(RO, RAM 74)– 리모컨 버튼이 눌린 길이 . 리모컨 버튼 신호가 들어온 순간부터 125ms
마다 1 증가
Remocon Data(RO, RAM 75)– 리모컨 키 값 . 리모컨 신호가 안 들어올 때는 0xFE
14
2. DRC-005T 주요 레지스터
Playing Motion(RO, RAM 68)– 저장된 모션이 실행 중인지 여부 (실행 중 :1, 아님 : 0)– 모션이 끝날 때까지 대기하려면 이 레지스터가 0 이 될 때까지 기다리면 됨
Playing Task(RO, RAM 69)– 저장된 Task 가 실행 중인지 여부 (실행 중 :1, 아님 : 0)
15
2. DRC-005T 주요 레지스터
Status Check Policy(RW, EEP 11/RAM 4)– 연결된 서보의 현재 위치와 상태를 지속적으로 읽어올지 여부를 설정– 1 로 설정되어 있을 때 , Servo Status Error & Detail 과 Servo Position 을
지속적으로 업데이트
Servo Status Error & Detail[32](RO, RAM 106)– 연결된 서보의 Status Error 와 Status Detail 값이 저장 (2 바이트 )– Status Check Policy 가 1 일 때 지속적으로 업데이트– 단선이 되어 통신이 안되는 경우 0x80, 0x00 으로 변경
Servo Position[32](RO, RAM 170)– 연결된 서보의 Calibrated Position 값이 저장 (2 바이트 )– Status Check Policy 가 1 일 때 지속적으로 업데이트– Calibrated Position = 위치 (13 비트 ) + GPIO(2 비트 )임을 주의
16
2. DRC-005T 주요 레지스터
ACC/GYRO Connected(RO, RAM 85)– 가속도 / 자이로 센서 모듈 연결 여부– I2C 통신이 정상적으로 이루어지면 1, 아니면 0
ACC X/Y/Z Value(RO, RAM 86, 88, 90)– -4096~+4095(-16g~+16g)– 정지 상태에서는 바닥 방향으로 -1g(약 -256) 작용– 서있는 경우 ACC X, Y, Z = 0, -256, 0– 엎드린 경우 ACC X, Y, Z = 0, 0, 256– 누운 경우 ACC X, Y, Z = 0, 0, -256
GYRO X/Y/Z Value(RO, RAM 92, 94, 96)– -32768~32767(-2000dps~+2000dps)– 축의 +방향에서 보았을 때 반시계면 +– 100dps 로 회전 중일 때 레지스터 값은 약 1600
17
2. DRC-005T 주요 레지스터
ADC Port 1 Sensor Type(RO, RAM 79) ADC Port 2 Sensor Type(RO, RAM 80)
– ADC Port 1(좌측 ), 2( 우측 ) 으로 연결된 센서의 종류• 0 : 센서가 연결되지 않음• 1 : PSD 센서가 연결 되었음• 2 : 디지털 거리 센서가 연결 되었음• 3 : DRX-0001M 이 연결 되었음 (Genie)
ADC Port 1 Sensor Value(RO, RAM 81) ADC Port 2 Sensor Value(RO, RAM 83)
– ADC Port 1(좌측 ), 2( 우측 ) 으로 연결된 센서 값• Sensor Type 0 일 경우 : 0• Sensor Type 1 일 경우 : 3~40(cm 단위 )• Sensor Type 2 일 경우 : 0~1(10cm 이상 :1, 이내 :0)• Sensor Type 3 일 경우 : 0
18
2. DRC-005T 주요 레지스터
Special Function(RW, EEP 5)– DRC-005T 를 특수 용도로 쓰고 싶을 때 사용
– 사용자 센서 모드• 0 : 센서 포트에 PSD 혹은 디지털 거리 센서 1 개를 사용 ( 총 2 개 )• 1 : 임의의 아날로그 센서 1 개와 디지털 센서 1 개를 달 수 있음 ( 총 4 개 )
– TTL 통신 모드• Zigbee Serial Interface(TTL 3.3V) 로 통신 가능
– 기본 제공 센서 사용하실 분은 0x02, 직접 제작 센서 사용하실 분은 0x03 으로 세팅하세요 .
19
2. DRC-005T 주요 레지스터
사용자 센서 모드– GND, 5V 로 센서에 전원 공급– Analog 출력을 3 번에 연결– Digital 출력을 4 번에 연결
– 아날로그 센서 값은 ADC Port 1/2 Sensor Value 에 10 비트 0~1023 ADC Raw Data 로 저장
• 변환 식 : Raw Data / 1024 * 5V = Analog 출력 (V)
– 디지털 센서 값은 ADC Port 1/2 Sensor Type 에 0~1 로 저장
20
Header : 0xFF 0xFF Packet Size : 총 바이트 수 pID : 제어할 서보 / 제어기 ID. 0xFE(254) 일 경우 Broadcasting CMD : 명령
– 요청 패킷 : 서보 0x01~0x09, 제어기 0x11~0x1E– 응답 패킷 : 서보 0x41~0x49, 제어기 0x51~0x5E
Check Sum1 : (Packet Size ^ pID ^ CMD ^ Data[0] ^ … ^ Data[n-1]) & 0xFE
Check Sum2 : (~(Packet Size ^ pID ^ CMD ^ Data[0] ^ … ^ Data[n-1])) & 0xFE
Optional Data : CMD 종류에 따라 다름
3. 프로토콜 – 패킷 구조
21
3. 프로토콜 – CMD 종류 ( 서보 )
22
3. 프로토콜 – CMD 종류 ( 서보 )
23
3. 프로토콜 – CMD 종류 ( 제어기 )
24
3. 프로토콜 – CMD 종류 ( 제어기 )
25
3. 프로토콜 – 자주 쓰는 CMD
RAM_WRITE( 서보 )– Address 부터 Length 바이트만큼 RAM Data 로 쓴다 .
예시 – 모든 서보의 Torque ON(52 번 주소 , 1 바이트 , 0x60)
구분 Header Packet Size pID CMD CheckSum Data[0]Data[1
]
Value0xF
F0xF
F7+(2+Lengt
h)0~0xFE 0x03 CS1 CS2
Address
Length구분 Data[2] … Data[Length+1]
Value RAM Data[0] … RAM Data[Length-1]
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Data[2]
Value0xFF
0xFF
0x0A 0xFE0x03
0xA2
0x5C
0x34 0x01 0x60
26
3. 프로토콜 – 자주 쓰는 CMD
RAM_READ( 서보 ) – 요청 패킷– Address 부터 Length 바이트만큼 읽는다 .
예시 – 0 번 서보 Calibrated Position 읽기 (58 번 주소 , 2 바이트 )
구분 Header Packet Size pID CMD CheckSum Data[0]Data[1
]
Value0xF
F0xF
F7+2
0~0xFD
0x04 CS1 CS2Addres
sLength
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Value0xFF
0xFF
0x090x00
0x04
0x34
0xCA
0x3A 0x02
27
3. 프로토콜 – 자주 쓰는 CMD
RAM_READ( 서보 ) – 응답 패킷– Address 부터 Length 개 값을 RAM Data 와 상태를 넣어 응답한다 .
예시 – 0 번 서보 Calibrated Position 응답 (58 번 주소 , 2 바이트 )
구분 Header Packet Size pID CMD CheckSum Data[0]Data[1
]
Value0xF
F0xF
F7+(2+Length)
+20~0xF
D0x4
4CS1 CS2
Address
Length구분 Data[2] … Data[Length+1] Data[Length+2] Data[Length+3]
ValueRAM Data[0]
… RAM Data[Length-1] Status Error Status Detail
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Value0xFF
0xFF
0x0D0x00
0x44
0xFA
0x04
0x3A 0x02
구분 Data[2]
Data[3] Data[4] Data[5]
Value 0xE8 0x63 0x00 0x00
28
3. 프로토콜 – 자주 쓰는 CMD
요청 패킷 CMD 응답 패킷 CMD
EEP_WRITE( 서보 ) 0x01 0x41
EEP_READ( 서보 ) 0x02 0x42
RAM_WRITE( 서보 ) 0x03 0x43
RAM_READ( 서보 ) 0x04 0x44
EEP_WRITE( 제어기 ) 0x11 0x51
EEP_READ( 제어기 ) 0x12 0x52
RAM_WRITE( 제어기 ) 0x13 0x53
RAM_READ( 제어기 ) 0x14 0x54
서보와 제어기의 WRITE/READ CMD
29
3. 프로토콜 – 자주 쓰는 CMD
S_JOG( 서보 )– N 개의 서보를 Play Time 동안 동시에 움직인다 .
구분 Header Packet Size pID CMD CheckSum Data[0]
Value0xF
F0xF
F7+(1+4*N) 0xFE
0x06
CS1 CS2 Play Time
구분 Data[1]~Data[4]
…Data[4*N-3]~Data[4*N]
Value SJOG Data[0] … SJOG Data[N-1]
30
3. 프로토콜 – 자주 쓰는 CMD
S_JOG( 서보 )– N 개의 서보를 Play Time 동안 동시에 움직인다 .
Play Time– 목표 /속도에 도달하는 데 걸리는 시간– 값 * 11.2ms = 시간 . 예 )50 = 560ms
JOG– 목표 위치 /속도– 속도 제어 시 14 번 비트 = 역회전
SET– Stop Flag -> 모터 즉시 정지– Mode -> 0: 위치 , 1: 속도– LED -> LED 점등 여부– Invalid -> JOG 명령 무시
ID– 제어할 ID
31
3. 프로토콜 – 자주 쓰는 CMD
S_JOG( 서보 ) 예시 – 0 번 서보 , 1 번 서보 동시 제어– 실행 시간 : 100(1.12ms)– 0 번 서보 : 위치 제어 , 512, Green LED 점등– 1 번 서보 : 위치 제어 , 400, Blue LED 점등
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Value0xFF
0xFF
0x10 0xFE0x06
0x12
0xEC
0x64
구분 Data[1]
Data[2] Data[3] Data[4] Data[5] Data[6] Data[7] Data[8]
Value 0x00 0x02 0x04 0x00 0x90 0x01 0x08 0x01
32
3. 프로토콜 – 자주 쓰는 CMD
PLAY_MOTION( 제어기 )– Motion No 번 모션을 실행한다 .
Motion No : 모션 번호 0~127. (254 이면 현재 모션 정지 ) Motion Ready : 모션 준비자세 여부 (1 이면 모션의 첫 프레임만 느리게 )
예시 – ID 253 인 DRC 에서 모션 1 번 실행
예시 – ID 253 인 DRC 에서 모션 2 번 첫 프레임만 실행
구분 HeaderPacket
SizepID CMD CheckSum Data[0] Data[1]
Value0xF
F0xF
F7+2
0~0xFE
0x16
CS1 CS2Motion
No.Motion
Ready
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Value0xFF
0xFF
0x090xFD
0x16
0xE2
0x1C
0x01 0x00
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Value0xFF
0xFF
0x090xFD
0x16
0xE0
0x1E
0x02 0x01
33
3. 프로토콜 – 자주 쓰는 CMD
PLAY_TASK( 제어기 )– 제어기의 Task 를 실행한다 .
Instruction– 0 일 때 : 일반 모드로 Task 실행– 254 일 때 : Task 정지– 1 일 때 : 디버깅 모드로 Task 실행– 2 일 때 : 디버깅 모드일 때 , Task 를 한 스텝만 진행 후 멈춤
예시 – ID 253 인 DRC 에서 Task 실행
구분 HeaderPacket
SizepID CMD CheckSum Data[0]
Value0xF
F0xF
F7+1
0~0xFE
0x17
CS1 CS2Instructio
n
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Value0xFF
0xFF
0x080xFD
0x17
0xE2
0x1C
0x00
34
3. 프로토콜 – 자주 쓰는 CMD
REMOCON( 제어기 )– 제어기에 리모컨을 쏜다 .(IR 리모컨을 쏜 것과 동일한 효과 )
Channel : 리모컨의 채널 (0x61~0x6A) Length : 리모컨 버튼이 눌린 시간 (0~240, 1 당 125ms) Data : 리모컨 버튼 키
예시 – 모든 DRC 에 0x61 의 채널로 1 초 동안 버튼 0x21 이 눌림
구분 HeaderPacket
SizepID CMD CheckSum Data[0]
Data[1]
Data[2]
Value0xF
F0xF
F7+3
0~0xFE
0x1C
CS1 CS2Channe
lLength Data
구분 HeaderPacket Size
pID CMD CheckSum Data[0]
Data[1]
Data[2]
Value0xFF
0xFF
0x0A 0xFE0x1D
0xA0
0x5E
0x61 0x08 0x21
35
4. DR-Visual Logic
로봇 Task 프로그래밍 툴 모듈 배치와 Input/Output 핀 연결로 프로그램 작성 프로그램 -> C-like script -> 로봇에 다운로드 실시간 디버깅 기능 ( 스텝 진행 , 중단점까지 진행 )
36
4. DR-Visual Logic
Motion– Move : 모션 실행– Motor : 모터 제어– LED : 제어기 & 머리 LED 제어– Sound : 버저 음계 , 멜로디 재생
– 로봇의 행동을 제어
37
4. DR-Visual Logic
Sensor– Sound Sensor : 소리 방향 센서– Touch Sensor : 머리 터치 센서– Light Sensor : 빛 밝기 센서– Distance Sensor : 거리 센서 (PSD, 디지털 )– Dynamics Sensor : 가속도 / 자이로 센서– Hand Touch Sensor : 손바닥 터치 센서
– 센서의 감지 여부나 기준값 과의 비교 결과를 True/False 로 출력
38
4. DR-Visual Logic
Communication– IR Receive : IR 리모컨 수신– Button : Button
– 모듈에 설정된 IR 리모컨 Key 나 Button 입력이 들어왔는지 여부를 True/False 로 출력
39
4. DR-Visual Logic
Data– Operator : 연산자 (산술 , 논리 , 비교 , 비트 , 증감 )– Variable : 제어기 / 서보 RAM Data, 사용자 변수 , 상수
– 제어기 / 서보의 RAM Data, 사용자가 선언한 변수 , 상수 등과 연산자를 사용해 계산을 하는 모듈
40
4. DR-Visual Logic
Flow– Loop : 무한 반복 / for문– While : while문– Switch : If-else문– Wait : 내용 없는 while문– Delay : 지정한 시간 대기– Continue : 반복문 처음부터 시작– Break : 반복문 빠져 나가기
– 프로그램의 흐름을 제어하는 모듈
41
4. DR-Visual Logic
My Module– 기존에 저장되어 있는 dts 파일을 불러와서 함수처럼 사용– 파라미터 없는 void function
42
4. DR-Visual Logic
커넥터– 모듈의 Input 과 Output 을 서로 이어 한 모듈의 Output 이 다른 모듈의
Input 으로 들어가도록 프로그래밍
43
4. DR-Visual Logic
Task 예제– 거리 센서 사용 예제– 넘어짐 감지 예제– 리모컨 모션 예제– 양산 기본 Task
44
5. 두뇌보드 프로그래밍 방안
1. 순수 두뇌보드 프로그래밍 두뇌보드에서 프로토콜로 모든 제어를 하는 프로그래밍
2. 두뇌보드 – DRC 분담 프로그래밍 DRC 에 Task 를 작성해 무한 반복으로 돌려 놓고 두뇌보드에서는 REM
OCON 패킷을 사용해 제어하는 프로그래밍 두뇌보드의 연산과 통신라인의 부담이 줄음
예 ) 1 번 키를 보내면 좌회전 3회 , 직진 3회 두뇌보드 : PLAY_MOTION->RAM_READ 로 Playing Motion Register 감시 -> 완료 후 다시 PLAY_MOTION 을 6 번 반복
두뇌보드 +DRC : REMOCON
45
6. Q&A
문의사항 : [email protected] Soc관련 자료 : www.dongburobot.com 서비스로봇 자료실 오늘 PPT 자료 , 펌웨어 , 예제 자료 업로드
46
감사합니다 .