이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

RT_OUTPUT_DATA_LIST

실시간 외부 제어 중에 컨트롤러가 외부 PC로 보내는 실시간 로봇 상태 데이터를 담는 구조체입니다. 로봇의 모션, 토크, I/O 정보를 폭넓게 포함합니다.

BYTE#

필드 이름

자료형

값

비고

0

time_stamp

double

데이터를 수집한 시점의 타임스탬프(s)

8

actual_joint_position

float[NUMBER_OF_JOINT]

[deg]

조인트 위치(모터 측 증분형 엔코더)

32

actual_joint_position_abs

float[NUMBER_OF_JOINT]

[deg]

조인트 위치(링크 측 절대형 엔코더)

56

actual_joint_velocity

float[NUMBER_OF_JOINT]

[deg/s]

조인트 속도(모터 측)

80

actual_joint_velocity_abs

float[NUMBER_OF_JOINT]

[deg/s]

조인트 속도(링크 측)

104

actual_tcp_position

float[NUM_TASK]

[mm, deg]

TCP 위치(x, y, z, a, b, c)

128

actual_tcp_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

TCP 속도(베이스 좌표계 기준)

152

actual_flange_position

float[NUMBER_OF_TASK]

[mm, deg]

플랜지 위치(베이스 좌표계 기준)

176

actual_flange_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

플랜지 속도(베이스 좌표계 기준)

200

actual_motor_torque

float[NUMBER_OF_JOINT]

[Nm]

모터 토크(기어비 적용)

224

actual_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

추정 조인트 토크

248

raw_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

토크 센서 원시 값(보정됨)

272

raw_force_torque

float[NUMBER_OF_JOINT]

[N, Nm]

힘/토크 센서 데이터(플랜지 좌표계)입니다.
작업 공간(Task Space) 값 6개: Fx, Fy, Fz, Tx, Ty, Tz.
힘/토크 센서가 장착된 A 시리즈 전용입니다. 다른 모델에서는 이 필드가 0입니다.
두 필드는 서로 배타적입니다. 이 필드에 값이 채워지면 raw_joint_torque가 0이고, 이 필드가 0이면 raw_joint_torque에 조인트 토크 센서 측정값이 담깁니다.

296

external_joint_torque

float[NUMBER_OF_JOINT]

[Nm]

조인트별 추정 외부 토크

320

external_tcp_force

float[NUMBER_OF_TASK]

[N, Nm]

외부 TCP 힘(베이스 좌표계 기준)입니다.
힘/토크 센서가 없는 로봇에서는 측정값이 아니라 조인트 토크로 추정한 값이며, 유효성은 singularity에 따라 달라집니다. 아래의 힘 추정값의 유효성을 참고하세요.

344

target_joint_position

float[NUMBER_OF_JOINT]

[deg]

목표 조인트 위치

368

target_joint_velocity

float[NUMBER_OF_JOINT]

[deg/s]

목표 조인트 속도

392

target_joint_acceleration

float[NUMBER_OF_JOINT]

[deg/s²]

목표 조인트 가속도

416

target_motor_torque

float[NUMBER_OF_JOINT]

[Nm]

목표 모터 토크

440

target_tcp_position

float[NUMBER_OF_TASK]

[mm, deg]

목표 TCP 위치

464

target_tcp_velocity

float[NUMBER_OF_TASK]

[mm/s, deg/s]

목표 TCP 속도

488

jacobian_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

자코비안 행렬 J(q)

632

gravity_torque

float[NUMBER_OF_JOINT]

[Nm]

중력 토크 g(q)

656

coriolis_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

코리올리 행렬 C(q, q̇)

800

mass_matrix

float[NUMBER_OF_JOINT][NUMBER_OF_JOINT]

질량 행렬 M(q)

944

solution_space

unsigned short

관절 형상(Solution Space)

946

singularity

float

자코비안의 최소 특이값입니다. 값이 작을수록 현재 자세가 특이점에 가깝습니다. 컨트롤러가 external_tcp_force가 아직 유효한지 판단할 때 사용하는 값과 같습니다. 아래의 힘 추정값의 유효성을 참고하세요.

950

operation_speed_rate

float

[%]

현재 속도 비율

954

joint_temperature

float[NUMBER_OF_JOINT]

[°C]

조인트 온도

978

controller_digital_input

unsigned short

컨트롤러 DI(16채널)

980

controller_digital_output

unsigned short

컨트롤러 DO(16채널)

982

controller_analog_input_type

unsigned char[2]

컨트롤러 AI 유형
(0: 전압, 1: 전류)

984

controller_analog_input

float[2]

[V/mA]

컨트롤러 아날로그 입력

992

controller_analog_output_type

unsigned char[2]

컨트롤러 AO 유형
(0: 전압, 1: 전류)

994

controller_analog_output

float[2]

[V/mA]

컨트롤러 아날로그 출력

1002

flange_digital_input

unsigned char

플랜지 DI
(A 시리즈: 2ch, M/H 시리즈: 6ch)

1003

flange_digital_output

unsigned char

플랜지 DO
(A 시리즈: 2ch, M/H 시리즈: 6ch)

1004

flange_analog_input

float[4]

[V/mA]

플랜지 아날로그 입력 채널
(A 시리즈: 2ch, M/H 시리즈: 4ch)

1020

external_encoder_strobe_count

unsigned char[2]

엔코더 스트로브 이벤트 횟수

1022

external_encoder_count

unsigned int[2]

외부 엔코더 펄스 카운트

1030

goal_joint_position

float[NUMBER_OF_JOINT]

[deg]

최종 목표 조인트용 예약 영역

1054

goal_tcp_position

float[NUMBER_OF_TASK]

[mm, deg]

최종 목표 TCP용 예약 영역

1078

robot_mode

unsigned char

0~5

로봇 모드
(0: 수동, 1: 자동, 2: 복구, 3: 백드라이브,
4: 측정, 5: 초기화)

1079

robot_state

unsigned char

0~15

운전 상태(대기, 이동 중 등)
0~10은 정의된 상태, 11~14는 예약,
15는 Not Ready입니다.

1080

control_mode

unsigned short

서보 모드(위치, 토크)

1082

reserved

unsigned char[256]

향후 확장을 위한 예약 바이트

전체 크기: 1,338바이트

힘 추정값의 유효성

힘/토크 센서가 없는 로봇에서는 external_tcp_force를 조인트 토크로 추정합니다. singularity를 보면 이 추정값을 신뢰할 수 있는지 알 수 있습니다. 추정값은 로봇 모델별 임계값 이상일 때 유효합니다.

모델

임계값

A0509 / E0509 / M0609 / M1509

0.138

M1013 / A0912

0.200

H2515

0.231

M0617 / H2017 / P3020

0.262

임계값보다 낮으면 추정값의 정확도가 떨어집니다. 값은 계속 출력되지만 측정값으로 취급해서는 안 됩니다. singularity를 external_tcp_force와 함께 기록하고, 모델별 임계값을 실제 사용 한계로 삼으세요.

정의 위치: DRFS.h

typedef struct _RT_OUTPUT_DATA_LIST
{
/* 데이터 수집 시점의 타임스탬프 */
double                      time_stamp;
/* 모터 측 증분형 엔코더로 측정한 실제 조인트 위치(제어에 사용) [deg] */
float                       actual_joint_position[NUMBER_OF_JOINT];
/* 링크 측 절대형 엔코더로 측정한 실제 조인트 위치(정확한 링크 위치에 사용) [deg] */
float                       actual_joint_position_abs[NUMBER_OF_JOINT];
/* 모터 측 증분형 엔코더로 측정한 실제 조인트 속도 [deg/s] */
float                       actual_joint_velocity[NUMBER_OF_JOINT];
/* 링크 측 절대형 엔코더로 측정한 실제 조인트 속도 [deg/s] */
float                       actual_joint_velocity_abs[NUMBER_OF_JOINT];
/* 베이스 좌표계 기준 실제 로봇 TCP 위치: (x, y, z, a, b, c), (a, b, c)는 ZYZ 오일러 각 표기를 따릅니다 [mm, deg] */
float                       actual_tcp_position[NUM_TASK];
/* 베이스 좌표계 기준 실제 로봇 TCP 속도 [mm, deg/s] */
float                       actual_tcp_velocity[NUMBER_OF_TASK];
/* 베이스 좌표계 기준 실제 로봇 플랜지 위치: (x, y, z, a, b, c), (a, b, c)는 ZYZ 오일러 각 표기를 따릅니다 [mm, deg] */
float                       actual_flange_position[NUMBER_OF_TASK];
/* 베이스 좌표계 기준 로봇 플랜지 속도 [mm, deg/s] */
float                       actual_flange_velocity[NUMBER_OF_TASK];
/* 기어비를 적용한 실제 모터 토크 = gear_ratio * current2torque_constant * 모터 전류 [Nm] */
float                       actual_motor_torque[NUMBER_OF_JOINT];
/* 로봇 컨트롤러가 추정한 조인트 토크 [Nm] */
float                       actual_joint_torque[NUMBER_OF_JOINT];
/* 캘리브레이션한 조인트 토크 센서 데이터 [Nm] */
float                       raw_joint_torque[NUMBER_OF_JOINT];
/* 플랜지 좌표계 기준 캘리브레이션한 힘/토크 센서 데이터 [N, Nm] */
float                       raw_force_torque[NUMBER_OF_JOINT];
/* 추정한 외부 조인트 토크 [Nm] */
float                       external_joint_torque[NUMBER_OF_JOINT];
/* 베이스 좌표계 기준 추정한 TCP 힘 [N, Nm] */
float                       external_tcp_force[NUMBER_OF_TASK];
/* 목표 조인트 위치 [deg] */
float                       target_joint_position[NUMBER_OF_JOINT];
/* 목표 조인트 속도 [deg/s] */
float                       target_joint_velocity[NUMBER_OF_JOINT];
/* 목표 조인트 가속도 [deg/s^2] */
float                       target_joint_acceleration[NUMBER_OF_JOINT];
/* 목표 모터 토크 [Nm] */
float                       target_motor_torque[NUMBER_OF_JOINT];
/* 베이스 좌표계 기준 목표 TCP 위치: (x, y, z, a, b, c), (a, b, c)는 ZYZ 오일러 각 표기를 따릅니다 [mm, deg] */
float                       target_tcp_position[NUMBER_OF_TASK];
/* 베이스 좌표계 기준 목표 TCP 속도 [mm, deg/s] */
float                       target_tcp_velocity[NUMBER_OF_TASK];
/* 베이스 좌표계 기준 자코비안 행렬=J(q) */
float                       jacobian_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* 중력 토크=g(q) [Nm] */
float                       gravity_torque[NUMBER_OF_JOINT];
/* 코리올리 행렬=C(q,q_dot)  */
float                       coriolis_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* 질량 행렬=M(q) */
float                       mass_matrix[NUMBER_OF_JOINT][NUMBER_OF_JOINT];
/* 로봇 형상 */
unsigned short              solution_space;
/* 최소 특이값 */
float                       singularity;
/* 현재 동작 속도 비율(1~100 %) */
float                       operation_speed_rate;
/* 조인트 온도(섭씨) */
float                       joint_temperature[NUMBER_OF_JOINT];
/* 컨트롤러 디지털 입력(16채널) */
unsigned short              controller_digital_input;
/* 컨트롤러 디지털 출력(16채널) */
unsigned short              controller_digital_output;
/* 컨트롤러 아날로그 입력 유형(2채널) */
unsigned char               controller_analog_input_type[2];
/* 컨트롤러 아날로그 입력(2채널) */
float                       controller_analog_input[2];
/* 컨트롤러 아날로그 출력 유형(2채널) */
unsigned char               controller_analog_output_type[2];
/* 컨트롤러 아날로그 출력(2채널) */
float                       controller_analog_output[2];
/* 플랜지 디지털 입력(A-Series: 2채널, M/H-Series: 6채널) */
unsigned char               flange_digital_input;
/* 플랜지 디지털 출력(A-Series: 2채널, M/H-Series: 6채널) */
unsigned char               flange_digital_output;
/* 플랜지 아날로그 입력(A-Series: 2채널, M/H-Series: 4채널) */
float                       flange_analog_input[4];
/* 스트로브 카운트(설정한 에지를 감지할 때마다 1씩 증가) */
unsigned char               external_encoder_strobe_count[2];
/* 외부 엔코더 카운트 */
unsigned int                external_encoder_count[2];
/* 최종 목표 조인트 위치(예약 영역) */
float                       goal_joint_position[NUMBER_OF_JOINT];
/* 최종 목표 TCP 위치(예약 영역) */
float                       goal_tcp_position[NUMBER_OF_TASK];
/* 로봇 모드: ROBOT_MODE_MANUAL(0), ROBOT_MODE_AUTONOMOUS(1), ROBOT_MODE_RECOVERY(2),
   ROBOT_MODE_BACKDRIVE(3), ROBOT_MODE_MEASURE(4), ROBOT_MODE_INITIALIZE(5) */
/* 'SAFETY_MODE' 구조체 참고*/
unsigned char               robot_mode;
/* 로봇 상태: STATE_INITIALIZING(0), STATE_STANDBY(1), STATE_MOVING(2), STATE_SAFE_OFF(3), STATE_TEACHING(4), STATE_SAFE_STOP(5), STATE_EMERGENCY_STOP, STATE_HOMMING, STATE_RECOVERY, STATE_SAFE_STOP2, STATE_SAFE_OFF2, */
/* DRCF의 'OPERATION_STATE' 구조체, DRFL의 'ROBOT_STATE' 구조체 참고*/
unsigned char               robot_state;
/* 위치 제어 모드, 토크 모드 */
/* 'SERVO_MODE' 구조체 참고*/
unsigned short              control_mode;
/* 예약 영역 */
unsigned char               reserved[256];

} RT_OUTPUT_DATA_LIST, *LPRT_OUTPUT_DATA_LIST;

참고

  • 로봇의 모든 동역학 데이터와 센서 데이터를 실시간으로 제공합니다.

  • 외부 토크 제어, 순응 제어, RT 로깅에 사용합니다.

  • 실시간 제어 중에 set_rt_control_output에 지정한 주기로 UDP를 통해 전송됩니다. 기본값은 없으며, 주기를 설정하기 전에는 데이터를 보내지 않습니다.

  • 단위는 mm, deg, N, Nm입니다. 길이는 SI 단위인 미터가 아니라 밀리미터이고, 각도는 라디안이 아니라 도라는 점에 유의하세요.