6. Configurações Comuns do Robô
6.1. Definir Ponto de Referência da Ferramenta - Método dos Seis Pontos
1/**
2 * @brief Define o ponto de referência da ferramenta - método dos seis pontos
3 * @param [in] point_num Número do ponto, intervalo [1~6]
4 * @return Código de erro
5 */
6errno_t SetToolPoint(int point_num);
6.2. Calcular Sistema de Coordenadas da Ferramenta
1/**
2 * @brief Calcula o sistema de coordenadas da ferramenta
3 * @param [out] tcp_pose Sistema de coordenadas da ferramenta
4 * @return Código de erro
5 */
6errno_t ComputeTool(DescPose *tcp_pose);
6.3. Definir Ponto de Referência da Ferramenta - Método dos Quatro Pontos
1/**
2 * @brief Define o ponto de referência da ferramenta - método dos quatro pontos
3 * @param [in] point_num Número do ponto, intervalo [1~4]
4 * @return Código de erro
5 */
6errno_t SetTcp4RefPoint(int point_num);
6.4. Calcular Sistema de Coordenadas da Ferramenta
1/**
2 * @brief Calcula o sistema de coordenadas da ferramenta
3 * @param [out] tcp_pose Sistema de coordenadas da ferramenta
4 * @return Código de erro
5 */
6errno_t ComputeTcp4(DescPose *tcp_pose);
6.5. Calcular Sistema de Coordenadas da Ferramenta com Base em Informações de Pontos
Novo na versão C++SDK-v2.1.8-3.7.8.
1/**
2 * @brief Calcula o sistema de coordenadas da ferramenta com base em informações de pontos
3 * @param [in] method Método de cálculo; 0-método dos quatro pontos; 1-método dos seis pontos
4 * @param [in] pos Grupo de posições das juntas, comprimento do array é 4 para o método dos quatro pontos e 6 para o método dos seis pontos
5 * @param [out] coord Resultado do sistema de coordenadas da ferramenta
6 * @return Código de erro
7*/
8errno_t ComputeToolCoordWithPoints(int method, JointPos pos[], DescPose& coord);
6.6. Definir Sistema de Coordenadas da Ferramenta
Alterado na versão C++SDK-v2.1.5.0.
1/**
2 * @brief Define o sistema de coordenadas da ferramenta
3 * @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4 * @param [in] coord Pose do ponto central da ferramenta em relação ao centro do flange da extremidade
5 * @param [in] type 0-sistema de coordenadas da ferramenta, 1-sistema de coordenadas do sensor
6 * @param [in] install Posição de instalação, 0-extremidade do robô, 1-externo ao robô
7 * @param [in] toolID ID da ferramenta
8 * @param [in] loadNum Número da carga
9 * @return Código de erro
10 */
11errno_t SetToolCoord(int id, DescPose *coord, int type, int install, int toolID, int loadNum);
6.7. Definir Lista de Sistemas de Coordenadas da Ferramenta
Alterado na versão C++SDK-v2.1.5.0.
1/**
2 * @brief Define a lista de sistemas de coordenadas da ferramenta
3 * @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4 * @param [in] coord Pose do ponto central da ferramenta em relação ao centro do flange da extremidade
5 * @param [in] type 0-sistema de coordenadas da ferramenta, 1-sistema de coordenadas do sensor
6 * @param [in] install Posição de instalação, 0-extremidade do robô, 1-externo ao robô
7 * @param [in] loadNum Número da carga
8 * @return Código de erro
9 */
10errno_t SetToolList(int id, DescPose *coord, int type, int install, int loadNum);
6.8. Obter Sistema de Coordenadas da Ferramenta Atual
1/**
2* @brief Obtém o sistema de coordenadas da ferramenta atual
3* @param [in] flag 0-bloqueante, 1-não bloqueante
4* @param [out] desc_pos Pose do sistema de coordenadas da ferramenta
5* @return Código de erro
6*/
7errno_t GetTCPOffset(uint8_t flag, DescPose *desc_pos);
6.9. Exemplo de Código para Operações do Sistema de Coordenadas da Ferramenta do Robô
1 int TestTCPCompute(void)
2 {
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 DescPose p1Desc(186.331, 487.913, 209.850, 149.030, 0.688, -114.347);
14 JointPos p1Joint(-127.876, -75.341, 115.417, -122.741, -59.820, 74.300);
15 DescPose p2Desc(69.721, 535.073, 202.882, -144.406, -14.775, -89.012);
16 JointPos p2Joint(-101.780, -69.828, 110.917, -125.740, -127.841, 74.300);
17 DescPose p3Desc(146.861, 578.426, 205.598, 175.997, -36.178, -93.437);
18 JointPos p3Joint(-112.851, -60.191, 86.566, -80.676, -97.463, 74.300);
19 DescPose p4Desc(136.284, 509.876, 225.613, 178.987, 1.372, -100.696);
20 JointPos p4Joint(-116.397, -76.281, 113.845, -128.611, -88.654, 74.299);
21 DescPose p5Desc(138.395, 505.972, 298.016, 179.134, 2.147, -101.110);
22 JointPos p5Joint(-116.814, -82.333, 109.162, -118.662, -88.585, 74.302);
23 DescPose p6Desc(105.553, 454.325, 232.017, -179.426, 0.444, -99.952);
24 JointPos p6Joint(-115.649, -84.367, 122.447, -128.663, -90.432, 74.303);
25 ExaxisPos exaxisPos(0, 0, 0, 0);
26 DescPose offdese(0, 0, 0, 0, 0, 0);
27 JointPos posJ[6] = { p1Joint , p2Joint , p3Joint , p4Joint , p5Joint , p6Joint };
28 DescPose coordRtn = {};
29 rtn = robot.ComputeToolCoordWithPoints(1, posJ, coordRtn);
30 printf("ComputeToolCoordWithPoints %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
31 robot.MoveJ(&p1Joint, &p1Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
32 robot.SetToolPoint(1);
33 robot.MoveJ(&p2Joint, &p2Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
34 robot.SetToolPoint(2);
35 robot.MoveJ(&p3Joint, &p3Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
36 robot.SetToolPoint(3);
37 robot.MoveJ(&p4Joint, &p4Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
38 robot.SetToolPoint(4);
39 robot.MoveJ(&p5Joint, &p5Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
40 robot.SetToolPoint(5);
41 robot.MoveJ(&p6Joint, &p6Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
42 robot.SetToolPoint(6);
43 rtn = robot.ComputeTool(&coordRtn);
44 printf("6 Point ComputeTool %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
45 robot.SetToolList(1, &coordRtn, 0, 0, 0);
46 robot.MoveJ(&p1Joint, &p1Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
47 robot.SetTcp4RefPoint(1);
48 robot.MoveJ(&p2Joint, &p2Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
49 robot.SetTcp4RefPoint(2);
50 robot.MoveJ(&p3Joint, &p3Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
51 robot.SetTcp4RefPoint(3);
52 robot.MoveJ(&p4Joint, &p4Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
53 robot.SetTcp4RefPoint(4);
54 rtn = robot.ComputeTcp4(&coordRtn);
55 printf("4 Point ComputeTool %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
56 robot.SetToolCoord(2, &coordRtn, 0, 0, 1, 0);
57 DescPose getCoord = {};
58 rtn = robot.GetTCPOffset(0, &getCoord);
59 printf("GetTCPOffset %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
60 robot.CloseRPC();
61 return 0;
62 }
6.10. Definir Ponto de Referência da Ferramenta Externa - Método dos Seis Pontos
1/**
2 * @brief Define o ponto de referência da ferramenta externa - método dos seis pontos
3 * @param [in] point_num Número do ponto, intervalo [1~4]
4 * @return Código de erro
5 */
6errno_t SetExTCPPoint(int point_num);
6.11. Calcular Sistema de Coordenadas da Ferramenta Externa
1/**
2 * @brief Calcula o sistema de coordenadas da ferramenta externa
3 * @param [out] tcp_pose Sistema de coordenadas da ferramenta externa
4 * @return Código de erro
5 */
6errno_t ComputeExTCF(DescPose *tcp_pose);
6.12. Definir Sistema de Coordenadas da Ferramenta Externa
Alterado na versão C++SDK-v2.1.2.0.
1/**
2* @brief Define o sistema de coordenadas da ferramenta externa
3* @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4* @param [in] etcp Pose do ponto central da ferramenta em relação ao centro do flange da extremidade
5* @param [in] etool Pendente
6* @return Código de erro
7*/
8errno_t SetExToolCoord(int id, DescPose *etcp, DescPose *etool);
6.13. Definir Lista de Sistemas de Coordenadas da Ferramenta Externa
Alterado na versão C++SDK-v2.1.2.0.
1/**
2* @brief Define a lista de sistemas de coordenadas da ferramenta externa
3* @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4* @param [in] etcp Pose do ponto central da ferramenta em relação ao centro do flange da extremidade
5* @param [in] etool Pendente
6* @return Código de erro
7*/
8errno_t SetExToolList(int id, DescPose *etcp, DescPose *etool);
6.14. Exemplo de Código para Operações do Sistema de Coordenadas da Ferramenta Externa do Robô
1int TestExtCoord(void)
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 DescPose p1Desc(-89.606, 779.517, 193.516, 178.000, 0.476, -92.484);
14 JointPos p1Joint(-108.145, -50.137, 85.818, -125.599, -87.946, 74.329);
15 DescPose p2Desc(-24.656, 850.384, 191.361, 177.079, -2.058, -95.355);
16 JointPos p2Joint(-111.024, -41.538, 69.222, -114.913, -87.743, 74.329);
17 DescPose p3Desc(-99.813, 766.661, 241.878, -176.817, 1.917, -91.604);
18 JointPos p3Joint(-107.266, -56.116, 85.971, -122.560, -92.548, 74.331);
19 ExaxisPos exaxisPos(0, 0, 0, 0);
20 DescPose offdese(0, 0, 0, 0, 0, 0);
21 DescPose posTCP[3] = { p1Desc , p2Desc , p3Desc };
22 DescPose coordRtn = {};
23 robot.MoveJ(&p1Joint, &p1Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
24 robot.SetExTCPPoint(1);
25 robot.MoveJ(&p2Joint, &p2Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
26 robot.SetExTCPPoint(2);
27 robot.MoveJ(&p3Joint, &p3Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
28 robot.SetExTCPPoint(3);
29 rtn = robot.ComputeExTCF(&coordRtn);
30 printf("ComputeExTCF %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
31 robot.SetExToolCoord(1, &coordRtn, &offdese);
32 robot.SetExToolList(1, &coordRtn, &offdese);
33 robot.CloseRPC();
34 return 0;
35}
6.15. Definir Ponto de Referência da Peça - Método dos Três Pontos
1/**
2 * @brief Define o ponto de referência da peça - método dos três pontos
3 * @param [in] point_num Número do ponto, intervalo [1~3]
4 * @return Código de erro
5 */
6errno_t SetWObjCoordPoint(int point_num);
6.16. Calcular Sistema de Coordenadas da Peça
Alterado na versão C++SDK-v2.1.5.0.
1/**
2 * @brief Calcula o sistema de coordenadas da peça
3 * @param [in] method Método de cálculo 0: origem-eixo x-eixo z 1: origem-eixo x-plano xy
4 * @param [in] refFrame Sistema de coordenadas de referência
5 * @param [out] wobj_pose Sistema de coordenadas da peça
6 * @return Código de erro
7 */
8errno_t ComputeWObjCoord(int method, int refFrame, DescPose *wobj_pose);
6.17. Definir Sistema de Coordenadas da Peça
Alterado na versão C++SDK-v2.1.5.0.
1/**
2 * @brief Define o sistema de coordenadas da peça
3 * @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4 * @param [in] coord Pose do sistema de coordenadas da peça em relação ao centro do flange da extremidade
5 * @param [in] refFrame Sistema de coordenadas de referência
6 * @return Código de erro
7 */
8errno_t SetWObjCoord(int id, DescPose *coord, int refFrame);
6.18. Definir Lista de Sistemas de Coordenadas da Peça
Alterado na versão C++SDK-v2.1.5.0.
1/**
2 * @brief Define a lista de sistemas de coordenadas da peça
3 * @param [in] id Número do sistema de coordenadas, intervalo [0~14]
4 * @param [in] coord Pose do sistema de coordenadas da peça em relação ao centro do flange da extremidade
5 * @param [in] refFrame Sistema de coordenadas de referência
6 * @return Código de erro
7 */
8errno_t SetWObjList(int id, DescPose *coord, int refFrame);
6.19. Calcular Sistema de Coordenadas da Peça com Base em Informações de Pontos
Novo na versão C++SDK-v2.1.8-3.7.8.
1/**
2 * @brief Calcula o sistema de coordenadas da peça com base em informações de pontos
3 * @param [in] method Método de cálculo; 0: origem-eixo x-eixo z 1: origem-eixo x-plano xy
4 * @param [in] pos Grupo de três posições TCP
5 * @param [in] refFrame Sistema de coordenadas de referência
6 * @param [out] coord Resultado do sistema de coordenadas da ferramenta
7 * @return Código de erro
8*/
9errno_t ComputeWObjCoordWithPoints(int method, DescPose pos[], int refFrame, DescPose& coord);
6.20. Obter Sistema de Coordenadas da Peça Atual
1/**
2* @brief Obtém o sistema de coordenadas da peça atual
3* @param [in] flag 0-bloqueante, 1-não bloqueante
4* @param [out] desc_pos Pose do sistema de coordenadas da peça
5* @return Código de erro
6*/
7errno_t GetWObjOffset(uint8_t flag, DescPose *desc_pos);
6.21. Exemplo de Código para Operações do Sistema de Coordenadas da Peça do Robô
1 int TestWobjCoord(void)
2 {
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 DescPose p1Desc(-89.606, 779.517, 193.516, 178.000, 0.476, -92.484);
14 JointPos p1Joint(-108.145, -50.137, 85.818, -125.599, -87.946, 74.329);
15 DescPose p2Desc(-24.656, 850.384, 191.361, 177.079, -2.058, -95.355);
16 JointPos p2Joint(-111.024, -41.538, 69.222, -114.913, -87.743, 74.329);
17 DescPose p3Desc(-99.813, 766.661, 241.878, -176.817, 1.917, -91.604);
18 JointPos p3Joint(-107.266, -56.116, 85.971, -122.560, -92.548, 74.331);
19 ExaxisPos exaxisPos(0, 0, 0, 0);
20 DescPose offdese(0, 0, 0, 0, 0, 0);
21 DescPose posTCP[3] = { p1Desc , p2Desc , p3Desc };
22 DescPose coordRtn = {};
23 rtn = robot.ComputeWObjCoordWithPoints(1, posTCP, 0, coordRtn);
24 printf("ComputeWObjCoordWithPoints %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
25 robot.MoveJ(&p1Joint, &p1Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
26 robot.SetWObjCoordPoint(1);
27 robot.MoveJ(&p2Joint, &p2Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
28 robot.SetWObjCoordPoint(2);
29 robot.MoveJ(&p3Joint, &p3Desc, 1, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
30 robot.SetWObjCoordPoint(3);
31 rtn = robot.ComputeWObjCoord(1, 0, &coordRtn);
32 printf("ComputeWObjCoord %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
33 robot.SetWObjCoord(1, &coordRtn, 0);
34 robot.SetWObjList(1, &coordRtn, 0);
35 DescPose getWobjDesc = {};
36 rtn = robot.GetWObjOffset(0, &getWobjDesc);
37 printf("GetWObjOffset %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
38 robot.CloseRPC();
39 return 0;
40 }
6.22. Definir Velocidade Global
1/**
2* @brief Define a velocidade global
3* @param [in] vel Percentagem de velocidade, intervalo [0~100]
4* @return Código de erro
5*/
6errno_t SetSpeed(int vel);
6.23. Definir Aceleração do Robô
1/**
2 * @brief Define a aceleração do robô
3 * @param [in] acc Percentagem de aceleração do robô
4 * @return Código de erro
5 */
6errno_t SetOaccScale(double acc);
6.24. Obter Velocidade Padrão do Robô
1/**
2* @brief Obtém a velocidade padrão do robô
3* @param [out] vel Velocidade, em mm/s
4* @return Código de erro
5*/
6errno_t GetDefaultTransVel(float *vel);
6.25. Definir Peso da Carga na Extremidade
Alterado na versão C++SDK-v2.1.8-3.7.8.
1/**
2 * @brief Define o peso da carga na extremidade
3 * @param [in] loadNum Número da carga
4 * @param [in] weight Peso da carga, em kg
5 * @return Código de erro
6*/
7errno_t SetLoadWeight(int loadNum = 0, float weight);
6.26. Definir Coordenadas do Centro de Massa da Carga na Extremidade
Novo na versão C++SDK-v3.8.6.
1/**
2* @brief Define as coordenadas do centro de massa da carga na extremidade
3* @param [in] loadNum Número da carga
4* @param [in] coord Coordenadas do centro de massa, em mm
5* @return Código de erro
6*/
7errno_t SetLoadCoord(int loadNum, DescTran* coord);
6.27. Obter Peso da Carga Atual
1/**
2* @brief Obtém o peso da carga atual
3* @param [in] flag 0-bloqueante, 1-não bloqueante
4* @param [out] weight Peso da carga, em kg
5* @return Código de erro
6*/
7errno_t GetTargetPayload(uint8_t flag, float *weight);
6.28. Obter Centro de Massa da Carga Atual
1/**
2* @brief Obtém o centro de massa da carga atual
3* @param [in] flag 0-bloqueante, 1-não bloqueante
4* @param [out] cog Centro de massa da carga, em mm
5* @return Código de erro
6*/
7errno_t GetTargetPayloadCog(uint8_t flag, DescTran *cog);
6.29. Definir Modo de Instalação do Robô
1/**
2* @brief Define o modo de instalação do robô
3* @param [in] install Modo de instalação, 0-montagem normal, 1-montagem lateral, 2-montagem invertida
4* @return Código de erro
5*/
6errno_t SetRobotInstallPos(uint8_t install);
6.30. Definir Ângulo de Instalação do Robô
1/**
2* @brief Define o ângulo de instalação do robô, instalação livre
3* @param [in] yangle Ângulo de inclinação
4* @param [in] zangle Ângulo de rotação
5* @return Código de erro
6*/
7errno_t SetRobotInstallAngle(double yangle, double zangle);
6.31. Obter Ângulo de Instalação do Robô
1/**
2* @brief Obtém o ângulo de instalação do robô
3* @param [out] yangle Ângulo de inclinação
4* @param [out] zangle Ângulo de rotação
5* @return Código de erro
6*/
7errno_t GetRobotInstallAngle(float *yangle, float *zangle);
6.32. Definir Valor de Variável do Sistema
1/**
2* @brief Define o valor da variável do sistema
3* @param [in] id Número da variável, intervalo [1~20]
4* @param [in] value Valor da variável
5* @return Código de erro
6*/
7errno_t SetSysVarValue(int id, float value);
6.33. Obter Valor de Variável do Sistema
1/**
2* @brief Obtém o valor da variável do sistema
3* @param [in] id Número da variável do sistema, intervalo [1~20]
4* @param [out] value Valor da variável do sistema
5* @return Código de erro
6*/
7errno_t GetSysVarValue(int id, float *value);
6.34. Exemplo de Código para Configurações Comuns do Robô
1 int TestLoadInstall(void)
2 {
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 for (int i = 1; i < 100; i++)
14 {
15 robot.SetSpeed(i);
16 robot.SetOaccScale(i);
17 robot.Sleep(30);
18 }
19 float defaultVel = 0.0;
20 robot.GetDefaultTransVel(&defaultVel);
21 printf("GetDefaultTransVel is %f\n", defaultVel);
22 for (int i = 1; i < 21; i++)
23 {
24 robot.SetSysVarValue(i, i + 0.5);
25 robot.Sleep(100);
26 }
27 for (int i = 1; i < 21; i++)
28 {
29 float value = 0;
30 robot.GetSysVarValue(i, &value);
31 printf("sys value %d is :%f\n", i, value);
32 robot.Sleep(100);
33 }
34 robot.SetLoadWeight(0, 2.5);
35 DescTran loadCoord = {};
36 loadCoord.x = 3.0;
37 loadCoord.y = 4.0;
38 loadCoord.z = 5.0;
39 robot.SetLoadCoord(&loadCoord);
40 robot.Sleep(1000);
41 float getLoad = 0.0;
42 robot.GetTargetPayload(0, &getLoad);
43 DescTran getLoadTran = {};
44 robot.GetTargetPayloadCog(0, &getLoadTran);
45 printf("get load is %f; get load cog is %f %f %f\n", getLoad, getLoadTran.x, getLoadTran.y, getLoadTran.z);
46 robot.SetRobotInstallPos(0);
47 robot.SetRobotInstallAngle(15.0, 25.0);
48 float anglex = 0.0;
49 float angley = 0.0;
50 robot.GetRobotInstallAngle(&anglex, &angley);
51 printf("GetRobotInstallAngle x: %f; y: %f\n", anglex, angley);
52 robot.CloseRPC();
53 return 0;
54 }
6.35. Chave de Compensação de Atrito das Juntas
1/**
2* @brief Chave de compensação de atrito das juntas
3* @param [in] state 0-desligar, 1-ligar
4* @return Código de erro
5*/
6errno_t FrictionCompensationOnOff(uint8_t state);
6.36. Definir Coeficiente de Compensação de Atrito das Juntas - Montagem Normal
1/**
2* @brief Define o coeficiente de compensação de atrito das juntas - montagem normal
3* @param [in] coeff Coeficientes de compensação das seis juntas, intervalo [0~1]
4* @return Código de erro
5*/
6errno_t SetFrictionValue_level(float coeff[6]);
6.37. Definir Coeficiente de Compensação de Atrito das Juntas - Montagem Lateral
1/**
2* @brief Define o coeficiente de compensação de atrito das juntas - montagem lateral
3* @param [in] coeff Coeficientes de compensação das seis juntas, intervalo [0~1]
4* @return Código de erro
5*/
6errno_t SetFrictionValue_wall(float coeff[6]);
6.38. Definir Coeficiente de Compensação de Atrito das Juntas - Montagem Invertida
1/**
2* @brief Define o coeficiente de compensação de atrito das juntas - montagem invertida
3* @param [in] coeff Coeficientes de compensação das seis juntas, intervalo [0~1]
4* @return Código de erro
5*/
6errno_t SetFrictionValue_ceiling(float coeff[6]);
6.39. Definir Coeficiente de Compensação de Atrito das Juntas - Instalação Livre
1/**
2* @brief Define o coeficiente de compensação de atrito das juntas - instalação livre
3* @param [in] coeff Coeficientes de compensação das seis juntas, intervalo [0~1]
4* @return Código de erro
5*/
6errno_t SetFrictionValue_freedom(float coeff[6]);
6.40. Exemplo de Código para Configuração de Compensação de Atrito das Juntas do Robô
1int TestFriction(void)
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5
6 robot.LoggerInit();
7 robot.SetLoggerLevel(1);
8 int rtn = robot.RPC("192.168.58.2");
9 if (rtn != 0)
10 {
11 return -1;
12 }
13 robot.SetReConnectParam(true, 30000, 500);
14 float lcoeff[6] = { 0.9,0.9,0.9,0.9,0.9,0.9 };
15 float wcoeff[6] = { 0.4,0.4,0.4,0.4,0.4,0.4 };
16 float ccoeff[6] = { 0.6,0.6,0.6,0.6,0.6,0.6 };
17 float fcoeff[6] = { 0.5,0.5,0.5,0.5,0.5,0.5 };
18 rtn = robot.FrictionCompensationOnOff(1);
19 printf("FrictionCompensationOnOff rtn is %d\n", rtn);
20 rtn = robot.SetFrictionValue_level(lcoeff);
21 printf("SetFrictionValue_level rtn is %d\n", rtn);
22 rtn = robot.SetFrictionValue_wall(wcoeff);
23 printf("SetFrictionValue_wall rtn is %d\n", rtn);
24 rtn = robot.SetFrictionValue_ceiling(ccoeff);
25 printf("SetFrictionValue_ceiling rtn is %d\n", rtn);
26 rtn = robot.SetFrictionValue_freedom(fcoeff);
27 printf("SetFrictionValue_freedom rtn is %d\n", rtn);
28 robot.CloseRPC();
29 return 0;
30}
6.41. Consultar Código de Erro do Robô
1/**
2 * @brief Consulta o código de erro do robô
3 * @param [out] maincode Código de erro principal
4 * @param [out] subcode Código de erro secundário
5 * @return Código de erro
6 */
7errno_t GetRobotErrorCode(int *maincode, int *subcode);
6.42. Limpar Estado de Erro
1/**
2* @brief Limpa o estado de erro
3* @return Código de erro
4*/
5errno_t ResetAllError();
6.43. Exemplo de Código para Obter Estado de Falha e Limpar Erro do Robô
1int TestGetError(void)
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 int maincode, subcode;
14 robot.GetRobotErrorCode(&maincode, &subcode);
15 printf("robot maincode is %d; subcode is %d\n", maincode, subcode);
16 robot.ResetAllError();
17 robot.Sleep(1000);
18 robot.GetRobotErrorCode(&maincode, &subcode);
19 printf("robot maincode is %d; subcode is %d\n", maincode, subcode);
20 robot.CloseRPC();
21 return 0;
22}
6.44. Definir Parâmetros de Monitoramento de Temperatura e Corrente da Ventoinha da Caixa de Controle de Larga Tensão
1/**
2* @brief Define os parâmetros de monitoramento de temperatura e corrente da ventoinha da caixa de controle de larga tensão
3* @param [in] enable 0-desativar monitoramento; 1-ativar monitoramento
4* @param [in] period Período de monitoramento (s), intervalo 1-100
5* @return Código de erro
6*/
7errno_t SetWideBoxTempFanMonitorParam(int enable, int period);
6.45. Obter Parâmetros de Monitoramento de Temperatura e Corrente da Ventoinha da Caixa de Controle de Larga Tensão
1/**
2* @brief Obtém os parâmetros de monitoramento de temperatura e corrente da ventoinha da caixa de controle de larga tensão
3* @param [out] enable 0-desativar monitoramento; 1-ativar monitoramento
4* @param [out] period Período de monitoramento (s), intervalo 1-100
5* @return Código de erro
6*/
7errno_t GetWideBoxTempFanMonitorParam(int &enable, int &period);
6.46. Exemplo de Código para Obter Estado de Temperatura e Corrente da Ventoinha da Caixa de Controle de Larga Tensão
1 int TestWideVoltageCtrlBoxtemp(void)
2 {
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 printf("robot rpc rtn is %d\n", rtn);
9 if (rtn != 0)
10 {
11 return -1;
12 }
13 robot.SetReConnectParam(true, 30000, 500);
14 robot.SetWideBoxTempFanMonitorParam(1, 2);
15 int enable = 0;
16 int period = 0;
17 robot.GetWideBoxTempFanMonitorParam(enable, period);
18 printf("GetWideBoxTempFanMonitorParam enable is %d period is %d\n", enable, period);
19 for (int i = 0; i < 100; i++)
20 {
21 robot.GetRobotRealTimeState(&pkg);
22 printf("robot ctrl box temp is %f, fan current is %d\n", pkg.wideVoltageCtrlBoxTemp, pkg.wideVoltageCtrlBoxFanCurrent);
23 robot.Sleep(100);
24 }
25 rtn = robot.SetWideBoxTempFanMonitorParam(0, 2);
26 printf("SetWideBoxTempFanMonitorParam rtn is %d\n", rtn);
27 enable = 0;
28 period = 0;
29 robot.GetWideBoxTempFanMonitorParam(enable, period);
30 printf("GetWideBoxTempFanMonitorParam enable is %d period is %d\n", enable, period);
31 for (int i = 0; i < 100; i++)
32 {
33 robot.GetRobotRealTimeState(&pkg);
34 printf("robot ctrl box temp is %f, fan current is %d\n", pkg.wideVoltageCtrlBoxTemp, pkg.wideVoltageCtrlBoxFanCurrent);
35 robot.Sleep(100);
36 }
37 robot.CloseRPC();
38 robot.Sleep(2000);
39 return 0;
40 }
6.47. Calcular Resultado da Calibração do Foco
1/**
2* @brief Calcula o resultado da calibração do foco
3* @param [in] pointNum Número de pontos de calibração
4* @param [out] resultPos Resultado da calibração XYZ
5* @param [out] accuracy Erro de precisão da calibração
6* @return Código de erro
7*/
8errno_t ComputeFocusCalib(int pointNum, DescTran& resultPos, float& accuracy);
6.48. Definir Coordenadas do Foco
1/**
2* @brief Define as coordenadas do foco
3* @param [in] pos Coordenadas do foco XYZ
4* @return Código de erro
5*/
6errno_t SetFocusPosition(DescTran pos);
6.49. Iniciar Rastreamento do Foco
1/**
2* @brief Inicia o rastreamento do foco
3* @param [in] kp Parâmetro proporcional, padrão 50.0
4* @param [in] kpredict Parâmetro feedforward, padrão 19.0
5* @param [in] aMax Limite máximo de aceleração angular, padrão 1440°/s^2
6* @param [in] vMax Limite máximo de velocidade angular, padrão 180°/s
7* @param [in] type Travar a direção do eixo X (0-vetor de entrada de referência; 1-horizontal; 2-vertical)
8* @return Código de erro
9*/
10errno_t FocusStart(double kp, double kpredict, double aMax, double vMax, int type);
6.50. Parar Rastreamento do Foco
1/**
2* @brief Para o rastreamento do foco
3* @return Código de erro
4*/
5errno_t FocusEnd();
6.51. Exemplo de Código de Rastreamento do Foco do Robô
1int TestFocus()
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return -1;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 DescPose p1Desc(186.331, 487.913, 209.850, 149.030, 0.688, -114.347);
14 JointPos p1Joint(-127.876, -75.341, 115.417, -122.741, -59.820, 74.300);
15 DescPose p2Desc(69.721, 535.073, 202.882, -144.406, -14.775, -89.012);
16 JointPos p2Joint(-101.780, -69.828, 110.917, -125.740, -127.841, 74.300);
17 DescPose p3Desc(146.861, 578.426, 205.598, 175.997, -36.178, -93.437);
18 JointPos p3Joint(-112.851, -60.191, 86.566, -80.676, -97.463, 74.300);
19 DescPose p4Desc(136.284, 509.876, 225.613, 178.987, 1.372, -100.696);
20 JointPos p4Joint(-116.397, -76.281, 113.845, -128.611, -88.654, 74.299);
21 DescPose p5Desc(138.395, 505.972, 298.016, 179.134, 2.147, -101.110);
22 JointPos p5Joint(-116.814, -82.333, 109.162, -118.662, -88.585, 74.302);
23 DescPose p6Desc(105.553, 454.325, 232.017, -179.426, 0.444, -99.952);
24 JointPos p6Joint(-115.649, -84.367, 122.447, -128.663, -90.432, 74.303);
25 ExaxisPos exaxisPos(0, 0, 0, 0);
26 DescPose offdese(0, 0, 100, 0, 0, 0);
27 robot.MoveJ(&p1Joint, &p1Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
28 robot.SetTcp4RefPoint(1);
29 robot.MoveJ(&p2Joint, &p2Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
30 robot.SetTcp4RefPoint(2);
31 robot.MoveJ(&p3Joint, &p3Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
32 robot.SetTcp4RefPoint(3);
33 robot.MoveJ(&p4Joint, &p4Desc, 0, 0, 100, 100, 100, &exaxisPos, -1, 0, &offdese);
34 robot.SetTcp4RefPoint(4);
35 DescPose coordRtn = {};
36 rtn = robot.ComputeTcp4(&coordRtn);
37 printf("4 Point ComputeTool %d coord is %f %f %f %f %f %f \n", rtn, coordRtn.tran.x, coordRtn.tran.y, coordRtn.tran.z, coordRtn.rpy.rx, coordRtn.rpy.ry, coordRtn.rpy.rz);
38 robot.SetToolCoord(1, &coordRtn, 0, 0, 1, 0);
39 robot.GetForwardKin(&p1Joint, &p1Desc);
40 robot.GetForwardKin(&p2Joint, &p2Desc);
41 robot.GetForwardKin(&p3Joint, &p3Desc);
42 robot.SetFocusCalibPoint(1, p1Desc);
43 robot.SetFocusCalibPoint(2, p2Desc);
44 robot.SetFocusCalibPoint(3, p3Desc);
45 DescTran resultPos = {};
46 float accuracy = 0.0;
47 rtn = robot.ComputeFocusCalib(3, resultPos, accuracy);
48 printf("ComputeFocusCalib coord is %d %f %f %f accuracy is %f\n", rtn, resultPos.x, resultPos.y, resultPos.z, accuracy);
49 rtn = robot.SetFocusPosition(resultPos);
50 robot.GetForwardKin(&p5Joint, &p5Desc);
51 robot.GetForwardKin(&p6Joint, &p6Desc);
52 robot.MoveL(&p5Joint, &p5Desc, 1, 0, 10, 100, 100, -1, 0, &exaxisPos, 0, 1, &offdese);
53 robot.MoveL(&p6Joint, &p6Desc, 1, 0, 10, 100, 100, -1, 0, &exaxisPos, 0, 1, &offdese);
54 robot.FocusStart(50, 19, 710, 90, 0);
55 robot.MoveL(&p5Joint, &p5Desc, 1, 0, 10, 100, 100, -1, 0, &exaxisPos, 0, 1, &offdese);
56 robot.MoveL(&p6Joint, &p6Desc, 1, 0, 10, 100, 100, -1, 0, &exaxisPos, 0, 1, &offdese);
57 robot.FocusEnd();
58 robot.CloseRPC();
59 return 0;
60}
6.52. Ativar Função de Calibração de Sensibilidade do Sensor de Torque das Juntas
1/**
2* @brief Ativa a função de calibração de sensibilidade do sensor de torque das juntas
3* @param [in] status 0-desativar; 1-ativar
4* @return Código de erro
5*/
6errno_t JointSensitivityEnable(int status);
6.53. Coleta de Dados de Sensibilidade do Sensor de Torque das Juntas
1/**
2* @brief Coleta de dados de sensibilidade do sensor de torque das juntas
3* @return Código de erro
4*/
5errno_t JointSensitivityCollect();
6.54. Obter Resultado da Calibração de Sensibilidade do Sensor de Torque das Juntas
1/**
2* @brief Obtém o resultado da calibração de sensibilidade do sensor de torque das juntas
3* @param [out] calibResult Sensibilidade das juntas j1~j6 [0-1]
4* @param [out] linearityn Linearidade das juntas j1~j6 [0-1]
5* @return Código de erro
6*/
7errno_t JointSensitivityCalibration(double calibResult[6], double linearity[6]);
6.55. Obter Erro de Histerese do Sensor de Torque das Juntas
1/**
2* @brief Obtém o erro de histerese do sensor de torque das juntas
3* @param [out] hysteresisError Erro de histerese das juntas j1~j6
4* @return Código de erro
5*/
6errno_t JointHysteresisError(double hysteresisError[6]);
6.56. Obter Repetibilidade do Sensor de Torque das Juntas
1/**
2* @brief Obtém a repetibilidade do sensor de torque das juntas
3* @param [out] repeatability Repetibilidade do sensor de torque das juntas j1~j6
4* @return Código de erro
5*/
6errno_t JointRepeatability(double repeatability[6]);
6.57. Definir Parâmetros do Sensor de Força das Juntas
1/**
2* @brief Define os parâmetros do sensor de força das juntas
3* @param [in] M Coeficiente de massa J1-J6 [0.001 ~ 10]
4* @param [in] B Coeficiente de amortecimento J1-J6 [0.001 ~ 10]
5* @param [in] K Coeficiente de rigidez J1-J6 [0.001 ~ 10]
6* @param [in] threshold Limiar de controle de força, Nm
7* @param [in] sensitivity Sensibilidade, Nm/V, [0 ~ 10]
8* @param [in] setZeroFlag Flag de ativação da função; 0-desativar; 1-ativar; 2-registrar ponto zero na posição 1; 3-registrar ponto zero na posição 2
9* @return Código de erro
10*/
11errno_t SetAdmittanceParams(double M[6], double B[6], double K[6], double threshold[6], double sensitivity[6], int setZeroFlag);
6.58. Exemplo de Código para Calibração Automática de Sensibilidade do Sensor de Torque das Juntas
1int TestSensitivityCalib()
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 robot.SetReConnectParam(true, 30000, 500);
8 int rtn = robot.RPC("192.168.58.2");
9 if (rtn != 0)
10 {
11 return 0;
12 }
13 rtn = robot.JointSensitivityEnable(0);
14 rtn = robot.JointSensitivityEnable(1);
15 printf("JointSensitivityEnable rtn is %d\n", rtn);
16 JointPos curJPos = {};
17 robot.GetActualJointPosDegree(0, &curJPos);
18 ExaxisPos epos = { 0,0,0,0 };
19 DescPose offset_pos = { 0,0,0,0,0,0 };
20 JointPos jointPos1 = { curJPos.jPos[0], 0, 0, -90, 0.02, curJPos.jPos[5] };
21 DescPose descPos1 = {};
22 robot.GetForwardKin(&jointPos1, &descPos1);
23 robot.MoveJ(&jointPos1, &descPos1, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
24 robot.Sleep(200);
25 rtn = robot.JointSensitivityCollect();
26 printf("JointSensitivityCollect 1 rtn is %d\n", rtn);
27 robot.Sleep(100);
28 JointPos jointPos2 = { curJPos.jPos[0], -30, 0, -90, 0.02, curJPos.jPos[5] };
29 DescPose descPos2 = {};
30 robot.GetForwardKin(&jointPos2, &descPos2);
31 robot.MoveJ(&jointPos2, &descPos2, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
32 robot.Sleep(100);
33 rtn = robot.JointSensitivityCollect();
34 printf("JointSensitivityCollect 2 rtn is %d\n", rtn);
35 robot.Sleep(100);
36 JointPos jointPos3 = { curJPos.jPos[0], -60, 0, -90, 0.02, curJPos.jPos[5] };
37 DescPose descPos3 = {};
38 robot.GetForwardKin(&jointPos3, &descPos3);
39 robot.MoveJ(&jointPos3, &descPos3, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
40 robot.Sleep(100);
41 rtn = robot.JointSensitivityCollect();
42 printf("JointSensitivityCollect 3 rtn is %d\n", rtn);
43 robot.Sleep(100);
44 JointPos jointPos4 = { curJPos.jPos[0], -90, 0, -90, 0.02, curJPos.jPos[5] };
45 DescPose descPos4 = {};
46 robot.GetForwardKin(&jointPos4, &descPos4);
47 robot.MoveJ(&jointPos4, &descPos4, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
48 robot.Sleep(100);
49 rtn = robot.JointSensitivityCollect();
50 printf("JointSensitivityCollect 4 rtn is %d\n", rtn);
51 robot.Sleep(100);
52 JointPos jointPos5 = { curJPos.jPos[0], -120, 0, -90, 0.02, curJPos.jPos[5] };
53 DescPose descPos5 = {};
54 robot.GetForwardKin(&jointPos5, &descPos5);
55 robot.MoveJ(&jointPos5, &descPos5, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
56 robot.Sleep(100);
57 rtn = robot.JointSensitivityCollect();
58 printf("JointSensitivityCollect 5 rtn is %d\n", rtn);
59 robot.Sleep(100);
60 JointPos jointPos6 = { curJPos.jPos[0], -150, 0, -90, 0.02, curJPos.jPos[5] };
61 DescPose descPos6 = {};
62 robot.GetForwardKin(&jointPos6, &descPos6);
63 robot.MoveJ(&jointPos6, &descPos6, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
64 robot.Sleep(100);
65 rtn = robot.JointSensitivityCollect();
66 printf("JointSensitivityCollect 6 rtn is %d\n", rtn);
67 robot.Sleep(100);
68 JointPos jointPos7 = { curJPos.jPos[0], -180, 0, -90, 0.02, curJPos.jPos[5] };
69 DescPose descPos7 = {};
70 robot.GetForwardKin(&jointPos7, &descPos7);
71 robot.MoveJ(&jointPos7, &descPos7, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
72 robot.Sleep(100);
73 rtn = robot.JointSensitivityCollect();
74 printf("JointSensitivityCollect 7 rtn is %d\n", rtn);
75 robot.Sleep(100);
76 //-------------------
77 robot.MoveJ(&jointPos6, &descPos6, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
78 robot.Sleep(100);
79 rtn = robot.JointSensitivityCollect();
80 printf("JointSensitivityCollect 8 rtn is %d\n", rtn);
81 robot.Sleep(100);
82 robot.MoveJ(&jointPos5, &descPos5, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
83 robot.Sleep(100);
84 rtn = robot.JointSensitivityCollect();
85 printf("JointSensitivityCollect 9 rtn is %d\n", rtn);
86 robot.Sleep(100);
87 robot.MoveJ(&jointPos4, &descPos4, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
88 robot.Sleep(100);
89 rtn = robot.JointSensitivityCollect();
90 printf("JointSensitivityCollect 10 rtn is %d\n", rtn);
91 robot.Sleep(100);
92 robot.MoveJ(&jointPos3, &descPos3, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
93 robot.Sleep(100);
94 rtn = robot.JointSensitivityCollect();
95 printf("JointSensitivityCollect 11 rtn is %d\n", rtn);
96 robot.Sleep(100);
97 robot.MoveJ(&jointPos2, &descPos2, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
98 robot.Sleep(100);
99 rtn = robot.JointSensitivityCollect();
100 printf("JointSensitivityCollect 12 rtn is %d\n", rtn);
101 robot.Sleep(100);
102 robot.MoveJ(&jointPos1, &descPos1, 0, 0, 100, 100, 100, &epos, -1, 0, &offset_pos);
103 robot.Sleep(200);
104 rtn = robot.JointSensitivityCollect();
105 printf("JointSensitivityCollect 13 rtn is %d\n", rtn);
106 robot.Sleep(100);
107 double calibResult[6] = { 0.0 };
108 double linearity[6] = { 0.0 };
109 rtn = robot.JointSensitivityCalibration(calibResult, linearity);
110 printf("JointSensitivityCalibration rtn is %d\n", rtn);
111 rtn = robot.JointSensitivityEnable(0);
112 printf("JointSensitivityEnable rtn is %d\n", rtn);
113 printf("jointSensor Calib result is %f %f %f %f %f %f\njointSensor linearity is %f %f %f %f %f %f\n",
114 calibResult[0], calibResult[1], calibResult[2],
115 calibResult[3], calibResult[4], calibResult[5],
116 linearity[0], linearity[1], linearity[2],
117 linearity[3], linearity[4], linearity[5]);
118 double hysteresisError[6] = { 0.0 };
119 rtn = robot.JointHysteresisError(hysteresisError);
120 printf("JointHysteresisError result is %f %f %f %f %f %f\n",
121 hysteresisError[0], hysteresisError[1], hysteresisError[2],
122 hysteresisError[3], hysteresisError[4], hysteresisError[5]);
123 double repeatability[6] = { 0.0 };
124 rtn = robot.JointRepeatability(repeatability);
125 printf("JointRepeatability result is %f %f %f %f %f %f\n",
126 repeatability[0], repeatability[1], repeatability[2],
127 repeatability[3], repeatability[4], repeatability[5]);
128 double M[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
129 double B[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
130 double K[6] = { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 };
131 double threshold[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
132 int setZeroFlag = 1;
133 rtn = robot.SetAdmittanceParams(M, B, K, threshold, calibResult, setZeroFlag);
134 printf("SetAdmittanceParams rtn is %d\n", rtn);
135 robot.CloseRPC();
136}
6.59. Obter Número de Quadros com Erro nas 8 Portas Escravas do Robô
1/**
2* @brief Obtém o número de quadros com erro nas 8 portas escravas do robô
3* @param [out] inRecvErr Número de quadros com erro de receção de entrada
4* @param [out] inCRCErr Número de quadros com erro CRC de entrada
5* @param [out] inTransmitErr Número de quadros com erro de transmissão de entrada
6* @param [out] inLinkErr Número de quadros com erro de ligação de entrada
7* @param [out] outRecvErr Número de quadros com erro de receção de saída
8* @param [out] outCRCErr Número de quadros com erro CRC de saída
9* @param [out] outTransmitErr Número de quadros com erro de transmissão de saída
10* @param [out] outLinkErr Número de quadros com erro de ligação de saída
11* @return Código de erro
12*/
13errno_t GetSlavePortErrCounter(int inRecvErr[8], int inCRCErr[8], int inTransmitErr[8], int inLinkErr[8], int outRecvErr[8], int outCRCErr[8], int outTransmitErr[8], int outLinkErr[8]);
6.60. Limpar Quadros com Erro nas Portas Escravas
1/**
2* @brief Limpa os quadros com erro nas portas escravas
3* @param [in] slaveID ID da escrava 0~7
4* @return Código de erro
5*/
6errno_t SlavePortErrCounterClear(int slaveID);
6.61. Exemplo de Código para Obter Quadros com Erro nas Portas Escravas
1int TestSlavePortErr()
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return 0;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 int inRecvErr[8] = {0.0};
14 int inCRCErr[8] = { 0.0 };
15 int inTransmitErr[8] = { 0.0 };
16 int inLinkErr[8] = { 0.0 };
17 int outRecvErr[8] = { 0.0 };
18 int outCRCErr[8] = { 0.0 };
19 int outTransmitErr[8] = { 0.0 };
20 int outLinkErr[8] = { 0.0 };
21 robot.GetSlavePortErrCounter(inRecvErr, inCRCErr, inTransmitErr, inLinkErr,
22 outRecvErr, outCRCErr, outTransmitErr, outLinkErr);
23 for (int i = 0; i < 8; i++)
24 {
25 if (inRecvErr[i] != 0)
26 {
27 printf("inRecvErr %d is %d\n", i, inRecvErr[i]);
28 }
29 if (inCRCErr[i] != 0)
30 {
31 printf("inRecvErr %d is %d\n", i, inCRCErr[i]);
32 }
33 if (inTransmitErr[i] != 0)
34 {
35 printf("inRecvErr %d is %d\n", i, inTransmitErr[i]);
36 }
37 if (inLinkErr[i] != 0)
38 {
39 printf("inRecvErr %d is %d\n", i, inLinkErr[i]);
40 }
41 if (outRecvErr[i] != 0)
42 {
43 printf("outRecvErr %d is %d\n", i, outRecvErr[i]);
44 }
45 if (outCRCErr[i] != 0)
46 {
47 printf("outCRCErr %d is %d\n", i, outCRCErr[i]);
48 }
49 if (outTransmitErr[i] != 0)
50 {
51 printf("outTransmitErr %d is %d\n", i, outTransmitErr[i]);
52 }
53 if (outLinkErr[i] != 0)
54 {
55 printf("outLinkErr %d is %d\n", i, outLinkErr[i]);
56 }
57 }
58 printf("others has no err!\n");
59 for (int i = 0; i < 8; i++)
60 {
61 robot.SlavePortErrCounterClear(i);
62 }
63 robot.CloseRPC();
64 return 0;
65}
6.62. Definir Coeficiente de Feedforward de Velocidade por Eixo
1/**
2* @brief Define o coeficiente de feedforward de velocidade por eixo
3* @param [in] radio Coeficiente de feedforward de velocidade por eixo
4* @return Código de erro
5*/
6errno_t SetVelFeedForwardRatio(double radio[6]);
6.63. Obter Coeficiente de Feedforward de Velocidade por Eixo
1/**
2* @brief Obtém o coeficiente de feedforward de velocidade por eixo
3* @param [out] radio Coeficiente de feedforward de velocidade por eixo
4* @return Código de erro
5*/
6errno_t GetVelFeedForwardRatio(double radio[6]);
6.64. Exemplo de Código do Coeficiente de Feedforward de Velocidade do Robô
1int TestVelFeedForwardRatio()
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return 0;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 double setRadio[6] = { 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 };
14 robot.SetVelFeedForwardRatio(setRadio);
15 double getRadio[6] = { 0.0 };
16 robot.GetVelFeedForwardRatio(getRadio);
17 printf(" %f %f %f %f %f %f\n", getRadio[0], getRadio[1], getRadio[2], getRadio[3], getRadio[4], getRadio[5]);
18 robot.CloseRPC();
19 return 0;
20}
6.65. Calibração TCP do Sensor Fotoelétrico - Calcular RPY da Ferramenta
1/**
2* @brief Calibração TCP do sensor fotoelétrico - calcular RPY da ferramenta
3* @param [in] Btool Posição cartesiana do robô
4* @param [in] Etool Valor atual do sistema de coordenadas da ferramenta
5* @param [in] senser Valor atual do sistema de coordenadas do sensor (não disponível no momento)
6* @param [in] radius Raio do movimento circular mm (não disponível no momento)
7* @param [in] dz Distância de movimento na direção negativa do eixo z do sistema de coordenadas base; quando dz = 10000, a função retorna diretamente o RPY da ferramenta
8* @param [out] TCPRPY Valor RPY da ferramenta
9* @return Código de erro
10*/
11errno_t TCPComputeRPY(DescPose Btool, DescPose Etool, DescPose sensor, double radius, double dz, Rpy& TCPRPY);
6.66. Calibração TCP do Sensor Fotoelétrico - Calcular XYZ da Ferramenta
1/**
2* @brief Calibração TCP do sensor fotoelétrico - calcular XYZ da ferramenta
3* @param [in] select 0-calcular TCP da ferramenta; 1-calcular origem do sensor; 2-calcular postura do sensor; 3-retornar diretamente o TCP da ferramenta; 4-registrar o sistema de coordenadas atual da peça e da ferramenta
4* @param [in] originDirection 0-Direção X; 1-Direção Y; 2-Direção Z
5* @param [in] pos1 Posição cartesiana do robô 1
6* @param [in] pos2 Posição cartesiana do robô 2
7* @param [in] pos3 Posição cartesiana do robô 3
8* @param [in] pos4 Posição cartesiana do robô 4
9* @param [out] TCP Valor XYZ da ferramenta
10* @return Código de erro
11*/
12errno_t TCPComputeXYZ(int select, double originDirection, DescTran pos1, DescTran pos2, DescTran pos3, DescTran pos4, DescTran& TCP);
6.67. Calibração TCP do Sensor Fotoelétrico - Iniciar Gravação da Posição do Centro do Flange da Extremidade
1/**
2* @brief Calibração TCP do sensor fotoelétrico - iniciar gravação da posição do centro do flange da extremidade
3* @return Código de erro
4*/
5errno_t TCPRecordFlangePosStart();
6.68. Calibração TCP do Sensor Fotoelétrico - Parar Gravação da Posição do Centro do Flange da Extremidade
1/**
2* @brief Calibração TCP do sensor fotoelétrico - parar gravação da posição do centro do flange da extremidade
3* @return Código de erro
4*/
5errno_t TCPRecordFlangePosEnd();
6.69. Calibração TCP do Sensor Fotoelétrico - Obter Posição do Centro da Ponta da Ferramenta
1/**
2* @brief Calibração TCP do sensor fotoelétrico - obter posição do centro da ponta da ferramenta
3* @param [out] TCP Posição do centro da ponta da ferramenta (x, y, z)
4* @return Código de erro
5*/
6errno_t TCPGetRecordFlangePos(DescTran& TCP);
6.70. Calibração TCP do Sensor Fotoelétrico
1/**
2* @brief Calibração TCP do sensor fotoelétrico
3* @param [in] luaPath Caminho do programa lua para calibração automática: "FR_CalibrateTheToolTcp.lua"
4* @param [in] offsetX Deslocamento do ponto de ensino (x, y, z) mm
5* @param [out] TCP Sistema de coordenadas da ferramenta calibrado (x, y, z, rx, ry, rz)
6* @return Código de erro
7*/
8errno_t PhotoelectricSensorTCPCalibration(std::string luaPath, DescTran offset, DescPose& TCP);
6.71. Exemplo de Código para Calibração TCP do Sensor Fotoelétrico
1int TestPhotoelectricSensorTCPCalib(void)
2{
3 ROBOT_STATE_PKG pkg = {};
4 FRRobot robot;
5 robot.LoggerInit();
6 robot.SetLoggerLevel(1);
7 int rtn = robot.RPC("192.168.58.2");
8 if (rtn != 0)
9 {
10 return 0;
11 }
12 robot.SetReConnectParam(true, 30000, 500);
13 DescTran offset = { 10.0, 10.0, 3.0 };
14 DescPose TCP = {};
15 rtn = robot.PhotoelectricSensorTCPCalibration("FR_CalibrateTheToolTcp.lua", offset, TCP);
16 printf("PhotoelectricSensorTCPCalibration rtn is %d %f %f %f %f %f %f \n", rtn, TCP.tran.x, TCP.tran.y, TCP.tran.z, TCP.rpy.rx, TCP.rpy.ry, TCP.rpy.rz);
17 robot.CloseRPC();
18 robot.Sleep(9999999);
19 return 0;
20}
6.72. Definir Velocidade Global em Tempo Real
1/**
2* @brief Definir velocidade global em tempo real
3* @param [in] vel Percentual de velocidade, intervalo [0~100]
4* @return Código de erro
5*/
6errno_t SetSpeedInstant(int vel);