7. Configurações de Segurança do Robô
7.1. Definir Nível de Colisão
1/**
2* @brief Define o nível de colisão
3* @param [in] mode 0-nível, 1-percentagem
4* @param [in] level Limiar de colisão, intervalo do nível [1 - 10 corresponde ao nível 1-10, 100-desativado], intervalo da percentagem [0~10 corresponde a 0% - 100%]
5* @param [in] config 0-não atualizar arquivo de configuração, 1-atualizar arquivo de configuração
6* @return Código de erro
7*/
8int SetAnticollision(int mode, Object[] level, int config);
7.2. Definir Estratégia Pós-Colisão
1/**
2* @brief Define a estratégia pós-colisão
3* @param [in] strategy 0-parar com erro, 1-continuar execução
4* @param [in] safeTime Tempo de paragem segura [1000 - 2000]ms
5* @param [in] safeDistance Distância de paragem segura [1-150]mm
6* @param [in] safetyMargin Fator de segurança para j1-j6 [1-10]
7* @return Código de erro
8*/
9int SetCollisionStrategy(int strategy, int safeTime, int safeDistance, int safetyMargin[]);
7.3. Iniciar Função de Limiar de Deteção de Colisão Personalizada
Novo na versão Java: SDK-v1.0.3-3.8.0
1/**
2* @brief Inicia a função de limiar de deteção de colisão personalizada, define os limiares de deteção de colisão na extremidade da junta e na extremidade do TCP
3* @param [in] flag 1-apenas deteção da junta ativada; 2-apenas deteção do TCP ativada; 3-deteção da junta e do TCP ativadas simultaneamente
4* @param [in] jointDetectionThreshould Limiar de deteção de colisão da junta j1-j6
5* @param [in] tcpDetectionThreshould Limiar de deteção de colisão do TCP, xyzabc
6* @param [in] block 0-não bloqueante; 1-bloqueante
7* @return Código de erro
8*/
9public int CustomCollisionDetectionStart(int flag, double[] jointDetectionThreshould, double[] tcpDetectionThreshould, int block);
7.4. Desativar Função de Limiar de Deteção de Colisão Personalizada
Novo na versão Java: SDK-v1.0.3-3.8.0
1/**
2* @brief Desativa a função de limiar de deteção de colisão personalizada
3* @return Código de erro
4*/
5public int CustomCollisionDetectionEnd();
7.5. Exemplo de Código para Definição do Nível de Colisão do Robô
1public static int TestCollision(Robot robot)
2{
3 int mode = 0;
4 int config = 1;
5 Object[] level1 = new Object[]{ 1.0,2.0,3.0,4.0,5.0,6.0 };
6 Object[] level2 = new Object[]{ 50.0,20.0,30.0,40.0,50.0,60.0 };
7
8 int rtn = robot.SetAnticollision(mode, level1, config);
9 System.out.println("SetAnticollision mode 0 rtn is: "+ rtn);
10 mode = 1;
11 rtn = robot.SetAnticollision(mode, level2, config);
12 System.out.println("SetAnticollision mode 1 rtn is :"+ rtn);
13
14 JointPos p1Joint = new JointPos(-11.904, -99.669, 117.473, -108.616, -91.726, 74.256);
15 JointPos p2Joint = new JointPos(-45.615, -106.172, 124.296, -107.151, -91.282, 74.255);
16
17 DescPose p1Desc = new DescPose(-419.524, -13.000, 351.569, -178.118, 0.314, 3.833);
18 DescPose p2Desc = new DescPose(-321.222, 185.189, 335.520, -179.030, -1.284, -29.869);
19
20 ExaxisPos exaxisPos = new ExaxisPos(0.0, 0.0, 0.0, 0.0);
21 DescPose offdese = new DescPose(0.0, 0.0, 0.0, 0.0, 0.0, 0.0);
22 robot.MoveL(p2Joint, p2Desc, 0, 0, 100, 100, 100, 2,0, exaxisPos, 0, 0, offdese,0,10);
23 robot.ResetAllError();
24 int[] safety = new int[]{ 5,5,5,5,5,5 };
25 rtn = robot.SetCollisionStrategy(3, 1000, 150, 250, safety);
26 System.out.println("SetCollisionStrategy rtn is:"+ rtn);
27
28 double[] jointDetectionThreshould = new double[]{ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1 };
29 double[] tcpDetectionThreshould = new double[] { 60,60,60,60,60,60 };
30 rtn = robot.CustomCollisionDetectionStart(3, jointDetectionThreshould, tcpDetectionThreshould, 0);
31 System.out.println("CustomCollisionDetectionStart rtn is :"+ rtn);
32
33 robot.MoveL(p1Joint, p1Desc, 0, 0, 100, 100, 100, -1,0, exaxisPos, 0, 0, offdese,0,10);
34 robot.MoveL(p2Joint, p2Desc, 0, 0, 100, 100, 100, -1,0, exaxisPos, 0, 0, offdese,0,10);
35 rtn = robot.CustomCollisionDetectionEnd();
36 System.out.println("CustomCollisionDetectionEnd rtn is: "+ rtn);
37 return 0;
38}
7.6. Definir Limite Positivo
1/**
2* @brief Define o limite positivo
3* @param [in] limit Posições das seis juntas, em graus
4* @return Código de erro
5*/
6int SetLimitPositive(Object[] limit);
7.7. Definir Limite Negativo
1/**
2* @brief Define o limite negativo
3* @param [in] limit Posições das seis juntas, em graus
4* @return Código de erro
5*/
6int SetLimitNegative(Object[] limit);
7.8. Obter Ângulo do Limite Flexível das Juntas
1/**
2* @brief Obtém o ângulo do limite flexível das juntas
3* @param [in] flag 0-bloqueante, 1-não bloqueante
4* @param [out] negative Ângulo do limite negativo, em graus
5* @param [out] positive Ângulo do limite positivo, em graus
6* @return Código de erro
7*/
8int GetJointSoftLimitDeg(int flag, Object[] negative, Object[] positive);
7.9. Exemplo de Código para Definição de Limites do Robô
1public static int TestLimit(Robot robot)
2{
3 Object[] plimit = new Object[] { 170.0,80.0,150.0,80.0,170.0,160.0 };
4 robot.SetLimitPositive(plimit);
5 Object[] nlimit = new Object[] { -170.0,-260.0,-150.0,-260.0,-170.0,-160.0 };
6 robot.SetLimitNegative(nlimit);
7
8 Object[] neg_deg = new Object[] {0, 0 , 0, 0, 0, 0}, pos_deg = new Object[]{0, 0 , 0, 0, 0, 0};
9 robot.GetJointSoftLimitDeg(1, neg_deg, pos_deg);
10 System.out.println("neg limit deg:"+ neg_deg[0]+","+ neg_deg[1]+","+ neg_deg[2]+","+ neg_deg[3]+","+ neg_deg[4]+","+ neg_deg[5]);
11 System.out.println("pos limit deg:"+pos_deg[0]+","+ pos_deg[1]+","+ pos_deg[2]+","+ pos_deg[3]+","+ pos_deg[4]+","+pos_deg[5]);
12 return 0;
13}
7.10. Definir Método de Deteção de Colisão do Robô
Alterado na versão Java: SDK-v1.0.5-3.8.2
1/**
2* @brief Define o método de deteção de colisão do robô
3* @param [in] method Método de deteção de colisão: 0-modo de corrente; 1-duplo encoder; 2-corrente e duplo encoder ativados simultaneamente
4* @param [in] thresholdMode Modo do limiar de nível de colisão; 0-modo de limiar fixo do nível de colisão; 1-limiar de deteção de colisão personalizado
5* @return Código de erro
6*/
7int SetCollisionDetectionMethod(int method, int thresholdMode)
7.11. Definir Ativação/Desativação de Deteção de Colisão em Estática
1/**
2* @brief Define a ativação/desativação de deteção de colisão em estática
3* @param [in] status 0-desativar; 1-ativar
4* @return Código de erro
5*/
6public int SetStaticCollisionOnOff(int status)
7.12. Exemplo de Código para Definição do Método de Deteção de Colisão do Robô
1public static int TestCollisionMethod(Robot robot)
2{
3 int rtn = robot.SetCollisionDetectionMethod(0);
4
5 rtn = robot.SetStaticCollisionOnOff(1);
6 System.out.println("SetStaticCollisionOnOff On rtn is:"+ rtn);
7 robot.Sleep(5000);
8 rtn = robot.SetStaticCollisionOnOff(0);
9 System.out.println("SetStaticCollisionOnOff Off rtn is:"+ rtn);
10
11 robot.CloseRPC();
12 return 0;
13}
7.13. Deteção de Torque e Potência das Juntas
1/**
2* @brief Deteção de torque e potência das juntas
3* @param [in] status 0-desativar; 1-ativar
4* @param [in] power Potência máxima definida (W)
5* @return Código de erro
6*/
7public int SetPowerLimit(int status, double power)
7.14. Exemplo de Código para Deteção de Torque e Potência das Juntas
1public static int TestPowerLimit(Robot robot)
2{
3 robot.DragTeachSwitch(1);
4 robot.SetPowerLimit(1, 200);
5 List<Number> joint_toq = new ArrayList<>();
6 joint_toq = robot.GetJointTorques(1);
7
8 int count = 100;
9 robot.ServoJTStart(); // # início do ServoJT
10 int error = 0;
11 while (count > 0)
12 {
13 count = count - 1;
14 robot.Sleep(1);
15 }
16 error = robot.ServoJTEnd();
17 robot.DragTeachSwitch(0);
18
19 robot.CloseRPC();
20 return 0;
21}
7.15. Definir Parâmetros de Velocidade Segura
1/**
2* @brief Define os parâmetros de velocidade segura
3* @param enable 0-desativar; 1-ativar no modo manual; 2-ativar em todos os modos (limitação automática de velocidade não suportada)
4* @param maxTCPVel Limitar a velocidade máxima do TCP;[0-1000]mm/s
5* @param strategy Estratégia após excesso de velocidade; 0-parar com alarme; 1-limitação automática de velocidade; 2-parar com alarme e desativar
6* @return Código de erro
7*/
8public int SetVelReducePara(int enable, double maxTCPVel, int strategy)
7.16. Exemplo de Código SDK para Definir Parâmetros de Velocidade Segura
1public static int TestSetVelReducePara(Robot robot) {
2 int rtn = 0;
3
4 JointPos j1 = new JointPos(0, -90, 90, 0, 0, 0);
5 JointPos j2 = new JointPos(90, -90, 90, 0, 0, 0);
6 ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
7 DescPose offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
8
9 robot.SetSpeed(80);
10 rtn = robot.SetVelReducePara(2, 30, 1);
11 System.out.printf("SetVelReducePara param error rtn is %d\n", rtn);
12
13 rtn = robot.SetVelReducePara(0, 30, 1);
14 System.out.printf("SetVelReducePara disable reduce vel rtn is %d\n", rtn);
15 robot.MoveJ(j1, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
16 robot.MoveJ(j2, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
17
18 rtn = robot.SetVelReducePara(1, 30, 1);
19 System.out.printf("SetVelReducePara reduce vel rtn is %d\n", rtn);
20 robot.MoveJ(j1, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
21 robot.MoveJ(j2, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
22
23 rtn = robot.SetVelReducePara(2, 30, 2);
24 System.out.printf("SetVelReducePara disable robot rtn is %d\n", rtn);
25 robot.MoveJ(j1, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
26 robot.MoveJ(j2, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
27
28 robot.Sleep(2000);
29 robot.ResetAllError();
30 robot.RobotEnable(1);
31 robot.Sleep(1000);
32
33 rtn = robot.SetVelReducePara(2, 30, 0);
34 System.out.printf("SetVelReducePara report error rtn is %d\n", rtn);
35 robot.MoveJ(j1, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
36 robot.MoveJ(j2, 0, 0, 100, 100, 100.0, epos, -1.0, 0, offset_pos);
37
38 robot.Sleep(1000);
39 return 0;
40}