Search

Smart 6-axis Force Torque Sensor, AFT200-D80-C_OLD

revision date: 2023.09.12

1. Introduction

1.1 Smart 6-axis Force Torque Sensor, AFT200-D80

1.2 Key features

Smart 6-axis force/torque sensor
All-in-one sensor (No additional amplifier)
Digital output communications (CAN, etc)
Easy installation and data collection
Grippers, robot hands, collaborative robot, industrial robot

1.3 Specs.

 Index
Unit
Value
Operating voltage
VDC
5
Max. safe excitation voltage
VDC
10
Nominal force range (F_XYZN)
N
200
Nominal torque range (M_XYZN)
Nm
15
Limit force (F_XYZL)
N
300
Limit torque (M_XYZL)
Nm
20
Dimensions
mm
D80 x H20.5
Weight
g
236
Temperature
10-50
Sample rate
Hz
1000
Interfaces
1,000Kbps
CAN
Wire
Length: 1.5 m
For User: CAN_H / CAN_L / VCC / GND

2. Installation Guide

2.1 기본 구성품

AFT200-D80 x 1 EA
1.5m 케이블 x 1 EA

2.2 체결 (mounting)

M5 볼트 5.2Nm 로 체결 필수
내/외부 볼트 분해시 성능 보장 불가 A/S 불가능
센서 체결 순서
케이블 절단 및 과도한 당김 주의
센서 선이 로봇의 움직임에 따라 당겨지지 않도록 로봇과 고정하여 주십시오
케이블타이 등을 이용하여 로봇에 고정하거나 케이블타이를 이용하여 다른 선과 같이 번들형태로 고정 하지 말아주십시오
Velcro 를 사용하여 로봇과 고정하는 것을 권장드리며, 다른 선들과 번들형태로 고정할때에도 Velcro 를 이용하여 고정 부탁드립니다
체결 토크를 준수하지 않을 시 데이터가 정상적으로 출력되지 않을 수 있습니다.
센서 선이 로봇과 고정되어 있지 않을시, 선 당김으로 인해 출력 신호가 정상적이지 않을수 있습니다

2.3 축 & 치수 정보

2.3 연결 (wiring)

2.3.1 센서 핀아웃

2.3.2 케이블 open-end

케이블 핀아웃
Length: 1.5m (기본 옵션)
5V(VCC) - 주황색, 검은 점선 표시
GND - 회색, 검은 점선 표시
CANH- 노란색, 검은 점선 표시
CANL - 핑크선, 검은 점선 표시
S/N. SSAE22BA015 이전 버전

2.4 Data 수신

출력 데이터 형식

2.5 Mode setting

센서 신호 안정화를 위해 30분정도 러닝 시간을 갖는것을 권장드리며, 최소 10분 이상 센서데이터를 켜두신후 사용하시기 바랍니다
센서 출력데이터의 최초 10분간은 데이터의 흐름 현상이 발생할수 있습니다.

MODE SETTING

CAN ID Setting mode

Bias Setting mode

Bias Clear mode

Continuous transmitting mode

Continuous transmitting mode (Special usage)

Sample rate setting mode

ID Reset, Confirming mode

S/N : SSAE22BA045 버전 이전은 초기화시 센서의 ID가 0으로 설정될수 있습니다 Table 1.25을 참고하시어, 설정된 센서 ID를 확인 부탁드립니다

DEVICES

USB-to-CAN 디바이스

다른 CAN 지원 보드를 사용해도 무방하나, 제공하는 샘플 프로그램의 사용을 위해서는 IXXAT사의 컨버터를 사용
USB-to-CAN V2 (ixxat.com), 메뉴얼에서 사용한 버전: 1.01.0281.11001
Downloads and Documentation for Ixxat Products, VCI V4 - Windows 11, 10, 8, 7 [Driver, canAnalyser-Mini, Manuals, LabView and other add-ons]*
Ixxat VCI Setup 4.0.xxx.0.exe 필수 설치
*설치 시 VCI V4 체크 및 설치 후 재부팅 필요

EtherNET-to-CAN 디바이스

Systembase사의 eCAN 모델을 사용
센서의 IP설정만 하고 있어 별도의 장비 사용 가능
아래 사이트를 통해 Manual과 eCANView 다운로드

3. 소프트웨어

IXXAT사 USB-to-CAN

샘플프로그램 (IXXAT사 제공)
CanAnalyzer3 Mini windows버튼 → IXXAT폴더 → IXXAT CanAnalyzer3 Mini
에이딘로보틱스사 제공 샘플프로그램
IXXAT CAN VCI V4 및 아래 installer 설치
샘플프로그램 다운로드
Installer.zip
234914.6KB
AFT SAMPLE_v1.1.zip
233980.9KB
AFT SERIES SAMPLE_v1.2.zip
2851.7KB
센서 연결 후 AFT SERIES SAMPLE.exe 실행
샘플 프로그램 실행 시 팝업 화면
1.
CAN 디바이스 선택 디바이스를 선택합니다. 현재 PC에 연결된 디바이스가 목록으로 보입니다. 해당되는 디바이스를 클릭하고 OK버튼을 누릅니다. ※ 샘플프로그램은 IXXAT사의 USB-to-CAN converter을 기반으로 제작되었습니다.
2.
CAN 컨트롤러 선택 이전 단계에서 선택한 디바이스명이 표시됩니다. 아래 컨트롤러 채널을 선택하고 OK버튼을 누릅니다.
3.
CAN 컨트롤러 초기 설정 이전 단계에서 선택한 컨트롤러의 초기 설정을 하는 단계입니다. 프레임과 보레이트를 확인하고 OK버튼을 누릅니다.
샘플프로그램 인터페이스 설명
① Program run 샘플 프로그램을 실행합니다.
② Graph plot 6축 힘/토크 데이터(Fx, Fy, Fz, Tx, Ty, Tz)의 실시간 데이터를 그래프로 확인할 수 있습니다.
③ CAN ID 연결된 센서의 CAN ID를 설정합니다. ID가 두 개 이상일 경우, 가장 낮은 ID를 입력합니다. ex) 0x01(1), 0x02(2) 경우, 1을 입력
④ CAN transmit 6축 힘/토크 값을 출력 하도록 CAN message를 보냅니다 [0x102, 0x01, 0x03, 0x01]
⑤ BIAS 6축 힘/토크 데이터를 모두 0으로 초기화 합니다. 설치 및 부착물로 인한 요소들을 제거하여 원하는 힘 값을 측정할 수 있습니다.
⑥STOP 프로그램을 종료합니다. 두 개의 STOP버튼을 모두 누르고 3초 후 프로그램이 종료됩니다.
⑦ Collect Data 힘/토크 데이터 로그를 저장합니다. 아래 페이지의 데이터 저장 관련 설명을 참고하세요.
⑧ Save Data File Path 힘/토크 데이터 로그를 저장 경로를 설정합니다. 아래 페이지의 데이터 저장 관련 설명을 참고하세요.

3.1 데이터로그 저장

1.
저장 디렉토리 설정 폴더 버튼을 눌러 팝업창을 엽니다. 원하는 디렉토리의 파일(.txt)을 선택 후 OK버튼을 눌러 지정합니다. Path에 표기되는 경로를 확인합니다. (해당 Path에 지정 파일이 없을 경우, 자동으로 파일을 생성)
2.
데이터 로그 저장 Collect Data 아래 버튼을 눌러 저장을 시작합니다. 저장 중일 때는 버튼에 형광색 표시가 됩니다. 저장 종료도 동일하게 버튼을 누르면 종료됩니다. 데이터는 파일에 누적으로 저장되어, 각 저장 시 새로운 파일을 지정하여 저장하는 것을 권장드립니다.
3.
데이터 로그 확인 해당 디렉토리의 파일을 열어 저장된 힘/토크 데이터를 확인할 수 있습니다. 데이터는 Fx, Fy, Fz, Tx, Ty, Tz 순으로 각 열에 저장됩니다.

SystemBase사 EtherNET to CAN

에이딘로보틱스사 제공 샘플프로그램
AIDIN_Sample_EtherNET.zip
231710.6KB
AIDIN_sample_program_v1.2.zip
181489.1KB
AIDIN_Installer→Volume→setup 파일을 통해 AIDIN 인스톨러 설치
Systembase사의 메뉴얼 혹은 아래 문서를 통해 IP셋팅
AIDIN_Sample_EN→AIDIN_Sample_EN.exe 실행
샘플 프로그램 실행 시 팝업 화면
샘플프로그램 인터페이스 설명
① Program run 샘플 프로그램을 실행합니다.
② STOP
프로그램을 종료합니다. 누르고 3초 후 프로그램이 종료됩니다. ③ CAN transmit message 6축 힘/토크 값을 출력 하도록 CAN message를 입력합니다 [0x01, 0x03, 0x01]
④ CAN transmit button
입력된 CAN message를 보냅니다
⑤ IP설정
상기 셋팅에서 맞춘 센서의 IP를 입력합니다
⑥ 필터링
기본 LPF 필터가 구성되어 있으며, 0~9.9까지 사용 가능합니다 (10은 사용 불가합니다)
⑦ Save Data File Path 힘/토크 데이터 로그를 저장 경로를 설정합니다. 아래 페이지의 데이터 저장 관련 설명을 참고하세요.
⑧ Collect Data 힘/토크 데이터 로그를 저장합니다. 아래 페이지의 데이터 저장 관련 설명을 참고하세요.
⑨ BIAS, PAUSE 6축 힘/토크 데이터를 모두 0으로 초기화 합니다. 설치 및 부착물로 인한 요소들을 제거하여 원하는 힘 값을 측정할 수 있습니다.
PAUSE 버튼 클릭시 센서 데이터 값을 잠시 멈출수 있습니다.
⑩ STOP 6축 힘/토크 데이터(Fx, Fy, Fz, Tx, Ty, Tz)의 실시간 데이터를 그래프로 확인할 수 있습니다.

3.2 데이터로그 저장

1.
저장 디렉토리 설정 폴더 버튼을 눌러 팝업창을 엽니다. 원하는 디렉토리의 파일(.txt)을 지정합니다. Path에 표기되는 경로를 확인합니다. (해당 Path에 지정 파일이 없을 경우, 자동으로 파일을 생성)
2.
데이터 로그 저장 Collect Data 아래 버튼을 눌러 저장을 시작합니다. 저장 중일 때는 버튼에 형광색 표시가 됩니다. 저장 종료도 동일하게 버튼을 누르면 종료됩니다. 데이터는 파일에 누적으로 저장되어, 각 저장 시 새로운 파일을 지정하여 저장하는 것을 권장드립니다.
Reset버튼 클릭시 저장되었던 데이터를 초기화 한후 다시 저장을 시작합니다
Reset버튼은 주의하여 주시기 바랍니다
3.
데이터 로그 확인 해당 디렉토리의 파일을 열어 저장된 힘/토크 데이터를 확인할 수 있습니다. 데이터는 Fx, Fy, Fz, Tx, Ty, Tz 순으로 각 열에 저장됩니다.

Source codes

1.
Python code -Client
import socket import serial import binascii import time HOST = '192.168.0.223' PORT = 4001 client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) client_socket.connect((HOST, PORT)) # 키보드로 입력한 문자열을 서버로 전송하고 # 서버에서 에코되어 돌아오는 메시지를 받으면 화면에 출력합니다. # quit를 입력할 때 까지 반복합니다. while True: message = '1' if message == 'quit': break client_socket.send(message.encode()) mHex = client_socket.recv(1024) #mHex = data.data if len(mHex)!= 0: hxstr=binascii.hexlify(bytearray(mHex)) #print(hxstr) sig_msg=hxstr.decode() #print(sig_msg) #print_msg=[sig_msg[i:i+2] for i in range(0,len(sig_msg),2)] for i in range(0,len(sig_msg),28): print_msg=[sig_msg[i+j:i+j+2] for j in range(0,28,2)] print(print_msg) else: print('nono\n') #print('Received from the server :',repr(data.decode())) TCP/IP to CAN 6 client_socket.close()
Python
복사
2.
Window code - Client
#include <stdio.h> #include <stdlib.h> #include <winsock2.h> #pragma warning(disable : 4996) #pragma comment(lib, "ws2_32.lib") #define BUF_SIZE 14 using namespace std; void ErrorHandling(const char* message); int main(int argc, char* argv[]) { WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN servAddr; unsigned char message2[BUF_SIZE]; int strLen2= 0; char ip[] = "192.168.0.223"; int port = 4001; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error!"); hSocket = socket(PF_INET, SOCK_STREAM, 0); if (hSocket == INVALID_SOCKET) ErrorHandling("hSocket() error!"); memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET; servAddr.sin_addr.s_addr = inet_addr(ip); servAddr.sin_port = htons(port); if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("connect() error!"); double sensor_val; while (1) { strLen2 = recv(hSocket, (char*)&message2, sizeof(message2), 0); if (strLen2 == -1) ErrorHandling("read() error!!"); #if 0 // law data print for (int i = 0; i < 14; i++) { if (i == 13) { printf("%d \n", (int)message2[i]); } else { printf("%d, ", (int)message2[i]); } } #endif #if 1 sensor_val = (double)((int)message2[6] * 256 + (int)message2[7])/50 -500; printf("Sensor value: %5.3f \n", sensor_val); #endif } closesocket(hSocket); WSACleanup(); return 0; } void ErrorHandling(const char* message) { fputs(message, stderr); fputc('\n', stderr); exit(1); }
C++
복사
3.
Linux -Client
// CAN to Ethernet module Linux code // Update date : 2022. 02. 14 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h> #include "ros/ros.h" void errhandle(const char *errmsg); int main(int argc, char **argv) { ros::init(argc,argv,"TCP_client"); // 클라이언트 소켓 파일디스크립터 변수 선언 int clnt_sock; // sockaddr_in 구조체 변수 선언 struct sockaddr_in st_serv_addr; // 보내고 받을 버퍼 정의 unsigned char sendmsg[] = "Test_clnt"; // if needed unsigned char recvmsg[14]; // CAN to Ethernet must be set the buffer size 14 // ip, port 정의 char ip[] = "192.168.0.223"; // int port = 4001; // 클라이언트 소켓 TCP/IP 프로토콜 생성 clnt_sock = socket(PF_INET, SOCK_STREAM, 0); if(clnt_sock == -1) errhandle("socket() ERR!"); // serv_sock에 bind로 주소 넣기 위한 밑작업 memset(&st_serv_addr,0,sizeof(st_serv_addr)); st_serv_addr.sin_family = AF_INET; st_serv_addr.sin_addr.s_addr = inet_addr(ip); st_serv_addr.sin_port = htons(port); // connect()으로 서버소켓에 연결요청 int connret = connect(clnt_sock,(struct sockaddr*) &st_serv_addr,sizeof(st_serv_addr)); if(connret == -1) errhandle("connect() ERR!"); int readstrlen = 0; double sensor_val = 0; while(1) { // sendmsg 보내고, recvmsg에 수신된 string데이터 담기 // write(clnt_sock, (char*)&sendmsg, sizeof(sendmsg) ); // if needed readstrlen = read(clnt_sock, (char*)&recvmsg, sizeof(recvmsg)-1); if(readstrlen == -1) errhandle("read() ERR!"); sensor_val = (double)((int)recvmsg[6]*256+(int)recvmsg[7])/50-500; printf("Sensor value : %.3f \n", sensor_val); } //소켓은 파일이다! 닫아야 한다. close(clnt_sock); return 0; } void errhandle(const char *errmsg){ fputs(errmsg, stderr); fputc('\n', stderr); exit(1); }
C++
복사

자주 묻는 질문

전체
Search
사용
3
성능
2
소프트웨어
1
하드웨어
1