2. Descrição das Estruturas de Dados
2.1. Tipo de Dados de Posição Articular
1/**
2* @brief Tipo de dados de posição articular
3*/
4public class JointPos
5{
6 double J1;
7 double J2;
8 double J3;
9 double J4;
10 double J5;
11 double J6;
12
13 public JointPos(double j1, double j2, double j3, double j4, double j5, double j6)
14 {
15 J1 = j1;
16 J2 = j2;
17 J3 = j3;
18 J4 = j4;
19 J5 = j5;
20 J6 = j6;
21 }
22
23 public JointPos()
24 {
25
26 }
27}
2.2. Tipo de Dados de Posição no Espaço Cartesiano
1/**
2* @brief Tipo de dados de posição no espaço cartesiano
3*/
4public class DescTran
5{
6 public double x = 0.0; /* Coordenada do eixo X, em mm */
7 public double y = 0.0; /* Coordenada do eixo Y, em mm */
8 public double z = 0.0; /* Coordenada do eixo Z, em mm */
9 public DescTran(double posX, double posY, double posZ)
10 {
11 x = posX;
12 y = posY;
13 z = posZ;
14 }
15
16 public DescTran()
17 {
18
19 }
20
21}
2.3. Tipo de Dados de Atitude de Ângulos de Euler
1/**
2* @brief Tipo de dados de atitude de ângulos de Euler
3*/
4public class Rpy
5{
6 public double rx = 0.0; /* Ângulo de rotação em torno do eixo X fixo, em graus */
7 public double ry = 0.0; /* Ângulo de rotação em torno do eixo Y fixo, em graus */
8 public double rz = 0.0; /* Ângulo de rotação em torno do eixo Z fixo, em graus */
9 public Rpy(double rotateX, double rotateY, double rotateZ)
10 {
11 rx = rotateX;
12 ry = rotateY;
13 rz = rotateZ;
14 }
15}
2.4. Tipo de Dados de Pose no Espaço Cartesiano
1/**
2*@brief Tipo de pose no espaço cartesiano
3*/
4public class DescPose
5{
6 public DescTran tran = new DescTran(0.0, 0.0, 0.0); /* Posição no espaço cartesiano */
7 public Rpy rpy = new Rpy(0.0, 0.0, 0.0); /* Atitude no espaço cartesiano */
8
9 public DescPose()
10 {
11
12 }
13
14 public DescPose(DescTran descTran, Rpy rotateRpy)
15 {
16 tran = descTran;
17 rpy = rotateRpy;
18 }
19
20 public DescPose(double tranX, double tranY, double tranZ, double rX, double ry, double rz)
21 {
22 tran.x = tranX;
23 tran.y = tranY;
24 tran.z = tranZ;
25 rpy.rx = rX;
26 rpy.ry = ry;
27 rpy.rz = rz;
28 }
29
30 public String toString()
31 {
32 return String.valueOf(tran.x) + "," + String.valueOf(tran.y) + "," + String.valueOf(tran.z) + "," + String.valueOf(rpy.rx) + "," + String.valueOf(rpy.ry) + "," + String.valueOf(rpy.rz);
33 }
34}
2.5. Tipo de Dados de Posição do Eixo Estendido
1/**
2* @brief Tipo de dados de posição do eixo estendido
3*/
4public class ExaxisPos
5{
6 public double axis1 = 0.0;
7 public double axis2 = 0.0;
8 public double axis3 = 0.0;
9 public double axis4 = 0.0;
10
11 public ExaxisPos()
12 {
13
14 }
15 public ExaxisPos(double[] exaxisPos)
16 {
17 axis1 = exaxisPos[0];
18 axis2 = exaxisPos[1];
19 axis3 = exaxisPos[2];
20 axis4 = exaxisPos[3];
21 }
22
23 public ExaxisPos(double pos1, double pos2, double pos3, double pos4)
24 {
25 axis1 = pos1;
26 axis2 = pos2;
27 axis3 = pos3;
28 axis4 = pos4;
29 }
30}
2.6. Tipo de Dados do Sensor de Torque
1/**
2* @brief Componentes de força e torque do sensor de força
3*/
4public class ForceTorque
5{
6 public double fx; /* Componente de força ao longo do eixo X, em N */
7 public double fy; /* Componente de força ao longo do eixo Y, em N */
8 public double fz; /* Componente de força ao longo do eixo Z, em N */
9 public double tx; /* Componente de torque em torno do eixo X, em Nm */
10 public double ty; /* Componente de torque em torno do eixo Y, em Nm */
11 public double tz; /* Componente de torque em torno do eixo Z, em Nm */
12 public ForceTorque(double fX, double fY, double fZ, double tX, double tY, double tZ)
13 {
14 fx = fX;
15 fy = fY;
16 fz = fZ;
17 tx = tX;
18 ty = tY;
19 tz = tZ;
20 }
21}
2.7. Tipo de Dados de Parâmetros da Espiral
1/**
2* @brief Tipo de dados de parâmetros da espiral
3*/
4public class SpiralParam
5{
6 public int circle_num; /* Número de voltas da espiral */
7 public double circle_angle; /* Ângulo de inclinação da espiral */
8 public double rad_init; /* Raio inicial da espiral, em mm */
9 public double rad_add; /* Incremento do raio */
10 public double rotaxis_add; /* Incremento na direção do eixo de rotação */
11 public int rot_direction; /* Direção de rotação, 0-horário, 1-anti-horário */
12 public int velAccMode; /* Modo de parâmetro de velocidade/aceleração: 0-velocidade angular constante; 1-velocidade linear constante */
13 public SpiralParam(int circleNum, double circleAngle, double radInit, double radAdd, double rotaxisAdd, int rotDirection, int vel_AccMode)
14 {
15 circle_num = circleNum;
16 circle_angle = circleAngle;
17 rad_init = radInit;
18 rad_add = radAdd;
19 rotaxis_add = rotaxisAdd;
20 rot_direction = rotDirection;
21 velAccMode = vel_AccMode;
22 }
23}
2.8. Tipo de Estado do Eixo Estendido
1/**
2* @brief Tipo de estado do eixo estendido
3*/
4public class EXT_AXIS_STATUS
5{
6 public double pos = 0; // Posição do eixo estendido
7 public double vel = 0; // Velocidade do eixo estendido
8 public int errorCode = 0; // Código de falha do eixo estendido
9 public int ready = 0; // Servo pronto
10 public int inPos = 0; // Servo no lugar
11 public int alarm = 0; // Alarme do servo
12 public int flerr = 0; // Erro de seguimento
13 public int nlimit = 0; // Limite negativo atingido
14 public int pLimit = 0; // Limite positivo atingido
15 public int mdbsOffLine = 0; // Driver offline no barramento 485
16 public int mdbsTimeout = 0; // Tempo limite de comunicação 485 entre placa de controle e caixa de controle
17 public int homingStatus = 0; // Status de retorno à origem do eixo estendido
18}
2.9. Tipo de Sensor
1/**
2* @brief Tipo de sensor
3*/
4public class DeviceConfig
5{
6 int company = 0; // Fabricante
7 int device = 0; // Tipo/número do dispositivo
8 int softwareVersion = 0; // Versão do software
9 int bus = 0; // Local de montagem
10
11 public DeviceConfig()
12 {
13
14 }
15
16 public DeviceConfig(int company, int device, int softwareVersion, int bus)
17 {
18 this.company = company;
19 this.device = device;
20 this.softwareVersion = softwareVersion;
21 this.bus = bus;
22 }
23}
2.10. Configuração do Eixo Estendido 485
1/**
2* @brief Configuração do eixo estendido 485
3*/
4public class Axis485Param
5{
6 int servoCompany; // Fabricante do servo driver, 1-Dynatec
7 int servoModel; // Modelo do servo driver, 1-FD100-750C
8 int servoSoftVersion; // Versão do software do servo driver, 1-V1.0
9 int servoResolution; // Resolução do codificador
10 double axisMechTransRatio; // Relação de transmissão mecânica
11
12 public Axis485Param(int company, int model, int softVersion, int resolution, double mechTransRatio)
13 {
14 servoCompany = company;
15 servoModel = model;
16 servoSoftVersion = softVersion;
17 servoResolution = resolution;
18 axisMechTransRatio = mechTransRatio;
19 }
20
21 public Axis485Param()
22 {
23
24 }
25}
2.11. Estado do Controlador Servo
1/**
2* @brief Estado do controlador servo
3*/
4public class ROBOT_AUX_STATE
5{
6 public int servoId = 0; // Número de ID do servo driver
7 public int servoErrCode = 0; // Código de falha do servo driver
8 public int servoState = 0; // Estado do servo driver
9 public double servoPos = 0; // Posição atual do servo
10 public float servoVel = 0; // Velocidade atual do servo
11 public float servoTorque = 0; // Torque atual do servo
12}
2.12. Estado de Interrupção da Soldagem
1/**
2* @brief Estado de interrupção da soldagem
3*/
4public class WELDING_BREAKOFF_STATE
5{
6 public int breakOffState = 0; // Estado de interrupção da soldagem
7 public int weldArcState = 0; // Estado de interrupção do arco de soldagem
8}
2.13. Parâmetros de Comunicação UDP do Eixo Estendido
1/**
2* @brief Parâmetros de comunicação UDP do eixo estendido
3*/
4public class UDPComParam
5{
6 public String ip = "192.168.58.88"; // Endereço IP
7 public int port = 2021; // Número da porta
8 public int period = 2; // Período de comunicação (ms, padrão 2, não modifique este parâmetro)
9 public int lossPkgTime = 50; // Tempo de detecção de perda de pacote (ms)
10 public int lossPkgNum = 2; // Número de perdas de pacote
11 public int disconnectTime = 100; // Duração para confirmação de desconexão da comunicação
12 public int reconnectEnable = 0; // Ativação da reconexão automática em caso de desconexão 0-desativar 1-ativar
13 public int reconnectPeriod = 100; // Intervalo do período de reconexão (ms)
14 public int reconnectNum = 3; // Número de tentativas de reconexão
15 public int selfConnect = 0; // Estabelecer conexão automaticamente após reinicialização com perda de energia; 0-não estabelecer; 1-estabelecer
16}
2.14. Tipo de Estrutura de Retroalimentação de Estado do Robô
1/**
2* @brief Tipo de estrutura de retroalimentação de estado do robô
3*/
4public class ROBOT_STATE_PKG
5{
6 public short frame_head = 0; // Cabeçalho do quadro 0x5A5A
7 public byte frame_cnt = 0; // Contagem do quadro
8 public short data_len = 0; // Comprimento dos dados
9 public int program_state = 0; // Estado de execução do programa, 1-parado; 2-em execução; 3-pausado
10 public int robot_state = 0; // Estado de movimento do robô, 1-parado; 2-em movimento; 3-pausado; 4-arrasto
11 public int main_code = 0; // Código de falha principal
12 public int sub_code = 0; // Código de falha secundário
13 public int robot_mode = 0; // Modo do robô, 0-modo automático; 1-modo manual
14 public double[] jt_cur_pos = new double[6]; // Posições atuais das juntas
15 public double[] tl_cur_pos = new double[6]; // Pose atual da ferramenta
16 public double[] flange_cur_pos = new double[6]; // Pose atual do flange da extremidade
17 public double[] actual_qd = new double[6]; // Velocidades atuais das juntas do robô
18 public double[] actual_qdd = new double[6]; // Acelerações atuais das juntas do robô
19 public double[] target_TCP_CmpSpeed = new double[2]; // Velocidade de comando sintética do TCP do robô
20 public double[] target_TCP_Speed = new double[6]; // Velocidade de comando do TCP do robô
21 public double[] actual_TCP_CmpSpeed = new double[2]; // Velocidade real sintética do TCP do robô
22 public double[] actual_TCP_Speed = new double[6]; // Velocidade real do TCP do robô
23 public double[] jt_cur_tor = new double[6]; // Torques atuais
24 public int tool = 0; // Número da ferramenta
25 public int user = 0; // Número da peça
26 public int cl_dgt_output_h = 0; // Saída digital 15-8
27 public int cl_dgt_output_l = 0; // Saída digital 7-0
28 public int tl_dgt_output_l = 0; // Saída digital da ferramenta 7-0 (apenas bits 0-1 válidos)
29 public int cl_dgt_input_h = 0; // Entrada digital 15-8
30 public int cl_dgt_input_l = 0; // Entrada digital 7-0
31 public int tl_dgt_input_l = 0; // Entrada digital da ferramenta 7-0 (apenas bits 0-1 válidos)
32 public short[] cl_analog_input = new short[2]; // Entrada analógica da caixa de controle
33 public short tl_anglog_input = 0; // Entrada analógica da ferramenta
34 public double[] ft_sensor_raw_data = new double[6]; // Dados brutos do sensor de força/torque
35 public double[] ft_sensor_data = new double[6]; // Dados do sensor de força/torque no sistema de coordenadas de referência
36 public int ft_sensor_active = 0; // Estado de ativação do sensor de força/torque, 0-reset, 1-ativado
37 public int EmergencyStop = 0; // Sinalizador de parada de emergência
38 public int motion_done = 0; // Sinal de movimento concluído
39 public int gripper_motiondone = 0; // Sinal de movimento concluído da garra
40 public int mc_queue_len = 0; // Comprimento da fila de movimento
41 public int collisionState = 0; // Detecção de colisão, 1-colisão; 0-sem colisão
42 public int trajectory_pnum = 0; // Número do ponto de trajetória
43 public int safety_stop0_state = 0; /* Sinal de parada de segurança SI0 */
44 public int safety_stop1_state = 0; /* Sinal de parada de segurança SI1 */
45 public int gripper_fault_id = 0; /* Número da garra com falha */
46 public short gripper_fault = 0; /* Falha da garra */
47 public short gripper_active = 0; /* Estado de ativação da garra */
48 public int gripper_position = 0; /* Posição da garra */
49 public int gripper_speed = 0; /* Velocidade da garra */
50 public int gripper_current = 0; /* Corrente da garra */
51 public int gripper_tmp = 0; /* Temperatura da garra */
52 public int gripper_voltage = 0; /* Tensão da garra */
53 public ROBOT_AUX_STATE auxState = new ROBOT_AUX_STATE(); /* Estado do eixo estendido 485 */
54 public EXT_AXIS_STATUS extAxisStatus0 = new EXT_AXIS_STATUS();
55 public EXT_AXIS_STATUS extAxisStatus1 = new EXT_AXIS_STATUS();
56 public EXT_AXIS_STATUS extAxisStatus2 = new EXT_AXIS_STATUS();
57 public EXT_AXIS_STATUS extAxisStatus3 = new EXT_AXIS_STATUS();
58 public short[] extDIState = new short[8]; // Entrada DI estendida
59 public short[] extDOState = new short[8]; // Saída DO estendida
60 public short[] extAIState = new short[4]; // Entrada AI estendida
61 public short[] extAOState = new short[4]; // Saída AO estendida
62 public int rbtEnableState = 0; // Estado de habilitação do robô
63 public double[] jointDriverTorque = new double[6]; // Torque atual do driver articular
64 public double[] jointDriverTemperature = new double[6]; // Temperatura atual do driver articular
65 public ROBOT_TIME robotTime = new ROBOT_TIME();
66 public int softwareUpgradeState = 0; // Estado de atualização de software do robô 0-ocioso ou enviando pacote de atualização; 1~100: percentagem de conclusão da atualização; -1: falha na atualização do software; -2: falha na verificação; -3: falha na verificação da versão; -4: falha na descompactação; -5: falha na atualização da configuração do usuário; -6: falha na atualização da configuração do periférico; -7: falha na atualização da configuração do eixo estendido; -8: falha na atualização da configuração do robô; -9: falha na atualização da configuração dos parâmetros DH
67 public int endLuaErrCode; // Estado de execução do LUA da extremidade
68
69 public int[] cl_analog_output = new int[2]; // Saída analógica da caixa de controle
70 public int tl_analog_output; // Saída analógica da ferramenta
71 public float gripperRotNum; // Número atual de rotações da garra rotativa
72 public int gripperRotSpeed; // Percentagem da velocidade atual de rotação da garra rotativa
73 public int gripperRotTorque; // Percentagem do torque atual de rotação da garra rotativa
74
75 public WELDING_BREAKOFF_STATE weldingBreakOffstate = new WELDING_BREAKOFF_STATE(); // Estado de interrupção da soldagem
76
77 public double[] jt_tgt_tor = new double[6]; // Torque de comando das juntas
78 public int smartToolState; // Estado do botão do SmartTool
79
80 public float wideVoltageCtrlBoxTemp; // Temperatura da caixa de controle de larga tensão
81 public int wideVoltageCtrlBoxFanVel; // Velocidade da ventoinha da caixa de controle de larga tensão (mA)
82
83 public double[] toolCoord = new double[6]; // Sistema de coordenadas da ferramenta
84 public double[] wobjCoord = new double[6]; // Sistema de coordenadas da peça
85 public double[] extoolCoord = new double[6]; // Sistema de coordenadas da ferramenta externa
86 public double[] exAxisCoord = new double[6]; // Sistema de coordenadas do eixo estendido
87 public double load; // Massa da carga
88 public double[] loadCog = new double[3]; // Centro de massa da carga
89
90 public double[] lastServoTarget = new double[6]; // Última posição alvo do servoJ na fila
91 public int servoJCmdNum; // Contagem de instruções servoJ
92
93 public short check_sum = 0; /* Soma de verificação */
94
95 public ROBOT_STATE_PKG()
96 {
97
98 }
99}