3. 机器人运动
3.1. jog点动
1/**
2* @brief jog点动
3* @param [in] ref 0-关节点动,2-基坐标系下点动,4-工具坐标系下点动,8-工件坐标系下点动
4* @param [in] nb 1-关节1(或x轴),2-关节2(或y轴),3-关节3(或z轴),4-关节4(或绕x轴旋转),5-关节5(或绕y轴旋转),6-关节6(或绕z轴旋转)
5* @param [in] dir 0-负方向,1-正方向
6* @param [in] vel 速度百分比,[0~100]
7* @param [in] acc 加速度百分比, [0~100]
8* @param [in] max_dis 单次点动最大角度,单位[°]或距离,单位[mm]
9* @return 错误码
10*/
11errno_t StartJOG(uint8_t ref, uint8_t nb, uint8_t dir, float vel, float acc, float max_dis);
3.2. jog点动减速停止
1/**
2* @brief jog点动减速停止
3* @param [in] ref 1-关节点动停止,3-基坐标系下点动停止,5-工具坐标系下点动停止,9-工件坐标系下点动停止
4* @return 错误码
5*/
6errno_t StopJOG(uint8_t ref);
3.3. jog点动立即停止
1/**
2* @brief jog点动立即停止
3* @return 错误码
4*/
5errno_t ImmStopJOG();
3.4. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 robot.StartJOG(0,1,0,20.0,20.0,30.0); //单关节运动,StartJOG为非阻塞指令,运动状态下接收其他运动指令(包含StartJOG)会被丢弃
17 sleep(1);
18 //robot.StopJOG(1) //机器人单轴点动减速停止
19 robot.ImmStopJOG(); //机器人单轴点动立即停止
20 robot.StartJOG(0,2,1,20.0,20.0,30.0);
21 sleep(1);
22 robot.ImmStopJOG();
23 robot.StartJOG(0,3,1,20.0,20.0,30.0);
24 sleep(1);
25 robot.ImmStopJOG();
26 robot.StartJOG(0,4,1,20.0,20.0,30.0);
27 sleep(1);
28 robot.ImmStopJOG();
29 robot.StartJOG(0,5,1,20.0,20.0,30.0);
30 sleep(1);
31 robot.ImmStopJOG();
32 robot.StartJOG(0,6,1,20.0,20.0,30.0);
33 sleep(1);
34 robot.ImmStopJOG();
35
36 robot.StartJOG(2,1,0,20.0,20.0,30.0); //基坐标系下点动
37 sleep(1);
38 //robot.StopJOG(3) //机器人单轴点动减速停止
39 robot.ImmStopJOG(); //机器人单轴点动立即停止
40 robot.StartJOG(2,2,1,20.0,20.0,30.0);
41 sleep(1);
42 robot.ImmStopJOG();
43 robot.StartJOG(2,3,1,20.0,20.0,30.0);
44 sleep(1);
45 robot.ImmStopJOG();
46 robot.StartJOG(2,4,1,20.0,20.0,30.0);
47 sleep(1);
48 robot.ImmStopJOG();
49 robot.StartJOG(2,5,1,20.0,20.0,30.0);
50 sleep(1);
51 robot.ImmStopJOG();
52 robot.StartJOG(2,6,1,20.0,20.0,30.0);
53 sleep(1);
54 robot.ImmStopJOG();
55
56 robot.StartJOG(4,1,0,20.0,20.0,30.0); //工具坐标系下点动
57 sleep(1);
58 //robot.StopJOG(5) //机器人单轴点动减速停止
59 robot.ImmStopJOG(); //机器人单轴点动立即停止
60 robot.StartJOG(4,2,1,20.0,20.0,30.0);
61 sleep(1);
62 robot.ImmStopJOG();
63 robot.StartJOG(4,3,1,20.0,20.0,30.0);
64 sleep(1);
65 robot.ImmStopJOG();
66 robot.StartJOG(4,4,1,20.0,20.0,30.0);
67 sleep(1);
68 robot.ImmStopJOG();
69 robot.StartJOG(4,5,1,20.0,20.0,30.0);
70 sleep(1);
71 robot.ImmStopJOG();
72 robot.StartJOG(4,6,1,20.0,20.0,30.0);
73 sleep(1);
74 robot.ImmStopJOG();
75
76 robot.StartJOG(8,1,0,20.0,20.0,30.0); //工件坐标系下点动
77 sleep(1);
78 //robot.StopJOG(9) //机器人单轴点动减速停止
79 robot.ImmStopJOG(); //机器人单轴点动立即停止
80 robot.StartJOG(8,2,1,20.0,20.0,30.0);
81 sleep(1);
82 robot.ImmStopJOG();
83 robot.StartJOG(8,3,1,20.0,20.0,30.0);
84 sleep(1);
85 robot.ImmStopJOG();
86 robot.StartJOG(8,4,1,20.0,20.0,30.0);
87 sleep(1);
88 robot.ImmStopJOG();
89 robot.StartJOG(8,5,1,20.0,20.0,30.0);
90 sleep(1);
91 robot.ImmStopJOG();
92 robot.StartJOG(8,6,1,20.0,20.0,30.0);
93 sleep(1);
94 robot.ImmStopJOG();
95
96 return 0;
97}
3.5. 关节空间运动
1/**
2* @brief 关节空间运动
3* @param [in] joint_pos 目标关节位置,单位deg
4* @param [in] desc_pos 目标笛卡尔位姿
5* @param [in] tool 工具坐标号,范围[0~14]
6* @param [in] user 工件坐标号,范围[0~14]
7* @param [in] vel 速度百分比,范围[0~100]
8* @param [in] acc 加速度百分比,范围[0~100],暂不开放
9* @param [in] ovl 速度缩放因子,范围[0~100]
10* @param [in] epos 扩展轴位置,单位mm
11* @param [in] blendT [-1.0]-运动到位(阻塞),[0~500.0]-平滑时间(非阻塞),单位ms
12* @param [in] offset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
13* @param [in] offset_pos 位姿偏移量
14* @return 错误码
15*/
16errno_t MoveJ(JointPos *joint_pos, DescPose *desc_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos *epos, float blendT, uint8_t offset_flag, DescPose *offset_pos);
3.6. 笛卡尔空间直线运动
1/**
2* @brief 笛卡尔空间直线运动
3* @param [in] joint_pos 目标关节位置,单位deg
4* @param [in] desc_pos 目标笛卡尔位姿
5* @param [in] tool 工具坐标号,范围[0~14]
6* @param [in] user 工件坐标号,范围[0~14]
7* @param [in] vel 速度百分比,范围[0~100]
8* @param [in] acc 加速度百分比,范围[0~100],暂不开放
9* @param [in] ovl 速度缩放因子,范围[0~100]
10* @param [in] blendR [-1.0]-运动到位(阻塞),[0~1000.0]-平滑半径(非阻塞),单位mm
11* @param [in] epos 扩展轴位置,单位mm
12* @param [in] search 0-不焊丝寻位,1-焊丝寻位
13* @param [in] offset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
14* @param [in] offset_pos 位姿偏移量
15* @return 错误码
16*/
17errno_t MoveL(JointPos *joint_pos, DescPose *desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos *epos, uint8_t search, uint8_t offset_flag, DescPose *offset_pos);
3.7. 笛卡尔空间圆弧运动
1/**
2* @brief 笛卡尔空间圆弧运动
3* @param [in] joint_pos_p 路径点关节位置,单位deg
4* @param [in] desc_pos_p 路径点笛卡尔位姿
5* @param [in] ptool 工具坐标号,范围[0~14]
6* @param [in] puser 工件坐标号,范围[0~14]
7* @param [in] pvel 速度百分比,范围[0~100]
8* @param [in] pacc 加速度百分比,范围[0~100],暂不开放
9* @param [in] epos_p 扩展轴位置,单位mm
10* @param [in] poffset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
11* @param [in] offset_pos_p 位姿偏移量
12* @param [in] joint_pos_t 目标点关节位置,单位deg
13* @param [in] desc_pos_t 目标点笛卡尔位姿
14* @param [in] ttool 工具坐标号,范围[0~14]
15* @param [in] tuser 工件坐标号,范围[0~14]
16* @param [in] tvel 速度百分比,范围[0~100]
17* @param [in] tacc 加速度百分比,范围[0~100],暂不开放
18* @param [in] epos_t 扩展轴位置,单位mm
19* @param [in] toffset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
20* @param [in] offset_pos_t 位姿偏移量
21* @param [in] ovl 速度缩放因子,范围[0~100]
22* @param [in] blendR [-1.0]-运动到位(阻塞),[0~1000.0]-平滑半径(非阻塞),单位mm
23* @return 错误码
24*/
25errno_t MoveC(JointPos *joint_pos_p, DescPose *desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos *epos_p, uint8_t poffset_flag, DescPose *offset_pos_p,JointPos *joint_pos_t, DescPose *desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos *epos_t, uint8_t toffset_flag, DescPose *offset_pos_t,float ovl, float blendR);
3.8. 笛卡尔空间整圆运动
1/**
2* @brief 笛卡尔空间整圆运动
3* @param [in] joint_pos_p 路径点1关节位置,单位deg
4* @param [in] desc_pos_p 路径点1笛卡尔位姿
5* @param [in] ptool 工具坐标号,范围[0~14]
6* @param [in] puser 工件坐标号,范围[0~14]
7* @param [in] pvel 速度百分比,范围[0~100]
8* @param [in] pacc 加速度百分比,范围[0~100],暂不开放
9* @param [in] epos_p 扩展轴位置,单位mm
10* @param [in] joint_pos_t 路径点2关节位置,单位deg
11* @param [in] desc_pos_t 路径点2笛卡尔位姿
12* @param [in] ttool 工具坐标号,范围[0~14]
13* @param [in] tuser 工件坐标号,范围[0~14]
14* @param [in] tvel 速度百分比,范围[0~100]
15* @param [in] tacc 加速度百分比,范围[0~100],暂不开放
16* @param [in] epos_t 扩展轴位置,单位mm
17* @param [in] ovl 速度缩放因子,范围[0~100]
18* @param [in] offset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
19* @param [in] offset_pos 位姿偏移量
20* @return 错误码
21*/
22errno_t Circle(JointPos *joint_pos_p, DescPose *desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos *epos_p, JointPos *joint_pos_t, DescPose *desc_pos_t, int ttool, int tuser, float tvel, float tacc, ExaxisPos *epos_t, float ovl, uint8_t offset_flag, DescPose *offset_pos);
3.9. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 JointPos j1,j2,j3,j4;
17 DescPose desc_pos1,desc_pos2,desc_pos3,desc_pos4,offset_pos;
18 ExaxisPos epos;
19
20 memset(&j1, 0, sizeof(JointPos));
21 memset(&j2, 0, sizeof(JointPos));
22 memset(&j3, 0, sizeof(JointPos));
23 memset(&j4, 0, sizeof(JointPos));
24 memset(&desc_pos1, 0, sizeof(DescPose));
25 memset(&desc_pos2, 0, sizeof(DescPose));
26 memset(&desc_pos3, 0, sizeof(DescPose));
27 memset(&desc_pos4, 0, sizeof(DescPose));
28 memset(&offset_pos, 0, sizeof(DescPose));
29 memset(&epos, 0, sizeof(ExaxisPos));
30
31 j1 = {114.578,-117.798,-97.745,-54.436,90.053,-45.216};
32 desc_pos1.tran.x = -140.418;
33 desc_pos1.tran.y = 619.351;
34 desc_pos1.tran.z = 198.369;
35 desc_pos1.rpy.rx = -179.948;
36 desc_pos1.rpy.ry = 0.023;
37 desc_pos1.rpy.rz = 69.793;
38
39 j2 = {121.381,-97.108,-123.768,-45.824,89.877,-47.296};
40 desc_pos2.tran.x = -127.772;
41 desc_pos2.tran.y = 459.534;
42 desc_pos2.tran.z = 221.274;
43 desc_pos2.rpy.rx = -177.850;
44 desc_pos2.rpy.ry = -2.507;
45 desc_pos2.rpy.rz = 78.627;
46
47 j3 = {138.884,-114.522,-103.933,-49.694,90.688,-47.291};
48 desc_pos3.tran.x = -360.468;
49 desc_pos3.tran.y = 485.600;
50 desc_pos3.tran.z = 196.363;
51 desc_pos3.rpy.rx = -178.239;
52 desc_pos3.rpy.ry = -0.893;
53 desc_pos3.rpy.rz = 96.172;
54
55 j4 = {159.164,-96.105,-128.653,-41.170,90.704,-47.290};
56 desc_pos4.tran.x = -360.303;
57 desc_pos4.tran.y = 274.911;
58 desc_pos4.tran.z = 203.968;
59 desc_pos4.rpy.rx = -176.720;
60 desc_pos4.rpy.ry = -2.514;
61 desc_pos4.rpy.rz = 116.407;
62
63 int tool = 0;
64 int user = 0;
65 float vel = 100.0;
66 float acc = 100.0;
67 float ovl = 100.0;
68 float blendT = 0.0;
69 float blendR = 0.0;
70 uint8_t flag = 0;
71 uint8_t search = 0;
72
73 robot.SetSpeed(20);
74
75 int err1 = robot.MoveJ(&j1, &desc_pos1, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
76 printf("movej errcode:%d\n", err1);
77
78 int err2 = robot.MoveL(&j2, &desc_pos2, tool, user, vel, acc, ovl, blendR, &epos,search,flag, &offset_pos);
79 printf("movel errcode:%d\n", err2);
80
81 int err3 = robot.MoveC(&j3,&desc_pos3,tool,user,vel,acc,&epos,flag,&offset_pos,&j4,&desc_pos4,tool,user,vel,acc,&epos,flag,&offset_pos,ovl,blendR);
82 printf("movec errcode:%d\n", err3);
83
84 int err4 = robot.MoveJ(&j2, &desc_pos2, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
85 printf("movej errcode:%d\n", err4);
86
87 int err5 = robot.Circle(&j3,&desc_pos3,tool,user,vel,acc,&epos,&j4,&desc_pos4,tool,user,vel,acc,&epos,ovl,flag,&offset_pos);
88 printf("circle errcode:%d\n", err5);
89
90 return 0;
91}
3.10. 笛卡尔空间螺旋线运动
1/**
2* @brief 笛卡尔空间螺旋线运动
3* @param [in] joint_pos 目标关节位置,单位deg
4* @param [in] desc_pos 目标笛卡尔位姿
5* @param [in] tool 工具坐标号,范围[0~14]
6* @param [in] user 工件坐标号,范围[0~14]
7* @param [in] vel 速度百分比,范围[0~100]
8* @param [in] acc 加速度百分比,范围[0~100],暂不开放
9* @param [in] epos 扩展轴位置,单位mm
10* @param [in] ovl 速度缩放因子,范围[0~100]
11* @param [in] offset_flag 0-不偏移,1-基坐标系/工件坐标系下偏移,2-工具坐标系下偏移
12* @param [in] offset_pos 位姿偏移量
13* @param [in] spiral_param 螺旋参数
14* @return 错误码
15*/
16errno_t NewSpiral(JointPos *joint_pos, DescPose *desc_pos, int tool, int user, float vel, float acc, ExaxisPos *epos, float ovl, uint8_t offset_flag, DescPose *offset_pos, SpiralParam spiral_param);
3.11. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 JointPos j;
17 DescPose desc_pos, offset_pos1, offset_pos2;
18 ExaxisPos epos;
19 SpiralParam sp;
20
21 memset(&j, 0, sizeof(JointPos));
22 memset(&desc_pos, 0, sizeof(DescPose));
23 memset(&offset_pos1, 0, sizeof(DescPose));
24 memset(&offset_pos2, 0, sizeof(DescPose));
25 memset(&epos, 0, sizeof(ExaxisPos));
26 memset(&sp, 0, sizeof(SpiralParam));
27
28 j = {127.888,-101.535,-94.860,17.836,96.931,-61.325};
29 offset_pos1.tran.x = 50.0;
30 offset_pos1.rpy.rx = -30.0;
31 offset_pos2.tran.x = 50.0;
32 offset_pos2.rpy.rx = -5.0;
33
34 sp.circle_num = 5;
35 sp.circle_angle = 5.0;
36 sp.rad_init = 50.0;
37 sp.rad_add = 10.0;
38 sp.rotaxis_add = 10.0;
39 sp.rot_direction = 0;
40
41 int tool = 0;
42 int user = 0;
43 float vel = 100.0;
44 float acc = 100.0;
45 float ovl = 100.0;
46 float blendT = 0.0;
47 uint8_t flag = 2;
48
49 robot.SetSpeed(20);
50
51 int ret = robot.GetForwardKin(&j, &desc_pos); //只有关节位置的情况下,可用正运动学接口求解笛卡尔空间坐标
52
53 if(ret == 0)
54 {
55 int err1 = robot.MoveJ(&j, &desc_pos, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos1);
56 printf("movej errcode:%d\n", err1);
57
58 int err2 = robot.NewSpiral(&j, &desc_pos, tool, user, vel, acc, &epos, ovl, flag, &offset_pos2, sp);
59 printf("newspiral errcode:%d\n", err2);
60 }
61 else
62 {
63 printf("GetForwardKin errcode:%d\n", ret);
64 }
65
66 return 0;
67}
3.12. 伺服运动开始
1/**
2 * @brief 伺服运动开始,配合ServoJ、ServoCart指令使用
3 * @return 错误码
4 */
5errno_t ServoMoveStart();
3.13. 伺服运动结束
1/**
2 * @brief 伺服运动结束,配合ServoJ、ServoCart指令使用
3 * @return 错误码
4 */
5errno_t ServoMoveEnd();
3.14. 关节空间伺服模式运动
1/**
2* @brief 关节空间伺服模式运动
3* @param [in] joint_pos 目标关节位置,单位deg
4* @param [in] acc 加速度百分比,范围[0~100],暂不开放,默认为0
5* @param [in] vel 速度百分比,范围[0~100],暂不开放,默认为0
6* @param [in] cmdT 指令下发周期,单位s,建议范围[0.001~0.0016]
7* @param [in] filterT 滤波时间,单位s,暂不开放,默认为0
8* @param [in] gain 目标位置的比例放大器,暂不开放,默认为0
9* @return 错误码
10*/
11errno_t ServoJ(JointPos *joint_pos, float acc, float vel, float cmdT, float filterT, float gain);
3.15. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 JointPos j;
17
18 memset(&j, 0, sizeof(JointPos));
19
20 float vel = 0.0;
21 float acc = 0.0;
22 float cmdT = 0.008;
23 float filterT = 0.0;
24 float gain = 0.0;
25 uint8_t flag = 0;
26 int count = 500;
27 float dt = 0.1;
28
29 int ret = robot.GetActualJointPosDegree(flag, &j);
30 if(ret == 0)
31 {
32 while (count)
33 {
34 robot.ServoJ(&j, acc, vel, cmdT, filterT, gain);
35 j.jPos[0] += dt;
36 count -= 1;
37 robot.WaitMs(cmdT*1000);
38 }
39 }
40 else
41 {
42 printf("GetActualJointPosDegree errcode:%d\n", ret);
43 }
44
45 return 0;
46}
3.16. 笛卡尔空间伺服模式运动
1/**
2* @brief 笛卡尔空间伺服模式运动
3* @param [in] mode 0-绝对运动(基坐标系),1-增量运动(基坐标系),2-增量运动(工具坐标系)
4* @param [in] desc_pos 目标笛卡尔位姿或位姿增量
5* @param [in] pos_gain 位姿增量比例系数,仅在增量运动下生效,范围[0~1]
6* @param [in] acc 加速度百分比,范围[0~100],暂不开放,默认为0
7* @param [in] vel 速度百分比,范围[0~100],暂不开放,默认为0
8* @param [in] cmdT 指令下发周期,单位s,建议范围[0.001~0.0016]
9* @param [in] filterT 滤波时间,单位s,暂不开放,默认为0
10* @param [in] gain 目标位置的比例放大器,暂不开放,默认为0
11* @return 错误码
12*/
13errno_t ServoCart(int mode, DescPose *desc_pose, float pos_gain[6], float acc, float vel, float cmdT, float filterT, float gain);
3.17. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 DescPose desc_pos_dt;
17 memset(&desc_pos_dt, 0, sizeof(DescPose));
18
19 desc_pos_dt.tran.z = -0.5;
20 float pos_gain[6] = {0.0,0.0,1.0,0.0,0.0,0.0};
21 int mode = 2;
22 float vel = 0.0;
23 float acc = 0.0;
24 float cmdT = 0.008;
25 float filterT = 0.0;
26 float gain = 0.0;
27 uint8_t flag = 0;
28 int count = 100;
29
30 robot.SetSpeed(20);
31
32 while (count)
33 {
34 robot.ServoCart(mode, &desc_pos_dt, pos_gain, acc, vel, cmdT, filterT, gain);
35 count -= 1;
36 robot.WaitMs(cmdT*1000);
37 }
38
39 return 0;
40}
3.18. 笛卡尔空间点到点运动
1/**
2* @brief 笛卡尔空间点到点运动
3* @param [in] desc_pos 目标笛卡尔位姿或位姿增量
4* @param [in] tool 工具坐标号,范围[0~14]
5* @param [in] user 工件坐标号,范围[0~14]
6* @param [in] vel 速度百分比,范围[0~100]
7* @param [in] acc 加速度百分比,范围[0~100],暂不开放
8* @param [in] ovl 速度缩放因子,范围[0~100]
9* @param [in] blendT [-1.0]-运动到位(阻塞),[0~500.0]-平滑时间(非阻塞),单位ms
10* @param [in] config 关节空间配置,[-1]-参考当前关节位置解算,[0~7]-参考特定关节空间配置解算,默认为-1
11* @return 错误码
12*/
13errno_t MoveCart(DescPose *desc_pos, int tool, int user, float vel, float acc, float ovl, float blendT, int config);
3.19. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 DescPose desc_pos1, desc_pos2, desc_pos3;
17 memset(&desc_pos1, 0, sizeof(DescPose));
18 memset(&desc_pos2, 0, sizeof(DescPose));
19 memset(&desc_pos3, 0, sizeof(DescPose));
20
21 desc_pos1.tran.x = 75.414;
22 desc_pos1.tran.y = 568.526;
23 desc_pos1.tran.z = 338.135;
24 desc_pos1.rpy.rx = -178.348;
25 desc_pos1.rpy.ry = -0.930;
26 desc_pos1.rpy.rz = 52.611;
27
28 desc_pos2.tran.x = -273.856;
29 desc_pos2.tran.y = 643.260;
30 desc_pos2.tran.z = 259.235;
31 desc_pos2.rpy.rx = -177.972;
32 desc_pos2.rpy.ry = -1.494;
33 desc_pos2.rpy.rz = 80.866;
34
35 desc_pos3.tran.x = -423.044;
36 desc_pos3.tran.y = 229.703;
37 desc_pos3.tran.z = 241.080;
38 desc_pos3.rpy.rx = -173.990;
39 desc_pos3.rpy.ry = -5.772;
40 desc_pos3.rpy.rz = 123.971;
41
42 int tool = 0;
43 int user = 0;
44 float vel = 100.0;
45 float acc = 100.0;
46 float ovl = 100.0;
47 float blendT = -1.0;
48 float blendT1 = 0.0;
49 int config = -1;
50
51 robot.SetSpeed(20);
52 robot.MoveCart(&desc_pos1, tool, user, vel, acc, ovl, blendT, config);
53 robot.MoveCart(&desc_pos2, tool, user, vel, acc, ovl, blendT, config);
54 robot.MoveCart(&desc_pos3, tool, user, vel, acc, ovl, blendT1, config);
55
56 return 0;
57}
3.20. 样条运动开始
1/**
2* @brief 样条运动开始
3* @return 错误码
4*/
5errno_t SplineStart();
3.21. 样条运动PTP
1/**
2* @brief 关节空间样条运动
3* @param [in] joint_pos 目标关节位置,单位deg
4* @param [in] desc_pos 目标笛卡尔位姿
5* @param [in] tool 工具坐标号,范围[0~14]
6* @param [in] user 工件坐标号,范围[0~14]
7* @param [in] vel 速度百分比,范围[0~100]
8* @param [in] acc 加速度百分比,范围[0~100],暂不开放
9* @param [in] ovl 速度缩放因子,范围[0~100]
10* @return 错误码
11*/
12errno_t SplinePTP(JointPos *joint_pos, DescPose *desc_pos, int tool, int user, float vel, float acc, float ovl);
3.22. 样条运动结束
1/**
2* @brief 样条运动结束
3* @return 错误码
4*/
5errno_t SplineEnd();
3.23. 新样条运动开始
在 C++SDK-v2.1.3.0 版本发生变更.
1/**
2* @brief 新样条运动开始
3* @param [in] type 0-圆弧过渡,1-给定点位为路径点
4* @param [in] averageTime 全局平均衔接时间(ms)(10 ~ ),默认2000
5* @return 错误码
6*/
7errno_t NewSplineStart(int type, int averageTime=2000);
3.24. 新样条指令点
1/**
2 * @brief 新样条指令点
3 * @param [in] joint_pos 目标关节位置,单位deg
4 * @param [in] desc_pos 目标笛卡尔位姿
5 * @param [in] tool 工具坐标号,范围[0~14]
6 * @param [in] user 工件坐标号,范围[0~14]
7 * @param [in] vel 速度百分比,范围[0~100]
8 * @param [in] acc 加速度百分比,范围[0~100],暂不开放
9 * @param [in] ovl 速度缩放因子,范围[0~100]
10 * @param [in] blendR [-1.0]-运动到位(阻塞),[0~1000.0]-平滑半径(非阻塞),单位mm
11 * @param [in] lastFlag 是否为最后一个点,0-否,1-是
12 * @return 错误码
13 */
14errno_t NewSplinePoint(JointPos *joint_pos, DescPose *desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, int lastFlag);
3.25. 新样条运动结束
1/**
2 * @brief 新样条运动结束
3 * @return 错误码
4 */
5errno_t NewSplineEnd();
3.26. 终止运动
1/**
2* @brief 终止运动
3* @return 错误码
4*/
5errno_t StopMotion();
3.27. 暂停运动
1/**
2 * @brief 暂停运动
3 * @return 错误码
4 */
5errno_t PauseMotion();
3.28. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 JointPos j1,j2,j3,j4;
17 DescPose desc_pos1,desc_pos2,desc_pos3,desc_pos4,offset_pos;
18 ExaxisPos epos;
19
20 memset(&j1, 0, sizeof(JointPos));
21 memset(&j2, 0, sizeof(JointPos));
22 memset(&j3, 0, sizeof(JointPos));
23 memset(&j4, 0, sizeof(JointPos));
24 memset(&desc_pos1, 0, sizeof(DescPose));
25 memset(&desc_pos2, 0, sizeof(DescPose));
26 memset(&desc_pos3, 0, sizeof(DescPose));
27 memset(&desc_pos4, 0, sizeof(DescPose));
28 memset(&offset_pos, 0, sizeof(DescPose));
29 memset(&epos, 0, sizeof(ExaxisPos));
30
31 j1 = {114.578,-117.798,-97.745,-54.436,90.053,-45.216};
32 desc_pos1.tran.x = -140.418;
33 desc_pos1.tran.y = 619.351;
34 desc_pos1.tran.z = 198.369;
35 desc_pos1.rpy.rx = -179.948;
36 desc_pos1.rpy.ry = 0.023;
37 desc_pos1.rpy.rz = 69.793;
38
39 j2 = {115.401,-105.206,-117.959,-49.727,90.054,-45.222};
40 desc_pos2.tran.x = -95.586;
41 desc_pos2.tran.y = 504.143;
42 desc_pos2.tran.z = 186.880;
43 desc_pos2.rpy.rx = 178.001;
44 desc_pos2.rpy.ry = 2.091;
45 desc_pos2.rpy.rz = 70.585;
46
47 j3 = {135.609,-103.249,-120.211,-49.715,90.058,-45.219};
48 desc_pos3.tran.x = -252.429;
49 desc_pos3.tran.y = 428.903;
50 desc_pos3.tran.z = 188.492;
51 desc_pos3.rpy.rx = 177.804;
52 desc_pos3.rpy.ry = 2.294;
53 desc_pos3.rpy.rz = 90.782;
54
55 j4 = {154.766,-87.036,-135.672,-49.045,90.739,-45.223};
56 desc_pos4.tran.x = -277.255;
57 desc_pos4.tran.y = 272.958;
58 desc_pos4.tran.z = 205.452;
59 desc_pos4.rpy.rx = 179.289;
60 desc_pos4.rpy.ry = 1.765;
61 desc_pos4.rpy.rz = 109.966;
62
63 int tool = 0;
64 int user = 0;
65 float vel = 100.0;
66 float acc = 100.0;
67 float ovl = 100.0;
68 float blendT = -1.0;
69 uint8_t flag = 0;
70
71 robot.SetSpeed(20);
72
73 int err1 = robot.MoveJ(&j1, &desc_pos1, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
74 printf("movej errcode:%d\n", err1);
75 robot.SplineStart();
76 robot.SplinePTP(&j1, &desc_pos1, tool, user, vel, acc, ovl);
77 robot.SplinePTP(&j2, &desc_pos2, tool, user, vel, acc, ovl);
78 robot.SplinePTP(&j3, &desc_pos3, tool, user, vel, acc, ovl);
79 robot.SplinePTP(&j4, &desc_pos4, tool, user, vel, acc, ovl);
80 robot.SplineEnd();
81
82 return 0;
83}
3.29. 恢复运动
1/**
2 * @brief 恢复运动
3 * @return 错误码
4 */
5errno_t ResumeMotion();
3.30. 点位整体偏移开始
1/**
2* @brief 点位整体偏移开始
3* @param [in] flag 0-基坐标系下/工件坐标系下偏移,2-工具坐标系下偏移
4* @param [in] offset_pos 位姿偏移量
5* @return 错误码
6*/
7errno_t PointsOffsetEnable(int flag, DescPose *offset_pos);
3.31. 点位整体偏移结束
1/**
2* @brief 点位整体偏移结束
3* @return 错误码
4*/
5errno_t PointsOffsetDisable();
3.32. 代码示例
1#include <cstdlib>
2#include <iostream>
3#include <stdio.h>
4#include <cstring>
5#include <unistd.h>
6#include "FRRobot.h"
7#include "RobotTypes.h"
8
9using namespace std;
10
11int main(void)
12{
13 FRRobot robot; //实例化机器人对象
14 robot.RPC("192.168.58.2"); //与机器人控制器建立通信连接
15
16 JointPos j1,j2;
17 DescPose desc_pos1,desc_pos2,offset_pos,offset_pos1;
18 ExaxisPos epos;
19
20 memset(&j1, 0, sizeof(JointPos));
21 memset(&j2, 0, sizeof(JointPos));
22 memset(&desc_pos1, 0, sizeof(DescPose));
23 memset(&desc_pos2, 0, sizeof(DescPose));
24 memset(&offset_pos, 0, sizeof(DescPose));
25 memset(&offset_pos1, 0, sizeof(DescPose));
26 memset(&epos, 0, sizeof(ExaxisPos));
27
28 j1 = {114.578,-117.798,-97.745,-54.436,90.053,-45.216};
29 desc_pos1.tran.x = -140.418;
30 desc_pos1.tran.y = 619.351;
31 desc_pos1.tran.z = 198.369;
32 desc_pos1.rpy.rx = -179.948;
33 desc_pos1.rpy.ry = 0.023;
34 desc_pos1.rpy.rz = 69.793;
35
36 j2 = {115.401,-105.206,-117.959,-49.727,90.054,-45.222};
37 desc_pos2.tran.x = -95.586;
38 desc_pos2.tran.y = 504.143;
39 desc_pos2.tran.z = 186.880;
40 desc_pos2.rpy.rx = 178.001;
41 desc_pos2.rpy.ry = 2.091;
42 desc_pos2.rpy.rz = 70.585;
43
44 offset_pos1.tran.x = 100.0;
45 offset_pos1.tran.y = 100.0;
46 offset_pos1.tran.z = 100.0;
47 offset_pos1.rpy.rx = 5.0;
48 offset_pos1.rpy.ry = 5.0;
49 offset_pos1.rpy.rz = 5.0;
50
51 int tool = 0;
52 int user = 0;
53 float vel = 100.0;
54 float acc = 100.0;
55 float ovl = 100.0;
56 float blendT = -1.0;
57 float blendR = 0.0;
58 uint8_t flag = 0;
59 int type = 0;
60
61 robot.SetSpeed(20);
62
63 robot.MoveJ(&j1, &desc_pos1, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
64 robot.MoveJ(&j2, &desc_pos2, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
65 sleep(2);
66 robot.PointsOffsetEnable(type, &offset_pos1);
67 robot.MoveJ(&j1, &desc_pos1, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
68 robot.MoveJ(&j2, &desc_pos2, tool, user, vel, acc, ovl, &epos, blendT,flag, &offset_pos);
69 robot.PointsOffsetDisable();
70
71 return 0;
72}