본 e-manual은 당사가 제공한 대상외에 무단 공유를 금지합니다
revision date: 2024.01.12
1. Introduction
1.1 ARC6 (Robot Controller)
1.2 Key features
Version | Xenomai 2.6.5 | Xenomai 3.1 |
Operating system | Ubuntu 14.04.6 LTS | Ubuntu 18.04.5 LTS |
Kernel | 3.18.20 | 5.4.102 |
EtherCAT system | Igh EtherCAT | SOEM EtherCAT |
1.3 Specification Sheet
2. Installation Guide
2.1 구성품
•
Xenomai + EtherCAT RTOS가 적용된 ARC6 x 1EA
2.2 연결 (wiring)
•
사용자 이름 : gene / 비밀번호 : a
•
EtherCAT Master 포트의 경우 CAT 스티커가 붙은 랜 포트 사용.
•
다른 랜 포트의 경우 일반 인터넷용으로 사용 가능.
3. Tutorial
•
해당 튜토리얼은 Elmo Driver를 연결하여 진행합니다. 다른 EtherCAT slave를 연결하고 진행할 경우 정상 작동하지 않을 가능성이 높습니다.
•
Elmo Driver를 이용해 모터의 전류제어를 진행하는 튜토리얼입니다. 모터 드라이버 튜닝 이후 진행 바랍니다.
•
다른 EtherCAT slave를 사용하는 경우, 4. EtherCAT slave Configuration & PDO mapping을 먼저 진행하시는걸 추천드립니다.
•
아래 튜토리얼은 Freerun 모드에서 작동하는 코드입니다. DC mode로 사용하려는 경우 따로 코드를 수정하셔야 합니다.
3.1 연결 (wiring)
•
Elmo Driver의 EtherCAT IN 포트와 ARC6의 EtherCAT 랜 포트와 연결.
3.2 코드 실행 (Current control)
3.2.1 Xenomai 2.6.5의 경우
•
터미널 3개를 엽니다.
- (터미널 1) roscore
- (터미널 2) rosrun elmo_ethercat main
- (터미널 3) rosrun elmo_ethercat current_control
Bash
복사
•
current_control 터미널에서 모터 번호(0번부터 시작)를 입력하고, 전류 값을 입력해주면 모터에 전류가 가해집니다.
•
전류값 입력의 경우 -1000 ~ 1000까지이며, 0의 경우 0A, 1000의 경우 continious current가 가해집니다.
•
Actual position, Actual current의 경우 main 터미널에서 확인할 수 있습니다.
3.2.2 Xenomai 3.1의 경우
•
터미널 2개를 엽니다.
- (터미널 1) roslaunch elmo_ethercat main.launch
- (터미널 2) rosrun elmo_ethercat current_control
Bash
복사
•
current_control 터미널에서 모터 번호(0번부터 시작)를 입력하고, 전류 값을 입력해주면 모터에 전류가 가해집니다.
•
전류값 입력의 경우 -1000 ~ 1000까지이며, 0의 경우 0A, 1000의 경우 continious current가 가해집니다.
•
position, actual current의 경우 main 터미널에서 확인할 수 있습니다.
4. EtherCAT slave Configuration & PDO mapping
•
EtherCAT slave 장비 수 변경, 다른 종류의 EtherCAT slave 장비, 다른 PDO를 사용하고 싶은 경우 EtherCAT 관련 코드를 수정하여야 합니다.
•
Xenomai2(Igh EtherCAT)과 Xenomai3(SOEM EtherCAT)의 코드 수정법이 다르니 주의바랍니다.
4.0 EtherCAT slave 장비 수 변경 (Xenomai 2.6.5/3.1 공통)
•
해당 수정은 이미 원하는 장비의 PDO mapping에 관련한 코드는 이미 다 수정되었고, slave 수만 변경하는 경우에 사용되는 방법입니다.
•
제공되는 튜토리얼 코드의 경우 Elmo driver, anybus를 사용하는 경우 바로 수정 가능합니다. 다만, Master → Elmo driver → Anybus 순으로 연결해야지만 정상 작동됩니다.
4.0.1 수정 방법
•
include/Elmo_EtherCAT.h 파일에서 Elmo driver의 경우 NUM_ELMO_DRIVER, Anybus의 경우 NUM_HMS_ANYBUS를 수정하면 됩니다.
•
위와 같이 장비 수를 0으로 변경할 경우, src/main.cpp에서 Array 안 숫자가 0이 되어버려 컴파일 에러가 발생합니다. 주석처리 혹은 동일한 변수 대신 다른 변수로 선언 부탁드립니다.
•
또한 장비 수가 0인 경우 src/main.cpp에서 해당 장비의 PDO에 대한 readbuffer 함수는 주석처리 해야합니다.
4.1 EtherCAT 코드 수정 : Xenomai 2.6.5 (Igh EtherCAT)
4.1.1 include/Elmo_EtherCAT.h
•
include 디렉토리에 있는 Elmo_EtherCAT.h 파일을 먼저 수정합니다.
1.
수정하고 난 뒤의 PDO entry 개수로 변경합니다.
2.
사진과 같이 추가/변경할 PDO entry의 index, subindex를 합친 주소값을 작성합니다. (ex) index : 0x607a, subindex : 0 ⇒ 0x607a0)
3.
ec_pdo_entry_info_t XX_pdo_entries에 추가/변경한 PDO entry에 대한 정보를 반영해줍니다.
•
index, subindex, 비트수 순서로 작성.
•
RX entries들이 TX entries보다 위에 있어야 합니다.
4.
ec_pdo_info_t XX_pdos에 추가/변경한 PDO에 대한 정보를 반영해줍니다.
•
PDO 주소값 / 해당 PDO에 있는 entry 개수 / 직전 Elmo_Gold_pdo_entries +X 에 해당 PDO entry 개수를 더하여 Elmo_Gold_pdo_entries +X+entry로 작성
•
RX PDO들이 TX PDO보다 위에 있어야 합니다.
5.
ec_sync_info_t XX_syncs
•
OUTPUT의 경우 EC_DIR_OUTPUT, INPUT의 경우 EC_DIR_INPUT를 수정
•
변경한 PDO 개수로 수정 (ex) {2, EC_DIR_OUTPUT, 1, Elmo_Gold_pdos + 0, EC_WD_ENABLE},
•
→ {2, EC_DIR_OUTPUT, 2, Elmo_Gold_pdos + 0, EC_WD_ENABLE},
6.
entry struct 수정
•
추가한 PDO entry의 정보를 넣은 순서에 맞게 추가
7.
offset, bitoffset struct 수정
•
추가한 PDO entry에 대한 offset, bitoffset 변수 추가 선언. 모두 uint32_t 자료형으로 선언.
4.1.2 src/Elmo_EtherCAT.cpp
1.
EthercatMaster::initDomain() 수정
•
기존에 있는 registerRX/TXDomainEntry함수와 같은 틀로 추가하되, 주소값, subindex, offset, bitoffset 변수명을 변경하여 추가
2.
EthercatMaster::processRxDomain() 수정
•
EC_WRITE함수를 같은 틀로 추가하되, offset, Inparam 변수명을 변경하여 추가
•
EC_WRITE_XX에서 XX의 경우 해당 entry의 자료형, 비트수로 변경하여 추가
•
ex) Unsigned의 경우 U, Signed의 경우 S를 붙여 Signed 32비트의 경우 S32
3.
EthercatMaster::processTxDomain() 수정
•
2와 비슷하게 EC_READ를 같은 틀로 추가하되, offset, Outparam 변수명을 변경하여 추가
•
2와 동일하게 EC_READ_XX를 자료형, 비트 수에 맞게 변경하여 사용.
4.
EthercatMaster::writeBuffer/EthercatMaster::readBuffer 수정
•
Rx의 경우, writebuffer / Tx의 경우 readbuffer에 추가
•
기존에 있는 것들과 같은 틀로 추가하되, 자료형에 주의하여 변경
4.1.3 src/main.cpp
1.
EtherCAT Data array 추가
•
사용하는 자료형에 맞게 Data array 추가
2.
my_task_proc 함수 안의 readbuffer/writebuffer 함수 추가
•
Tx의 경우 readbuffer를 이용해 받아온 데이터를 1의 Data array에 저장.
•
Rx의 경우 writebuffer를 이용해 Data array에 있는 데이터를 slave로 전송.
4.1.4 다른 종류 장비 추가
•
다른 종류의 장비를 추가할 경우, 4.1.1 ~ 4.1.3을 그대로 수행하되, Elmo와 Anybus struct가 나뉘어 있는 것 처럼 추가로 struct를 추가하여 그곳에 넣어주어야 합니다.
•
Master기준으로 연결된 slave 순서 순으로 struct, for문 등을 배치하여야 합니다.
•
ex) Master→Elmo→Anybus 순일 경우 4.1.2의 for문 순서 또한 Elmo, Anybus 순으로 작성
•
이외에도 몇가지 더 수정해야할 것들이 존재합니다.
1.
Elmo_EtherCAT.h에서 Vendor ID, Product Code 추가
2.
Elmo_EtherCAT.h에서 class 선언자 수정
•
ec_pdo_entry_reg_t에서 기존에 작성되어 있는것 처럼 entry 개수에 장비 수를 곱한 값을 rx, tx 모두 추가해주어야 합니다.
•
추가한 장비 struct를 추가해주어야 합니다.
3.
Elmo_EtherCAT.cpp에서 EthercatMaster::initSlave() 수정
•
기존에 작성되어있는 것과 같이 for문을 하나 추가하여 새로운 장비에 대한 initializing 코드를 추가해 주어야 합니다.
4.2 EtherCAT 코드 수정 : Xenomai 3.1 (SOEM EtherCAT)
4.2.1 include/Elmo_EtherCAT.h
1.
사진과 같이 추가/변경할 PDO entry의 index, subindex를 합친 주소값을 작성합니다. (ex) index : 0x607a, subindex : 0 ⇒ 0x607a0)
2.
Entry struct 수정
•
추가한 PDO entry의 정보를 넣은 순서에 맞게 추가합니다.
4.2.2 include/Elmo_EtherCAT.cpp
1.
Setup 함수 수정
•
방법 1, 방법 2 두 가지 중 아무 것이나 사용해도 무방하나, 특정 장비의 경우 sdo를 넣는 순서에 따라 적용되지 않게 프로그래밍 되어 있어 방법 2만 가능한 사례가 존재했습니다.
방법 1. map_1c12/map_1c13 사용 (튜토리얼 코드)
•
한줄로 0x1c12/0x1c13 주소값에 정보를 전부 넣을 수 있습니다.
•
map_1c12는 RX, map_1c13은 TX에 관한 Array입니다.
•
각 Array의 첫번째 열은 PDO의 총 개수, 그 다음부터는 넣고 싶은 PDO의 주소값을 입력합니다.
방법 2. ec_SDOwrite 사용
•
한번에 0x1c12/0x1c13에 넣으면 안되는 경우 ec_SDOwrite 함수를 이용해 한 열씩 넣어줍니다.
2.
EthercatMaster::writeBuffer/EthercatMaster::readBuffer 수정
•
Rx의 경우, writebuffer / Tx의 경우 readbuffer에 추가
•
기존에 있는 것들과 같은 틀로 추가하되, 자료형에 주의하여 변경
4.2.3 src/main.cpp
1.
EtherCAT Data array 추가
•
사용하는 자료형에 맞게 Data array 추가
2.
my_task_proc안의 readbuffer/writebuffer 함수 추가
•
Tx의 경우 readbuffer를 이용해 받아온 데이터를 1의 Data array에 저장.
•
Rx의 경우 writebuffer를 이용해 Data array에 있는 데이터를 slave로 전송.
4.2.4 다른 종류 장비 추가
•
다른 종류의 장비를 추가할 경우, 4.21 ~ 4.2.3을 그대로 수행하되, Elmo와 Anybus struct가 나뉘어 있는 것 처럼 추가로 struct를 추가하여 그곳에 넣어주어야 합니다.
•
이외에도 몇가지 더 수정해야할 것들이 존재합니다.
1.
Elmo_EtherCAT.h에서 Vendor ID, Product Code 추가
2.
Elmo_EtherCAT.h에서 class 선언자 수정
•
추가한 장비 struct를 추가해주어야 합니다.
3.
Elmo_EtherCAT.cpp에서 EthercatMaster::initSlave() 수정
•
기존에 작성되어있는 것과 같이 for문을 하나 추가하여 새로운 장비에 대한 initializing 코드를 추가해 주어야 합니다.
4.
Elmo_EtherCAP.cpp에서 registerParam() 수정
•
기존에 작성되어있는 것과 같이 for문을 하나 추가하여 새로운 장비에 대한 parameter register 코드를 추가해 주어야 합니다.