9. Robot trajectory playback

9.1. Set TPD trajectory recording parameters

 1/**
 2* @brief  Set TPD trajectory recording parameters
 3* @param  [in] type  Recording data type, 1-Joint position
 4* @param  [in] name  Trajectory file name
 5* @param  [in] period_ms  Data sampling period, fixed value 2ms/4ms/8ms
 6* @param  [in] di_choose  DI selection, bit0~bit7 correspond to controller DI0~DI7, bit8~bit9 correspond to end DI0~DI1, 0-Not selected, 1-Selected
 7* @param  [in] do_choose  DO selection, bit0~bit7 correspond to controller DO0~DO7, bit8~bit9 correspond to end DO0~DO1, 0-Not selected, 1-Selected
 8* @return  Error code
 9*/
10int SetTPDParam(int type, String name, int period_ms, int di_choose, int do_choose);

9.2. Start TPD trajectory recording

 1/**
 2* @brief  Start TPD trajectory recording
 3* @param  [in] type  Recording data type, 1-Joint position
 4* @param  [in] name  Trajectory file name
 5* @param  [in] period_ms  Data sampling period, fixed value 2ms/4ms/8ms
 6* @param  [in] di_choose  DI selection, bit0~bit7 correspond to controller DI0~DI7, bit8~bit9 correspond to end DI0~DI1, 0-Not selected, 1-Selected
 7* @param  [in] do_choose  DO selection, bit0~bit7 correspond to controller DO0~DO7, bit8~bit9 correspond to end DO0~DO1, 0-Not selected, 1-Selected
 8* @return  Error code
 9*/
10int SetTPDStart(int type, String name, int period_ms, int di_choose, int do_choose);

9.3. Stop TPD trajectory recording

1/**
2* @brief  Stop TPD trajectory recording
3* @return  Error code
4*/
5int SetWebTPDStop();

9.4. Delete TPD trajectory recording

1/**
2* @brief  Delete TPD trajectory recording
3* @param  [in] name  Trajectory file name
4* @return  Error code
5*/
6int SetTPDDelete(string name);

9.5. TPD trajectory preloading

1/**
2* @brief  Trajectory preloading
3* @param  [in] name  Trajectory file name
4* @return  Error code
5*/
6int LoadTPD(String name);

9.6. TPD trajectory playback

1/**
2* @brief  Trajectory playback
3* @param  [in] name  Trajectory file name
4* @param  [in] blend 0-No smoothing, 1-Smoothing
5* @param  [in] ovl  Speed scaling percentage, range [0~100]
6* @return  Error code
7*/
8int MoveTPD(String name, int blend, double ovl);

9.7. Get TPD starting pose

1/**
2* @brief Get trajectory starting pose
3* @param [in] name  Trajectory file name (without extension)
4* @param [out] desc_pose  Retrieved trajectory starting pose
5* @return Error code
6*/
7int GetTPDStartPose(String name, DescPose desc_pose);

9.8. Robot TPD trajectory recording code example

 1public static int TestTPD(Robot robot)
 2{
 3    int type = 1;
 4    String name = "tpd2025";
 5    int period_ms = 4;
 6    int di_choose = 0;
 7    int do_choose = 0;
 8
 9    robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
10
11    robot.Mode(1);
12    robot.Sleep(1000);
13    robot.DragTeachSwitch(1);
14    robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
15    robot.Sleep(10000);
16    robot.SetWebTPDStop();
17    robot.DragTeachSwitch(0);
18
19    double ovl = 100.0;
20    int blend = 0;
21
22    DescPose start_pose =new DescPose() {};
23
24    int rtn = robot.LoadTPD(name);
25    System.out.println("LoadTPD rtn is:"+ rtn);
26
27    robot.GetTPDStartPose(name, start_pose);
28    robot.MoveCart(start_pose, 0, 0, 100, 100, ovl, -1, -1);
29    robot.Sleep(1000);
30
31    rtn = robot.MoveTPD(name, blend, ovl);
32    System.out.println("MoveTPD rtn is: "+ rtn);
33    robot.Sleep(5000);
34
35    robot.SetTPDDelete(name);
36    return 0;
37}

9.9. Trajectory preprocessing

1/**
2* @brief External trajectory file preprocessing
3* @param [in] name Trajectory file name
4* @param [in] ovl Speed scaling percentage, range [0~100]
5* @param [in] opt 1-Control point (default)
6* @return Error code
7*/
8int LoadTrajectoryJ(String name, double ovl, int opt);

9.10. Trajectory playback

1/**
2* @brief External trajectory file playback
3* @return Error code
4*/
5int MoveTrajectoryJ();

9.11. Get trajectory starting pose

1/**
2* @brief Get trajectory starting pose
3* @param [in] name Trajectory file name
4* @param [out] desc_pose Retrieved trajectory starting pose
5* @return Error code
6*/
7int GetTrajectoryStartPose(String name, DescPose desc_pose);

9.12. Get trajectory point number

1/**
2* @brief  Get trajectory point number
3* @return  Error code
4*/
5public int GetTrajectoryPointNum(int pnum)

9.13. Set trajectory playback speed

1/*
2* @brief  Set trajectory playback speed
3* @param  ovl Speed percentage
4* @param  mode Mode; 0-decruise mode; 1-direct switching
5* @return  Error code
6*/
7public int SetTrajectoryJSpeed(double ovl, int mode)

9.14. Set force/torque during trajectory playback

1/**
2* @brief  Set force/torque during trajectory playback
3* @param  [in] ft Force and torque in three directions (unit: N and Nm)
4* @return  Error code
5*/
6public int SetTrajectoryJForceTorque(ForceTorque ft)

9.15. Set x-direction force during trajectory playback

1/**
2* @brief Set x-direction force during trajectory playback
3* @param [in] fx x-direction force (unit: N)
4* @return Error code
5*/
6int SetTrajectoryJForceFx(double fx);

9.16. Set y-direction force during trajectory playback

1/**
2* @brief Set y-direction force during trajectory playback
3* @param [in] fy y-direction force (unit: N)
4* @return Error code
5*/
6int SetTrajectoryJForceFy(double fy);

9.17. Set z-direction force during trajectory playback

1/**
2* @brief Set z-direction force during trajectory playback
3* @param [in] fz z-direction force (unit: N)
4* @return Error code
5*/
6int SetTrajectoryJForceFz(double fz);

9.18. Set x-axis torque during trajectory playback

1/**
2* @brief Set x-axis torque during trajectory playback
3* @param [in] tx x-axis torque (unit: Nm)
4* @return Error code
5*/
6int SetTrajectoryJTorqueTx(double tx);

9.19. Set y-axis torque during trajectory playback

1/**
2* @brief Set y-axis torque during trajectory playback
3* @param [in] ty y-axis torque (unit: Nm)
4* @return Error code
5*/
6int SetTrajectoryJTorqueTy(double ty);

9.20. Set z-axis torque during trajectory playback

1/**
2* @brief Set z-axis torque during trajectory playback
3* @param [in] tz z-axis torque (unit: Nm)
4* @return Error code
5*/
6int SetTrajectoryJTorqueTz(double tz);

9.21. Upload trajectory J file

1/**
2* @brief Upload trajectory J file
3* @param [in] filePath Full path of trajectory file (e.g., C://test/testJ.txt)
4* @return Error code
5*/
6int TrajectoryJUpLoad(String filePath);

9.22. Delete trajectory J file

1/**
2* @brief Delete trajectory J file
3* @param [in] fileName File name (e.g., testJ.txt)
4* @return Error code
5*/
6int TrajectoryJDelete(String fileName);

9.23. Robot trajectory J file playback code example

 1public static int TestTraj(Robot robot)
 2{
 3    int rtn = robot.TrajectoryJUpLoad("D://zUP/traj.txt");
 4    System.out.println("Upload TrajectoryJ A :"+ rtn);
 5
 6    String traj_file_name = "/fruser/traj/traj.txt";
 7    rtn = robot.LoadTrajectoryJ(traj_file_name, 100, 1);
 8    System.out.println("LoadTrajectoryJ:"+traj_file_name+", rtn is:"+ rtn);
 9
10    DescPose traj_start_pose=new DescPose(0,0,0,0,0,0);
11    rtn = robot.GetTrajectoryStartPose(traj_file_name, traj_start_pose);
12
13    robot.Sleep(1000);
14
15    ExaxisPos epos=new ExaxisPos(0,0,0,0);
16    DescPose po=new DescPose(0,0,0,0,0,0);
17    robot.SetSpeed(50);
18    robot.MoveCart(traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
19
20    int traj_num = 0;
21    rtn = robot.GetTrajectoryPointNum(traj_num);
22
23    rtn = robot.SetTrajectoryJSpeed(50.0);
24    System.out.println("SetTrajectoryJSpeed is:"+ rtn);
25
26    ForceTorque traj_force=new ForceTorque(0,0,0,0,0,0);
27    traj_force.fx = 10;
28    rtn = robot.SetTrajectoryJForceTorque(traj_force);
29    System.out.println("SetTrajectoryJForceTorque rtn is: "+ rtn);
30
31    rtn = robot.SetTrajectoryJForceFx(10.0);
32    System.out.println("SetTrajectoryJForceFx rtn is:"+ rtn);
33
34    rtn = robot.SetTrajectoryJForceFy(0.0);
35    System.out.println("SetTrajectoryJForceFy rtn is:"+ rtn);
36
37    rtn = robot.SetTrajectoryJForceFz(0.0);
38    System.out.println("SetTrajectoryJForceFz rtn is: "+ rtn);
39
40    rtn = robot.SetTrajectoryJTorqueTx(10.0);
41    System.out.println("SetTrajectoryJTorqueTx rtn is: "+ rtn);
42
43    rtn = robot.SetTrajectoryJTorqueTy(10.0);
44    System.out.println("SetTrajectoryJTorqueTy rtn is:"+ rtn);
45
46    rtn = robot.SetTrajectoryJTorqueTz(10.0);
47    System.out.println("SetTrajectoryJTorqueTz rtn is:"+ rtn);
48
49    rtn = robot.MoveTrajectoryJ();
50    System.out.println("MoveTrajectoryJ rtn is: "+ rtn);
51
52    return 0;
53}

9.24. Code example for setting the speed during robot trajectory execution

 1public int TestSetTrajectoryJSpeed(Robot robot) {
 2    ROBOT_STATE_PKG pkg = new ROBOT_STATE_PKG();
 3    int rtn;
 4
 5    robot.SetReconnectParam(true, 30000, 500);
 6    rtn = robot.TrajectoryJUpLoad("D://zUP/trajHelix_aima_1.txt");
 7    System.out.printf("Upload TrajectoryJ A %d%n", rtn);
 8    String trajFileName = "/fruser/traj/trajHelix_aima_1.txt";
 9    rtn = robot.LoadTrajectoryJ(trajFileName, 100, 1);
10    System.out.printf("LoadTrajectoryJ %s, rtn is: %d%n", trajFileName, rtn);
11    DescPose trajStartPose = new DescPose();
12    rtn = robot.GetTrajectoryStartPose(trajFileName, trajStartPose);
13    System.out.printf("GetTrajectoryStartPose is: %d%n", rtn);
14    System.out.printf("desc_pos:%f,%f,%f,%f,%f,%f%n", trajStartPose.tran.x, trajStartPose.tran.y, trajStartPose.tran.z, trajStartPose.rpy.rx, trajStartPose.rpy.ry, trajStartPose.rpy.rz);
15    robot.Sleep(1000);
16    robot.SetSpeed(50);
17    robot.MoveCart(trajStartPose, 0, 0, 100, 100, 100, -1, -1);
18    rtn = robot.GetTrajectoryPointNum(0);
19    pkg = robot.GetRobotRealTimeState();
20    int trajNum = pkg.trajectory_pnum;
21    System.out.printf("GetTrajectoryPointNum rtn is: %d, traj num is: %d%n", rtn, trajNum);
22
23    rtn = robot.MoveTrajectoryJ();
24    System.out.printf("MoveTrajectoryJ rtn is: %d%n", rtn);
25
26    robot.Sleep(1000);
27
28    pkg = robot.GetRobotRealTimeState();
29    int trajspeedMode = 1;
30    while (pkg.motion_done == 0)
31    {
32        pkg = robot.GetRobotRealTimeState();
33
34        rtn = robot.SetTrajectoryJSpeed(10.0, trajspeedMode);
35        System.out.printf("SetTrajectoryJSpeed is: %d%n", rtn);
36
37        robot.Sleep(1000);
38
39        rtn = robot.SetTrajectoryJSpeed(80.0, trajspeedMode);
40        System.out.printf("SetTrajectoryJSpeed is: %d%n", rtn);
41
42        robot.Sleep(1000);
43    }
44
45    return 0;
46}

9.25. Trajectory preprocessing (lookahead)

New in version Java: SDK-v1.0.3-3.8.0

 1/**
 2* @brief Trajectory preprocessing (lookahead)
 3* @param [in] name  Trajectory file name
 4* @param [in] mode  Sampling mode: 0-No sampling; 1-Equal interval sampling; 2-Equal error limit sampling
 5* @param [in] errorLim  Error limit (effective when using linear fitting)
 6* @param [in] type  Smoothing method: 0-Bezier smoothing
 7* @param [in] precision  Smoothing precision (effective when using Bezier smoothing)
 8* @param [in] vamx  Maximum speed setting (mm/s)
 9* @param [in] amax  Maximum acceleration setting (mm/s²)
10* @param [in] jmax  Maximum jerk setting (mm/s³)
11* @return Error code
12*/
13int LoadTrajectoryLA(String name, int mode, double errorLim, int type, double precision, double vamx, double amax, double jmax);

9.26. Trajectory playback (lookahead)

New in version Java: SDK-v1.0.3-3.8.0

1/**
2* @brief Trajectory playback (lookahead)
3* @return Error code
4*/
5int MoveTrajectoryLA();

9.27. Trajectory playback (lookahead) code example

 1public static int TestLoadTrajLA(Robot robot)
 2{
 3    int rtn = robot.TrajectoryJUpLoad("D://zUP/traj.txt");
 4
 5    String traj_file_name = "/fruser/traj/traj.txt";
 6    rtn = robot.LoadTrajectoryLA(traj_file_name, 1, 2, 0, 2, 100, 200, 1000);
 7
 8    DescPose traj_start_pose=new DescPose(0,0,0,0,0,0);
 9    rtn = robot.GetTrajectoryStartPose(traj_file_name, traj_start_pose);
10
11    robot.Sleep(1000);
12    robot.SetSpeed(50);
13    robot.MoveCart(traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
14
15    rtn = robot.MoveTrajectoryLA();
16
17    robot.CloseRPC();
18    return 0;
19}

9.28. Move to TPD Trajectory Recording Start Point

1/**
2* @brief Move to TPD trajectory recording start point
3* @param name Trajectory file name
4* @param moveType Motion type; 0-PTP; 1-LIN
5* @param ovl Speed scaling percentage, range [0~100]
6* @return Error code
7*/
8public int MoveToTPDStart(string name, int moveType, double ovl)

9.29. SDK Code Example for Moving to TPD Trajectory Recording Start Point

 1public static void testTPDmove (Robot robot)
 2{
 3    int rtn = 0;
 4    int type = 1;
 5    String name = "tpd2025";
 6    int period_ms = 4;
 7    int di_choose = 0;
 8    int do_choose = 0;
 9
10    robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
11
12    robot.Mode(1);
13    robot.Sleep(1000);
14    robot.DragTeachSwitch(1);
15    robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
16    robot.Sleep(3000);
17    robot.SetWebTPDStop();
18    robot.DragTeachSwitch(0);
19
20    robot.Sleep(1000);
21    double ovl = 100.0;
22    int blend = 0;
23    DescPose start_pose = new DescPose();
24    rtn = robot.LoadTPD(name);
25    System.out.printf("LoadTPD rtn is: %d\n", rtn);
26
27    robot.GetTPDStartPose(name, start_pose);
28    System.out.printf("start pose, xyz is: %f %f %f. rpy is: %f %f %f \n", start_pose.tran.x, start_pose.tran.y, start_pose.tran.z, start_pose.rpy.rx, start_pose.rpy.ry, start_pose.rpy.rz);
29    //robot.MoveCart(&start_pose, 0, 0, 100, 100, ovl, -1, -1);
30    //robot.Sleep(1000);
31
32    rtn = robot.MoveToTPDStart(name, 0, 100);
33    System.out.printf("MoveToTPDStart rtn is: %d\n", rtn);
34
35    rtn = robot.MoveTPD(name, blend, ovl);
36    System.out.printf("MoveTPD rtn is: %d\n", rtn);
37
38    robot.Sleep(5000);
39
40    robot.SetTPDDelete(name);
41
42    return ;
43}