8. 机器人轨迹复现

8.1. 设置轨迹记录参数

 1/**
 2* @brief  设置轨迹记录参数
 3* @param  [in] type  记录数据类型,1-关节位置
 4* @param  [in] name  轨迹文件名
 5* @param  [in] period_ms  数据采样周期,固定值2ms或4ms或8ms
 6* @param  [in] di_choose  DI选择,bit0~bit7对应控制箱DI0~DI7,bit8~bit9对应末端DI0~DI1,0-不选择,1-选择
 7* @param  [in] do_choose  DO选择,bit0~bit7对应控制箱DO0~DO7,bit8~bit9对应末端DO0~DO1,0-不选择,1-选择
 8* @return  错误码
 9*/
10int SetTPDParam(int type, string name, int period_ms, UInt16 di_choose, UInt16 do_choose);

8.2. 开始轨迹记录

 1/**
 2* @brief  开始轨迹记录
 3* @param  [in] type  记录数据类型,1-关节位置
 4* @param  [in] name  轨迹文件名
 5* @param  [in] period_ms  数据采样周期,固定值2ms或4ms或8ms
 6* @param  [in] di_choose  DI选择,bit0~bit7对应控制箱DI0~DI7,bit8~bit9对应末端DI0~DI1,0-不选择,1-选择
 7* @param  [in] do_choose  DO选择,bit0~bit7对应控制箱DO0~DO7,bit8~bit9对应末端DO0~DO1,0-不选择,1-选择
 8* @return  错误码
 9*/
10int SetTPDStart(int type, string name, int period_ms, UInt16 di_choose, UInt16 do_choose);

8.3. 停止轨迹记录

1/**
2* @brief  停止轨迹记录
3* @return  错误码
4*/
5int SetWebTPDStop();

8.4. 删除轨迹记录

1/**
2* @brief  删除轨迹记录
3* @param  [in] name  轨迹文件名
4* @return  错误码
5*/
6int SetTPDDelete(string name);

8.5. 代码示例

 1private void btnTCPRecord_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    int type = 1;
 7    string name = "tpd2023";
 8    int period_ms = 2;
 9    UInt16 di_choose = 0;
10    UInt16 do_choose = 0;
11
12    robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
13
14    robot.Mode(1);
15    Thread.Sleep(1000);
16    robot.DragTeachSwitch(1);
17    robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
18    Thread.Sleep(10000);
19    robot.SetWebTPDStop();
20    robot.DragTeachSwitch(0);
21
22    //robot.SetTPDDelete(name);
23}

8.6. 轨迹预加载

1/**
2* @brief  轨迹预加载
3* @param  [in] name  轨迹文件名
4* @return  错误码
5*/
6int LoadTPD(string name);

8.7. 获取轨迹起始位姿

1/**
2* @brief 获取轨迹起始位姿
3* @param [in] name  轨迹文件名
4* @param [out] desc_pose 轨迹起始位姿
5* @return 错误码
6*/
7int GetTPDStartPose(string name, ref DescPose desc_pose);

8.8. 轨迹复现

1/**
2* @brief  轨迹复现
3* @param  [in] name  轨迹文件名
4* @param  [in] blend 0-不平滑,1-平滑
5* @param  [in] ovl  速度缩放百分比,范围[0~100]
6* @return  错误码
7*/
8int MoveTPD(string name, byte blend, float ovl);

8.9. 代码示例

 1private void btnTPDMove_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5
 6    string name = "tpd2023";
 7    int tool = 0;
 8    int user = 0;
 9    float vel = 100.0f;
10    float acc = 100.0f;
11    float ovl = 100.0f;
12    float blendT = -1.0f;
13    int config = -1;
14    byte blend = 1;
15
16    DescPose desc_pose = new DescPose();
17    robot.GetTPDStartPose(name, ref desc_pose);
18    Console.WriteLine($"GetTPDStartPose:{desc_pose.tran.x},{desc_pose.tran.y},{desc_pose.tran.z},{desc_pose.rpy.rx},{desc_pose.rpy.ry},{desc_pose.rpy.rz}");
19    robot.SetTrajectoryJSpeed(100.0f);
20
21    robot.LoadTPD(name);
22    robot.MoveCart(desc_pose, tool, user, vel, acc, ovl, blendT, config);
23    robot.MoveTPD(name, blend, 100.0f);
24}

8.10. 外部轨迹文件预处理

1/**
2* @brief 外部轨迹文件预处理
3* @param [in] name 轨迹文件名
4* @param [in] ovl 速度缩放百分比,范围[0~100]
5* @param [in] opt 1-控制点,默认为1
6* @return 错误码
7*/
8int LoadTrajectoryJ(string name, float ovl, int opt);

8.11. 外部轨迹文件轨迹复现

1/**
2* @brief 外部轨迹文件轨迹复现
3* @return 错误码
4*/
5int MoveTrajectoryJ();

8.12. 获取轨迹文件轨迹起始位置

1/**
2* @brief 获取轨迹文件轨迹起始位置
3* @param [in] name 轨迹文件名
4* @param [out] desc_pose 轨迹起始位姿
5* @return 错误码
6*/
7int GetTrajectoryStartPose(string name, ref DescPose desc_pose);

8.13. 获取轨迹文件轨迹点编号

1/**
2* @brief 获取轨迹点编号
3* @param [out] pnum 轨迹点编号
4* @return 错误码
5*/
6int GetTrajectoryPointNum(ref int pnum);

8.14. 设置轨迹文件轨迹运行速度

1/**
2* @brief 设置轨迹文件轨迹运行速度
3* @param [in] ovl 速度百分比
4* @return 错误码
5*/
6int SetTrajectoryJSpeed(double ovl);

8.15. 设置轨迹文件轨迹运行中的力和力矩

1/**
2* @brief 设置轨迹文件轨迹运行中的力和力矩
3* @param [in] ft 三个方向的力和扭矩,单位N和Nm
4* @return 错误码
5*/
6int SetTrajectoryJForceTorque(ForceTorque ft);

8.16. 设置轨迹运行中的沿x方向的力

1/**
2* @brief 设置轨迹运行中的沿x方向的力
3* @param [in] fx  沿x方向的力,单位N
4* @return 错误码
5*/
6int SetTrajectoryJForceFx(double fx);

8.17. 设置轨迹运行中的沿y方向的力

1/**
2* @brief 设置轨迹运行中的沿y方向的力
3* @param [in] fy  沿y方向的力,单位N
4* @return 错误码
5*/
6int SetTrajectoryJForceFy(double fy);

8.18. 设置轨迹运行中的沿z方向的力

1/**
2* @brief 设置轨迹运行中的沿z方向的力
3* @param [in] fz  沿z方向的力,单位N
4* @return 错误码
5*/
6int SetTrajectoryJForceFz(double fz);

8.19. 设置轨迹运行中的绕x轴的扭矩

1/**
2* @brief 设置轨迹运行中的绕x轴的扭矩
3* @param [in] tx  绕x轴的扭矩,单位Nm
4* @return 错误码
5*/
6int SetTrajectoryJTorqueTx(double tx);

8.20. 设置轨迹运行中的绕y轴的扭矩

1/**
2* @brief 设置轨迹运行中的绕y轴的扭矩
3* @param [in] ty  绕y轴的扭矩,单位Nm
4* @return 错误码
5*/
6int SetTrajectoryJTorqueTy(double ty);

8.21. 设置轨迹运行中的绕z轴的扭矩

1/**
2* @brief 设置轨迹运行中的绕z轴的扭矩
3* @param [in] tz  绕z轴的扭矩,单位Nm
4* @return 错误码
5*/
6int SetTrajectoryJTorqueTz(double tz);

8.22. 代码示例

 1private void btnTrajectory_Click(object sender, EventArgs e)
 2{
 3    Robot robot = new Robot();
 4    robot.RPC("192.168.58.2");
 5    string name = "/fruser/traj/trajHelix_aima_1.txt";
 6    int rtn = -1;
 7
 8    rtn = robot.LoadTrajectoryJ(name, 100, 1);
 9    Console.WriteLine($"LoadTrajectoryJ:{rtn}");
10
11    DescPose desc_pos2 = new DescPose(0, 0, 0, 0, 0, 0);
12    rtn = robot.GetTrajectoryStartPose(name, ref desc_pos2);
13    Console.WriteLine($"GetTrajectoryStartPose:{desc_pos2.tran.x},{desc_pos2.tran.y},{desc_pos2.tran.z},{desc_pos2.rpy.rx},{desc_pos2.rpy.ry},{desc_pos2.rpy.rz}");
14
15    int tool = 1;
16    int user = 0;
17    float vel = 100.0f;
18    float acc = 100.0f;
19    float ovl = 100.0f;
20    float blendT = -1.0f;
21    float blendT1 = 0.0f;
22    int config = -1;
23    robot.MoveCart(desc_pos2, tool, user, vel, acc, ovl, blendT, config);
24
25    rtn = robot.SetTrajectoryJSpeed(20);
26    Console.WriteLine($"SetTrajectoryJSpeed: rtn  {rtn}");
27
28    rtn = robot.MoveTrajectoryJ();
29    Console.WriteLine($"MoveTrajectoryJ:{rtn}");
30
31    int pnum = -1;
32    rtn = robot.GetTrajectoryPointNum(ref pnum);
33    Console.WriteLine($"GetTrajectoryPointNum: rtn  {rtn}    num {pnum}");
34
35    rtn = robot.SetTrajectoryJSpeed(100);
36    Console.WriteLine($"SetTrajectoryJSpeed: rtn  {rtn}");
37
38    ForceTorque ft = new ForceTorque(1, 1, 1, 1, 1, 1);
39    rtn = robot.SetTrajectoryJForceTorque(ft);
40    Console.WriteLine($"SetTrajectoryJForceTorque: rtn  {rtn}");
41
42    rtn = robot.SetTrajectoryJForceFx(1.0);
43    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
44    rtn = robot.SetTrajectoryJForceFy(1.0);
45    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
46    rtn = robot.SetTrajectoryJForceFz(1.0);
47    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
48    rtn = robot.SetTrajectoryJTorqueTx(1.0);
49    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
50    rtn = robot.SetTrajectoryJTorqueTy(1.0);
51    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
52    rtn = robot.SetTrajectoryJTorqueTz(1.0);
53    Console.WriteLine($"SetTrajectoryJForceFx: rtn  {rtn}");
54}