최신 버전 정보는 1.33.5에서 확인하세요.
RT_OUTPUT_DATA_LIST
실시간 외부 제어 중에 컨트롤러가 외부 PC로 보내는 실시간 로봇 상태 데이터를 담는 구조체입니다. 로봇의 모션, 토크, I/O 정보를 폭넓게 포함합니다.
BYTE# |
필드 이름 |
자료형 |
값 |
비고 |
|---|---|---|---|---|
0 |
|
|
데이터를 수집한 시점의 타임스탬프(s) |
|
8 |
|
|
[deg] |
조인트 위치(모터 측 증분형 엔코더) |
32 |
|
|
[deg] |
조인트 위치(링크 측 절대형 엔코더) |
56 |
|
|
[deg/s] |
조인트 속도(모터 측) |
80 |
|
|
[deg/s] |
조인트 속도(링크 측) |
104 |
|
|
[mm, deg] |
TCP 위치(x, y, z, a, b, c) |
128 |
|
|
[mm/s, deg/s] |
TCP 속도(베이스 좌표계 기준) |
152 |
|
|
[mm, deg] |
플랜지 위치(베이스 좌표계 기준) |
176 |
|
|
[mm/s, deg/s] |
플랜지 속도(베이스 좌표계 기준) |
200 |
|
|
[Nm] |
모터 토크(기어비 적용) |
224 |
|
|
[Nm] |
추정 조인트 토크 |
248 |
|
|
[Nm] |
토크 센서 원시 값(보정됨) |
272 |
|
|
[N, Nm] |
힘/토크 센서 데이터(플랜지 좌표계)입니다. |
296 |
|
|
[Nm] |
조인트별 추정 외부 토크 |
320 |
|
|
[N, Nm] |
외부 TCP 힘(베이스 좌표계 기준)입니다. |
344 |
|
|
[deg] |
목표 조인트 위치 |
368 |
|
|
[deg/s] |
목표 조인트 속도 |
392 |
|
|
[deg/s²] |
목표 조인트 가속도 |
416 |
|
|
[Nm] |
목표 모터 토크 |
440 |
|
|
[mm, deg] |
목표 TCP 위치 |
464 |
|
|
[mm/s, deg/s] |
목표 TCP 속도 |
488 |
|
|
자코비안 행렬 J(q) |
|
632 |
|
|
[Nm] |
중력 토크 g(q) |
656 |
|
|
코리올리 행렬 C(q, q̇) |
|
800 |
|
|
질량 행렬 M(q) |
|
944 |
|
|
관절 형상(Solution Space) |
|
946 |
|
|
자코비안의 최소 특이값입니다. 값이 작을수록 현재 자세가 특이점에 가깝습니다. 컨트롤러가 |
|
950 |
|
|
[%] |
현재 속도 비율 |
954 |
|
|
[°C] |
조인트 온도 |
978 |
|
|
컨트롤러 DI(16채널) |
|
980 |
|
|
컨트롤러 DO(16채널) |
|
982 |
|
|
컨트롤러 AI 유형 |
|
984 |
|
|
[V/mA] |
컨트롤러 아날로그 입력 |
992 |
|
|
컨트롤러 AO 유형 |
|
994 |
|
|
[V/mA] |
컨트롤러 아날로그 출력 |
1002 |
|
|
플랜지 DI |
|
1003 |
|
|
플랜지 DO |
|
1004 |
|
|
[V/mA] |
플랜지 아날로그 입력 채널 |
1020 |
|
|
엔코더 스트로브 이벤트 횟수 |
|
1022 |
|
|
외부 엔코더 펄스 카운트 |
|
1030 |
|
|
[deg] |
최종 목표 조인트용 예약 영역 |
1054 |
|
|
[mm, deg] |
최종 목표 TCP용 예약 영역 |
1078 |
|
|
0~5 |
로봇 모드 |
1079 |
|
|
0~15 |
운전 상태(대기, 이동 중 등) |
1080 |
|
|
서보 모드(위치, 토크) |
|
1082 |
|
|
향후 확장을 위한 예약 바이트 |
전체 크기: 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 단위인 미터가 아니라 밀리미터이고, 각도는 라디안이 아니라 도라는 점에 유의하세요.