3. 机器人运动

3.1. jog点动

 1/**
 2* @brief jog 点动
 3* @param [in] refType 点动类型: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*/
11int StartJOG(byte refType, byte nb, byte 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*/
6int StopJOG(byte stopType);

3.3. jog点动立即停止

1/**
2* @brief jog点动立即停止
3* @return  错误码
4*/
5int ImmStopJOG();

3.4. 代码示例

 1private void btnJOG_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    robot.SetSpeed(35);
 7    robot.StartJOG(0, 1, 0, 15, 20.0f, 30.0f);   //单关节运动,StartJOG为非阻塞指令,运动状态下接收其他运动指令(包含StartJOG)会被丢弃
 8    Thread.Sleep(1000);
 9    robot.StopJOG(1);  //机器人单轴点动减速停止
10    //robot.ImmStopJOG();  //机器人单轴点动立即停止
11    robot.StartJOG(0, 2, 1, 15, 20.0f, 30.0f);
12    Thread.Sleep(1000);
13    robot.ImmStopJOG();
14    robot.StartJOG(0, 3, 1, 15, 20.0f, 30.0f);
15    Thread.Sleep(1000);
16    robot.ImmStopJOG();
17    robot.StartJOG(0, 4, 1, 15, 20.0f, 30.0f);
18    Thread.Sleep(1000);
19    robot.ImmStopJOG();
20    robot.StartJOG(0, 5, 1, 15, 20.0f, 30.0f);
21    Thread.Sleep(1000);
22    robot.ImmStopJOG();
23    robot.StartJOG(0, 6, 1, 15, 20.0f, 30.0f);
24    Thread.Sleep(1000);
25    robot.ImmStopJOG();
26
27    robot.StartJOG(2, 1, 0, 15, 20.0f, 30.0f);   //基坐标系下点动
28    Thread.Sleep(1000);
29    robot.StopJOG(3);  //机器人单轴点动减速停止
30    //robot.ImmStopJOG();  //机器人单轴点动立即停止
31    robot.StartJOG(2, 2, 1, 15, 20.0f, 30.0f);
32    Thread.Sleep(1000);
33    robot.ImmStopJOG();
34    robot.StartJOG(2, 3, 1, 15, 20.0f, 30.0f);
35    Thread.Sleep(1000);
36    robot.ImmStopJOG();
37    robot.StartJOG(2, 4, 1, 15, 20.0f, 30.0f);
38    Thread.Sleep(1000);
39    robot.ImmStopJOG();
40    robot.StartJOG(2, 5, 1, 15, 20.0f, 30.0f);
41    Thread.Sleep(1000);
42    robot.ImmStopJOG();
43    robot.StartJOG(2, 6, 1, 15, 20.0f, 30.0f);
44    Thread.Sleep(1000);
45    robot.ImmStopJOG();
46
47    robot.StartJOG(4, 1, 0, 15, 20.0f, 30.0f);   //工具坐标系下点动
48    Thread.Sleep(1000);
49    robot.StopJOG(5);  //机器人单轴点动减速停止
50    //robot.ImmStopJOG();  //机器人单轴点动立即停止
51    robot.StartJOG(4, 2, 1, 15, 20.0f, 30.0f);
52    Thread.Sleep(1000);
53    robot.ImmStopJOG();
54    robot.StartJOG(4, 3, 1, 15, 20.0f, 30.0f);
55    Thread.Sleep(1000);
56    robot.ImmStopJOG();
57    robot.StartJOG(4, 4, 1, 15, 20.0f, 30.0f);
58    Thread.Sleep(1000);
59    robot.ImmStopJOG();
60    robot.StartJOG(4, 5, 1, 15, 20.0f, 30.0f);
61    Thread.Sleep(1000);
62    robot.ImmStopJOG();
63    robot.StartJOG(4, 6, 1, 15, 20.0f, 30.0f);
64    Thread.Sleep(1000);
65    robot.ImmStopJOG();
66
67    robot.StartJOG(8, 1, 0, 15, 20.0f, 30.0f);   //工件坐标系下点动
68    Thread.Sleep(1000);
69    robot.StopJOG(9);  //机器人单轴点动减速停止
70    //robot.ImmStopJOG();  //机器人单轴点动立即停止
71    robot.StartJOG(8, 2, 1, 15, 20.0f, 30.0f);
72    Thread.Sleep(1000);
73    robot.ImmStopJOG();
74    robot.StartJOG(8, 3, 1, 15, 20.0f, 30.0f);
75    Thread.Sleep(1000);
76    robot.ImmStopJOG();
77    robot.StartJOG(8, 4, 1, 15, 20.0f, 30.0f);
78    Thread.Sleep(1000);
79    robot.ImmStopJOG();
80    robot.StartJOG(8, 5, 1, 15, 20.0f, 30.0f);
81    Thread.Sleep(1000);
82    robot.ImmStopJOG();
83    robot.StartJOG(8, 6, 1, 15, 20.0f, 30.0f);
84    Thread.Sleep(1000);
85    robot.ImmStopJOG();
86}

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*/
16int MoveJ(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, ExaxisPos epos, float blendT, byte 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*/
17int MoveL(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, ExaxisPos epos, byte search, byte 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*/
25int MoveC(JointPos joint_pos_p, DescPose desc_pos_p, int ptool, int puser, float pvel, float pacc, ExaxisPos epos_p, byte 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, byte 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*/
22int 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, byte offset_flag, DescPose offset_pos);

3.9. 代码示例

 1private void btnMovetest_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    JointPos j1, j2, j3, j4;
 7    DescPose desc_pos1, desc_pos2, desc_pos3, desc_pos4, offset_pos;
 8    ExaxisPos epos;
 9
10    j1 = new JointPos(-58.982, -90.717, 127.647, -129.041, -87.989, -0.062);
11    desc_pos1 = new DescPose(-437.039, 411.064, 426.189, -177.886, 2.007, 31.155);
12
13    j2 = new JointPos(-58.978, -76.817, 112.494, -127.348, -89.145, -0.063);
14    desc_pos2 = new DescPose(-525.55, 562.3, 417.199, -178.325, 0.847, 31.109);
15
16    j3 = new JointPos(-71.746, -87.177, 123.953, -126.25, -89.429, -0.089);
17    desc_pos3 = new DescPose(-345.155, 535.733, 421.269, 179.475, 0.571, 18.332);
18
19    ExaxisPos ePos = new ExaxisPos(0, 0, 0, 0);
20    DescPose offset = new DescPose();
21
22    int tool = 0;
23    int user = 0;
24    float vel = 100.0f;
25    float acc = 100.0f;
26    float ovl = 100.0f;
27    float blendT = 0.0f;
28    float blendR = 0.0f;
29    byte flag = 0;
30    byte search = 0;
31
32    robot.SetSpeed(20);
33    int err = -1;
34    err = robot.MoveJ(j1, desc_pos1, tool, user, vel, acc, ovl, ePos, blendT, flag, offset);
35    Console.WriteLine($"movej errcode:  {err}");
36
37    Thread.Sleep(1000);
38    err = robot.MoveL(j2, desc_pos2, tool, user, vel, acc, ovl, blendR, ePos, search, flag, offset);
39    Console.WriteLine($"moveL errcode:  {err}");
40
41    Thread.Sleep(1000);
42    err = robot.MoveL(j1, desc_pos1, tool, user, vel, acc, ovl, blendR, ePos, search, flag, offset);
43    Console.WriteLine($"moveL errcode:  {err}");
44
45    Thread.Sleep(1000);
46    err = robot.MoveC(j2, desc_pos2, tool, user, vel, acc, ePos, flag, offset, j3, desc_pos3, tool, user, vel, acc, ePos, flag, offset, ovl, blendR);
47    Console.WriteLine($"circle errcode:  {err}");
48
49    Thread.Sleep(1000);
50    err = robot.MoveJ(j1, desc_pos1, tool, user, vel, acc, ovl, ePos, blendT, flag, offset);
51    Console.WriteLine($"movej errcode:  {err}");
52
53    Thread.Sleep(1000);
54    err = robot.Circle(j2, desc_pos2, tool, user, vel, acc, ePos, j3, desc_pos3, tool, user, vel, acc, ePos, ovl, flag, offset);
55    Console.WriteLine($"circle errcode:  {err}");
56}

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*/
16int NewSpiral(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, ExaxisPos epos, float ovl, byte offset_flag, DescPose offset_pos, SpiralParam spiral_param);

3.11. 代码示例

 1private void btnDescSpiral_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5    JointPos j;
 6    DescPose desc_pos;
 7    DescPose offset_pos1 = new DescPose(0, 0, 0, 0, 0, 0);
 8    DescPose offset_pos2 = new DescPose(0, 0, 0, 0, 0, 0);
 9    ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
10    SpiralParam sp;
11
12    j = new JointPos(-58.982, -90.717, 127.647, -129.041, -87.989, -0.062);
13    desc_pos = new DescPose(-437.039, 411.064, 426.189, -177.886, 2.007, 31.155);
14
15    offset_pos1.tran.x = 50.0;
16    offset_pos1.rpy.rx = -30.0;
17    offset_pos2.tran.x = 50.0;
18    offset_pos2.rpy.rx = -5.0;
19
20    sp.circle_num = 5;
21    sp.circle_angle = 1.0f;
22    sp.rad_init = 10.0f;
23    sp.rad_add = 40.0f;
24    sp.rotaxis_add = 10.0f;
25    sp.rot_direction = 0;
26
27    int tool = 0;
28    int user = 0;
29    float vel = 100.0f;
30    float acc = 100.0f;
31    float ovl = 100.0f;
32    float blendT = 0.0f;
33    byte flag = 2;
34
35    robot.SetSpeed(20);
36    int ret = robot.GetForwardKin(j, ref desc_pos);  //只有关节位置的情况下,可用正运动学接口求解笛卡尔空间坐标
37    if (ret == 0)
38    {
39        int err = -1;
40        err = robot.MoveJ(j, desc_pos, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos1);
41        Console.WriteLine($"movej errcode:  {err}");
42
43        err = robot.NewSpiral(j, desc_pos, tool, user, vel, acc, epos, ovl, flag, offset_pos2, sp);
44        Console.WriteLine($"newspiral errcode:  {err}");
45    }
46    else
47    {
48        Console.WriteLine($"GetForwardKin errcode: {ret}");
49    }
50}

3.12. 伺服运动开始

1/**
2* @brief 伺服运动开始,配合ServoJ、ServoCart指令使用
3* @return 错误码
4*/
5int ServoMoveStart();

3.13. 伺服运动结束

1/**
2* @brief 伺服运动结束,配合ServoJ、ServoCart指令使用
3* @return 错误码
4*/
5int 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*/
11int ServoJ(JointPos joint_pos, float acc, float vel, float cmdT, float filterT, float gain);

3.15. 代码示例

 1private void btnJointServoMove_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    JointPos j = new JointPos(0, 0, 0, 0, 0, 0);
 7
 8    float vel = 0.0f;
 9    float acc = 0.0f;
10    float cmdT = 0.008f;
11    float filterT = 0.0f;
12    float gain = 0.0f;
13    byte flag = 0;
14    int count = 200;
15    float dt = 0.1f;
16    int ret = robot.GetActualJointPosDegree(flag, ref j);
17    if (ret == 0)
18    {
19        while (count > 0)
20        {
21            robot.ServoJ(j, acc, vel, cmdT, filterT, gain);
22            j.jPos[0] += dt;
23            count -= 1;
24            robot.WaitMs((int)(cmdT * 1000));
25        }
26    }
27    else
28    {
29        Console.WriteLine($"GetActualJointPosDegree errcode:  {ret}");
30    }
31}

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*/
13int ServoCart(int mode, DescPose desc_pos, double[] pos_gain, float acc, float vel, float cmdT, float filterT, float gain);

3.17. 代码示例

 1private void btnDescServoMove_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    DescPose desc_pos_dt = new DescPose(0, 0, 0, 0, 0, 0);
 7    desc_pos_dt.tran.z = -0.5;
 8    double[] pos_gain = new double[6]{ 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 };
 9    int mode = 2;
10    float vel = 0.0f;
11    float acc = 0.0f;
12    float cmdT = 0.008f;
13    float filterT = 0.0f;
14    float gain = 0.0f;
15    int flag = 0;
16    int count = 500;
17
18    robot.SetSpeed(20);
19    while (count > 0)
20    {
21        robot.ServoCart(mode, desc_pos_dt, pos_gain, acc, vel, cmdT, filterT, gain);
22        count -= 1;
23        robot.WaitMs((int)(cmdT * 1000));
24    }
25}

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*/
13int MoveCart(DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendT, int config);

3.19. 代码示例

 1private void btnDescPTPMove_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    DescPose desc_pos1, desc_pos2, desc_pos3;
 7    desc_pos1 = new DescPose(-437.039, 411.064, 426.189, -177.886, 2.007, 31.155);
 8    desc_pos2 = new DescPose(-525.55, 562.3, 417.199, -178.325, 0.847, 31.109);
 9    desc_pos3 = new DescPose(-345.155, 535.733, 421.269, 179.475, 0.571, 18.332);
10
11    int tool = 0;
12    int user = 0;
13    float vel = 100.0f;
14    float acc = 100.0f;
15    float ovl = 100.0f;
16    float blendT = -1.0f;
17    float blendT1 = 0.0f;
18    int config = -1;
19
20    robot.SetSpeed(20);
21    robot.MoveCart(desc_pos1, tool, user, vel, acc, ovl, blendT, config);
22    robot.MoveCart(desc_pos2, tool, user, vel, acc, ovl, blendT, config);
23    robot.MoveCart(desc_pos3, tool, user, vel, acc, ovl, blendT1, config);
24}

3.20. 样条运动开始

1/**
2* @brief  样条运动开始
3* @return  错误码
4*/
5int 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*/
12int 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*/
5int SplineEnd();

3.23. 代码示例

 1private void btnSplineMove_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    JointPos j1, j2, j3, j4;
 7    DescPose desc_pos1, desc_pos2, desc_pos3, desc_pos4, offset_pos;
 8    ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
 9
10    j1 = new JointPos(-58.982, -90.717, 127.647, -129.041, -87.989, -0.062);
11    desc_pos1 = new DescPose(-437.039, 411.064, 426.189, -177.886, 2.007, 31.155);
12
13    j2 = new JointPos(-58.978, -76.817, 112.494, -127.348, -89.145, -0.063);
14    desc_pos2 = new DescPose(-525.55, 562.3, 417.199, -178.325, 0.847, 31.109);
15
16    j3 = new JointPos(-49.129, -68.49, 103.297, -128.898, -91.478, -0.062);
17    desc_pos3 = new DescPose(-680.308, 547.378, 399.189, -175.909, -1.479, 40.827);
18
19    j4 = new JointPos(-56.126, -54.093, 80.686, -121.655, -91.428, -0.064);
20    desc_pos4 = new DescPose(-719.201, 790.816, 389.118, -174.939, -1.428, 33.809);
21
22    offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
23
24    int tool = 0;
25    int user = 0;
26    float vel = 100.0f;
27    float acc = 100.0f;
28    float ovl = 100.0f;
29    float blendT = -1.0f;
30    byte flag = 0;
31    robot.SetSpeed(20);
32    int err = -1;
33    err = robot.MoveJ(j1, desc_pos1, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos);
34    Console.WriteLine($"movej errcode:  {err}");
35
36    robot.SplineStart();
37    robot.SplinePTP(j1, desc_pos1, tool, user, vel, acc, ovl);
38    robot.SplinePTP(j2, desc_pos2, tool, user, vel, acc, ovl);
39    robot.SplinePTP(j3, desc_pos3, tool, user, vel, acc, ovl);
40    robot.SplinePTP(j4, desc_pos4, tool, user, vel, acc, ovl);
41    robot.SplineEnd();
42}

3.24. 新样条运动开始

在 C#SDK-v1.0.6 版本发生变更.

1/**
2* @brief 新样条运动开始
3* @param [in] type  0-圆弧过渡,1-给定点位为路径点
4* @param [in] averageTime  全局平均衔接时间(ms)(10 ~  ),默认2000
5* @return 错误码
6*/
7int NewSplineStart(int type, int averageTime=2000);

3.25. 新样条指令点

 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*/
14int NewSplinePoint(JointPos joint_pos, DescPose desc_pos, int tool, int user, float vel, float acc, float ovl, float blendR, int lastFlag);

3.26. 新样条运动结束

1/**
2* @brief 新样条运动开始
3* @return 错误码
4*/
5int NewSplineEnd();

3.27. 终止运动

1/**
2* @brief 终止运动
3* @return  错误码
4*/
5int StopMotion();

3.28. 暂停运动

1/**
2  * @brief 暂停运动
3  * @return 错误码
4*/
5int PauseMotion();

3.29. 恢复运动

1/**
2* @brief 恢复运动
3* @return 错误码
4*/
5int ResumeMotion();

3.30. 点位整体偏移开始

1/**
2* @brief  点位整体偏移开始
3* @param  [in]  flag  0-基坐标系下/工件坐标系下偏移,2-工具坐标系下偏移
4* @param  [in] offset_pos  位姿偏移量
5* @return  错误码
6*/
7int PointsOffsetEnable(int flag, DescPose offset_pos);

3.31. 点位整体偏移结束

1/**
2* @brief  点位整体偏移结束
3* @return  错误码
4*/
5int PointsOffsetDisable();

3.32. 代码示例

 1private void btnPointOffect_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    JointPos j1, j2;
 7    DescPose desc_pos1, desc_pos2, offset_pos, offset_pos1;
 8    ExaxisPos epos = new ExaxisPos(0, 0, 0, 0);
 9
10    j1 = new JointPos(-58.982, -90.717, 127.647, -129.041, -87.989, -0.062);
11    desc_pos1 = new DescPose(-437.039, 411.064, 426.189, -177.886, 2.007, 31.155);
12
13    j2 = new JointPos(-58.978, -76.817, 112.494, -127.348, -89.145, -0.063);
14    desc_pos2 = new DescPose(-525.55, 562.3, 417.199, -178.325, 0.847, 31.109);
15
16    offset_pos = new DescPose(0, 0, 0, 0, 0, 0);
17    offset_pos1 = new DescPose(50.0, 50.0, 50.0, 5.0, 5.0, 5.0);
18
19    int tool = 0;
20    int user = 0;
21    float vel = 100.0f;
22    float acc = 100.0f;
23    float ovl = 100.0f;
24    float blendT = -1.0f;
25    float blendR = 0.0f;
26    byte flag = 0;
27    int type = 0;
28
29    robot.SetSpeed(20);
30
31    robot.MoveJ(j1, desc_pos1, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos);
32    robot.MoveJ(j2, desc_pos2, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos);
33    Thread.Sleep(1000);
34    robot.PointsOffsetEnable(type, offset_pos1);
35    robot.MoveJ(j1, desc_pos1, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos);
36    robot.MoveJ(j2, desc_pos2, tool, user, vel, acc, ovl, epos, blendT, flag, offset_pos);
37    robot.PointsOffsetDisable();
38}