Download presentation
Presentation is loading. Please wait.
1
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) Ack Policy(RW, EEP 7/RAM 1)
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)
서보의 에러 상태를 나타내는 레지스터 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) Ack Policy(RW, EEP 8/RAM 1)
제어기 식별 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) Servo ID[33](RO, RAM 35)
연결된 서보의 총 수(최대 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바이트) 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)
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)
사용자 센서 모드 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
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 종류에 따라 다름
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] Value 0xFF 7+(2+Length) 0~0xFE 0x03 CS1 CS2 Address Length 구분 Data[2] … Data[Length+1] Value RAM Data[0] RAM Data[Length-1] 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Data[2] Value 0xFF 0x0A 0xFE 0x03 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] Value 0xFF 7+2 0~0xFD 0x04 CS1 CS2 Address Length 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Value 0xFF 0x09 0x00 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] Value 0xFF 7+(2+Length)+2 0~0xFD 0x44 CS1 CS2 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 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Value 0xFF 0x0D 0x00 0x44 0xFA 0x04 0x3A 0x02 구분 Data[2] Data[3] Data[4] Data[5] Value 0xE8 0x63 0x00
28
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
29
3. 프로토콜 – 자주 쓰는 CMD S_JOG(서보) N 개의 서보를 Play Time 동안 동시에 움직인다. 구분
Header Packet Size pID CMD CheckSum Data[0] Value 0xFF 7+(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(서보) Play Time JOG SET ID
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 점등 구분 Header Packet Size pID CMD CheckSum Data[0] Value 0xFF 0x10 0xFE 0x06 0x12 0xEC 0x64 구분 Data[1] Data[2] Data[3] Data[4] Data[5] Data[6] Data[7] Data[8] Value 0x00 0x02 0x04 0x90 0x01 0x08
32
3. 프로토콜 – 자주 쓰는 CMD PLAY_MOTION(제어기) 예시 – ID 253인 DRC에서 모션 1번 실행
Motion No번 모션을 실행한다. Motion No : 모션 번호 0~127. (254이면 현재 모션 정지) Motion Ready : 모션 준비자세 여부(1이면 모션의 첫 프레임만 느리게) 예시 – ID 253인 DRC에서 모션 1번 실행 예시 – ID 253인 DRC에서 모션 2번 첫 프레임만 실행 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Value 0xFF 7+2 0~0xFE 0x16 CS1 CS2 Motion No. Motion Ready 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Value 0xFF 0x09 0xFD 0x16 0xE2 0x1C 0x01 0x00 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Value 0xFF 0x09 0xFD 0x16 0xE0 0x1E 0x02 0x01
33
3. 프로토콜 – 자주 쓰는 CMD PLAY_TASK(제어기) 예시 – ID 253인 DRC에서 Task 실행
Instruction 0일 때 : 일반 모드로 Task 실행 254일 때 : Task 정지 1일 때 : 디버깅 모드로 Task 실행 2일 때 : 디버깅 모드일 때, Task를 한 스텝만 진행 후 멈춤 예시 – ID 253인 DRC에서 Task 실행 구분 Header Packet Size pID CMD CheckSum Data[0] Value 0xFF 7+1 0~0xFE 0x17 CS1 CS2 Instruction 구분 Header Packet Size pID CMD CheckSum Data[0] Value 0xFF 0x08 0xFD 0x17 0xE2 0x1C 0x00
34
3. 프로토콜 – 자주 쓰는 CMD REMOCON(제어기)
제어기에 리모컨을 쏜다.(IR 리모컨을 쏜 것과 동일한 효과) 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 7+3 0~0xFE 0x1C CS1 CS2 Channel Length Data 구분 Header Packet Size pID CMD CheckSum Data[0] Data[1] Data[2] Value 0xFF 0x0A 0xFE 0x1D 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. 두뇌보드 프로그래밍 방안 순수 두뇌보드 프로그래밍 두뇌보드 – DRC 분담 프로그래밍
두뇌보드에서 프로토콜로 모든 제어를 하는 프로그래밍 두뇌보드 – DRC 분담 프로그래밍 DRC에 Task를 작성해 무한 반복으로 돌려 놓고 두뇌보드에서는 REMOCON 패킷을 사용해 제어하는 프로그래밍 두뇌보드의 연산과 통신라인의 부담이 줄음 예) 1번 키를 보내면 좌회전 3회, 직진 3회 두뇌보드 : PLAY_MOTION->RAM_READ로 Playing Motion Register 감시->완료 후 다시 PLAY_MOTION을 6번 반복 두뇌보드+DRC : REMOCON
45
6. Q&A 문의사항 : jgahn@dongbu.com
Soc관련 자료 : 서비스로봇 자료실 오늘 PPT 자료, 펌웨어, 예제 자료 업로드
46
감사합니다.
Similar presentations