2. DRC-005T 주요 레지스터

Download Report

Transcript 2. DRC-005T 주요 레지스터

SoC 로봇워 참가자 교육
목차
1. DRS-0101 주요 레지스터
2. DRC-005T 주요 레지스터
3. DRS-0101 & DRC-005T 프로토콜
4. DR-Visual Logic 활용
5. 두뇌보드 프로그래밍 방안
6. Q&A
2
1. DRS-0101 주요 레지스터
 비휘발성(EEPROM)과 휘발성(RAM) 메모리
– 비휘발성 : 전원이 꺼져도 유지. 설정 값 저장
– 휘발성 : 전원이 꺼지면 지워짐. 동작에 직접적 영향. 설정 값, 상태, 센
서 값 등 저장
– 비휘발성 메모리 중 설정 값 영역이 부팅 시 휘발성 메모리에 복사
 RW(읽기/쓰기 가능)와 RO(읽기만 가능)로 나뉨
 값을 바꿀 때
– 비휘발성 : 현재 동작에 영향 없음. 재부팅 이후 부터 영향
– 휘발성 : 현재 동작에 영향 있음. 재부팅 시 사라짐
 설정 값을 변경 시 비휘발성 & 휘발성 모두 바꾸거나 비휘발성 바꾼 후 재부팅 시
켜야.
 레지스터와 프로토콜은 모두 Little Endian
– 하위 바이트가 더 메모리의 앞에 위치. 0x1234는 0x34, 0x12
3
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)
4
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를 낮춰 보는 것을 추천
5
1. DRS-0101 주요 레지스터
 Status Error(RW, RAM 48)
– 서보의 에러 상태를 나타내는 레지스터
 Status Detail(RW, RAM 49)
– 서보의 상태와 에러의 상세 내역을 나타내는 레지스터
6
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
7
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
8
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)
9
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로 설정된 비트에 해당하는 에러가 발생 시 연
결된 모든 서보의 토크를 자동으로 해제
10
2. DRC-005T 주요 레지스터
 Status Error(RW, RAM 16)
– 제어기의 상태 오류 내역
 Status Detail[5](RW, RAM 17)
– 제어기 상태 오류의 더 상세한 내역 코드(최근 5개)
11
2. DRC-005T 주요 레지스터
 Servo Count(RO, RAM 34)
– 연결된 서보의 총 수(최대 32개)
 Servo ID[33](RO, RAM 35)
– 연결된 서보의 ID가 오름차순으로 저장
– 연결된 수만큼 저장되며 나머지 공간은 0xFE(Broadcasting ID)
12
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
13
2. DRC-005T 주요 레지스터
 Playing Motion(RO, RAM 68)
– 저장된 모션이 실행 중인지 여부(실행 중:1, 아님: 0)
– 모션이 끝날 때까지 대기하려면 이 레지스터가 0이 될 때까지 기다리면
됨
 Playing Task(RO, RAM 69)
– 저장된 Task가 실행 중인지 여부(실행 중:1, 아님: 0)
14
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비트)임을 주의
15
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
16
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
17
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
으로 세팅하세요.
18
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로 저장
19
3. 프로토콜 – 패킷 구조




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 종류에 따라 다름
20
3. 프로토콜 – CMD 종류(서보)
21
3. 프로토콜 – CMD 종류(서보)
22
3. 프로토콜 – CMD 종류(제어기)
23
3. 프로토콜 – CMD 종류(제어기)
24
3. 프로토콜 – 자주 쓰는 CMD
 RAM_WRITE(서보)
– Address 부터 Length 바이트만큼 RAM Data로 쓴다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF
7+(2+Length)
0~0xFE
0x03
CS1
Address
Length
구분
Data[2]
…
Data[Length+1]
Value
RAM Data[0]
…
RAM Data[Length-1]
0xFF
CS2
 예시 – 모든 서보의 Torque ON(52번 주소, 1바이트, 0x60)
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Data[2]
Value
0xFF 0xFF
0x0A
0xFE
0x03
0xA2
0x34
0x01
0x60
25
0x5C
3. 프로토콜 – 자주 쓰는 CMD
 RAM_READ(서보) – 요청 패킷
– Address 부터 Length 바이트만큼 읽는다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF
7+2
0~0xFD
0x04
CS1
Address
Length
0xFF
CS2
 예시 – 0번 서보 Calibrated Position 읽기(58번 주소, 2바이트)
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF 0xFF
0x09
0x00
0x04
0x34
0x3A
0x02
26
0xCA
3. 프로토콜 – 자주 쓰는 CMD
 RAM_READ(서보) – 응답 패킷
– Address 부터 Length 개 값을 RAM Data와 상태를 넣어 응답한다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF
7+(2+Length)+2
0~0xFD
0x44
CS1
Address
Length
구분
Data[2]
…
Data[Length+1]
Data[Length+2]
Data[Length+3]
Value
RAM Data[0]
…
RAM Data[Length-1]
Status Error
Status Detail
0xFF
CS2
 예시 – 0번 서보 Calibrated Position 응답(58번 주소, 2바이트)
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF 0xFF
0x0D
0x00
0x44
0xFA
0x3A
0x02
구분
Data[2]
Data[3]
Data[4]
Data[5]
Value
0xE8
0x63
0x00
0x00
27
0x04
3. 프로토콜 – 자주 쓰는 CMD
 서보와 제어기의 WRITE/READ 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
28
3. 프로토콜 – 자주 쓰는 CMD
 S_JOG(서보)
– N 개의 서보를 Play Time 동안 동시에 움직인다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Value
0xFF
7+(1+4*N)
0xFE
0x06
CS1
Play Time
구분
Data[1]~Data[4]
…
Data[4*N-3]~Data[4*N]
Value
SJOG Data[0]
…
SJOG Data[N-1]
0xFF
29
CS2
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
30
3. 프로토콜 – 자주 쓰는 CMD
 S_JOG(서보) 예시 – 0번 서보, 1번 서보 동시 제어
– 실행 시간 : 100(1.12ms)
– 0번 서보 : 위치 제어, 512, Green LED 점등
– 1번 서보 : 위치 제어, 400, Blue LED 점등
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Value
0xFF 0xFF
0x10
0xFE
0x06
0x12
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
31
0xEC
3. 프로토콜 – 자주 쓰는 CMD
 PLAY_MOTION(제어기)
– Motion No번 모션을 실행한다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Value
0xFF
7+2
0~0xFE
0x16
CS1
Motion No. Motion Ready
0xFF
CS2
Data[1]
 Motion No : 모션 번호 0~127. (254이면 현재 모션 정지)
 Motion Ready : 모션 준비자세 여부(1이면 모션의 첫 프레임만 느리게)
 예시 – ID 253인 DRC에서 모션 1번 실행
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF 0xFF
0x09
0xFD
0x16
0xE2
0x01
0x00
0x1C
 예시 – ID 253인 DRC에서 모션 2번 첫 프레임만 실행
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Value
0xFF 0xFF
0x09
0xFD
0x16
0xE0
0x02
0x01
32
0x1E
3. 프로토콜 – 자주 쓰는 CMD
 PLAY_TASK(제어기)
– 제어기의 Task를 실행한다.
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Value
0xFF
7+1
0~0xFE
0x17
CS1
Instruction
0xFF
CS2
 Instruction
–
–
–
–
0일 때 : 일반 모드로 Task 실행
254일 때 : Task 정지
1일 때 : 디버깅 모드로 Task 실행
2일 때 : 디버깅 모드일 때, Task를 한 스텝만 진행 후 멈춤
 예시 – ID 253인 DRC에서 Task 실행
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Value
0xFF 0xFF
0x08
0xFD
0x17
0xE2
0x00
33
0x1C
3. 프로토콜 – 자주 쓰는 CMD
 REMOCON(제어기)
– 제어기에 리모컨을 쏜다.(IR 리모컨을 쏜 것과 동일한 효과)
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Data[2]
Value
0xFF
7+3
0~0xFE
0x1C
CS1
Channel
Length
Data
0xFF
CS2
 Channel : 리모컨의 채널(0x61~0x6A)
 Length : 리모컨 버튼이 눌린 시간(0~240, 1당 125ms)
 Data : 리모컨 버튼 키
 예시 – 모든 DRC에 0x61의 채널로 1초 동안 버튼 0x21이 눌림
구분
Header
Packet Size
pID
CMD
CheckSum
Data[0]
Data[1]
Data[2]
Value
0xFF 0xFF
0x0A
0xFE
0x1D
0xA0
0x61
0x08
0x21
34
0x5E
4. DR-Visual Logic




로봇 Task 프로그래밍 툴
모듈 배치와 Input/Output 핀 연결로 프로그램 작성
프로그램 -> C-like script -> 로봇에 다운로드
실시간 디버깅 기능(스텝 진행, 중단점까지 진행)
35
4. DR-Visual Logic
 Motion
–
–
–
–
Move : 모션 실행
Motor : 모터 제어
LED : 제어기 & 머리 LED 제어
Sound : 버저 음계, 멜로디 재생
– 로봇의 행동을 제어
36
4. DR-Visual Logic
 Sensor
–
–
–
–
–
–
Sound Sensor : 소리 방향 센서
Touch Sensor : 머리 터치 센서
Light Sensor : 빛 밝기 센서
Distance Sensor : 거리 센서(PSD, 디지털)
Dynamics Sensor : 가속도/자이로 센서
Hand Touch Sensor : 손바닥 터치 센서
– 센서의 감지 여부나 기준값 과의 비교 결과를 True/False로 출력
37
4. DR-Visual Logic
 Communication
– IR Receive : IR 리모컨 수신
– Button : Button
– 모듈에 설정된 IR 리모컨 Key나 Button 입력이 들어왔는지 여부를
True/False로 출력
38
4. DR-Visual Logic
 Data
– Operator : 연산자(산술, 논리, 비교, 비트, 증감)
– Variable : 제어기/서보 RAM Data, 사용자 변수, 상수
– 제어기/서보의 RAM Data, 사용자가 선언한 변수, 상수 등과 연산자를 사
용해 계산을 하는 모듈
39
4. DR-Visual Logic
 Flow
–
–
–
–
–
–
–
Loop : 무한 반복 / for문
While : while문
Switch : If-else문
Wait : 내용 없는 while문
Delay : 지정한 시간 대기
Continue : 반복문 처음부터 시작
Break : 반복문 빠져 나가기
– 프로그램의 흐름을 제어하는 모듈
40
4. DR-Visual Logic
 My Module
– 기존에 저장되어 있는 dts 파일을 불러와서 함수처럼 사용
– 파라미터 없는 void function
41
4. DR-Visual Logic
 커넥터
– 모듈의 Input과 Output을 서로 이어 한 모듈의 Output이 다른 모듈의
Input으로 들어가도록 프로그래밍
42
4. DR-Visual Logic
 Task 예제
–
–
–
–
거리 센서 사용 예제
넘어짐 감지 예제
리모컨 모션 예제
양산 기본 Task
43
5. 두뇌보드 프로그래밍 방안
1. 순수 두뇌보드 프로그래밍
 두뇌보드에서 프로토콜로 모든 제어를 하는 프로그래밍
2. 두뇌보드 – DRC 분담 프로그래밍
 DRC에 Task를 작성해 무한 반복으로 돌려 놓고 두뇌보드에서는
REMOCON 패킷을 사용해 제어하는 프로그래밍
 두뇌보드의 연산과 통신라인의 부담이 줄음
 예) 1번 키를 보내면 좌회전 3회, 직진 3회
 두뇌보드 : PLAY_MOTION->RAM_READ로 Playing Motion Register 감
시->완료 후 다시 PLAY_MOTION을 6번 반복
 두뇌보드+DRC : REMOCON
44
6. Q&A
 문의사항 : [email protected]
 Soc관련 자료 : www.dongburobot.com 서비스로봇 자료실

오늘 PPT 자료, 펌웨어, 예제 자료 업로드
45
감사합니다.
46