9. Odtwarzanie trajektorii robota
9.1. Ustawianie parametrów rejestracji trajektorii TPD
1/**
2* @brief Ustawianie parametrów rejestracji trajektorii TPD
3* @param [in] type Typ rejestrowanych danych, 1-pozycja przegubów
4* @param [in] name Nazwa pliku trajektorii
5* @param [in] period_ms Okres próbkowania danych, stałe wartości 2ms, 4ms lub 8ms
6* @param [in] di_choose Wybór DI, bit0~bit7 odpowiadają DI0~DI7 skrzynki kontrolnej, bit8~bit9 odpowiadają DI0~DI1 końcówki, 0-nie wybieraj, 1-wybierz
7* @param [in] do_choose Wybór DO, bit0~bit7 odpowiadają DO0~DO7 skrzynki kontrolnej, bit8~bit9 odpowiadają DO0~DO1 końcówki, 0-nie wybieraj, 1-wybierz
8* @return Kod błędu
9*/
10int SetTPDParam(int type, String name, int period_ms, int di_choose, int do_choose);
9.2. Rozpoczęcie rejestracji trajektorii TPD
1/**
2* @brief Rozpoczęcie rejestracji trajektorii TPD
3* @param [in] type Typ rejestrowanych danych, 1-pozycja przegubów
4* @param [in] name Nazwa pliku trajektorii
5* @param [in] period_ms Okres próbkowania danych, stałe wartości 2ms, 4ms lub 8ms
6* @param [in] di_choose Wybór DI, bit0~bit7 odpowiadają DI0~DI7 skrzynki kontrolnej, bit8~bit9 odpowiadają DI0~DI1 końcówki, 0-nie wybieraj, 1-wybierz
7* @param [in] do_choose Wybór DO, bit0~bit7 odpowiadają DO0~DO7 skrzynki kontrolnej, bit8~bit9 odpowiadają DO0~DO1 końcówki, 0-nie wybieraj, 1-wybierz
8* @return Kod błędu
9*/
10int SetTPDStart(int type, String name, int period_ms, int di_choose, int do_choose);
9.3. Zatrzymanie rejestracji trajektorii TPD
1/**
2* @brief Zatrzymanie rejestracji trajektorii TPD
3* @return Kod błędu
4*/
5int SetWebTPDStop();
9.4. Usunięcie zarejestrowanej trajektorii TPD
1/**
2* @brief Usunięcie zarejestrowanej trajektorii TPD
3* @param [in] name Nazwa pliku trajektorii
4* @return Kod błędu
5*/
6int SetTPDDelete(string name);
9.5. Wstępne ładowanie trajektorii TPD
1/**
2* @brief Wstępne ładowanie trajektorii
3* @param [in] name Nazwa pliku trajektorii
4* @return Kod błędu
5*/
6int LoadTPD(String name);
9.6. Odtwarzanie trajektorii TPD
1/**
2* @brief Odtwarzanie trajektorii
3* @param [in] name Nazwa pliku trajektorii
4* @param [in] blend 0-bez wygładzania, 1-wygładzanie
5* @param [in] ovl Procent skalowania prędkości, zakres [0~100]
6* @return Kod błędu
7*/
8int MoveTPD(String name, int blend, double ovl);
9.7. Pobieranie początkowej pozy trajektorii TPD
1/**
2* @brief Pobieranie początkowej pozy trajektorii
3* @param [in] name Nazwa pliku trajektorii, bez rozszerzenia pliku
4* @param [out] desc_pose Pobrana początkowa poza trajektorii
5* @return Kod błędu
6*/
7int GetTPDStartPose(String name, DescPose desc_pose);
9.8. Przykład kodu rejestracji trajektorii TPD robota
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. Wstępne przetwarzanie trajektorii
1/**
2* @brief Wstępne przetwarzanie zewnętrznego pliku trajektorii
3* @param [in] name Nazwa pliku trajektorii
4* @param [in] ovl Procent skalowania prędkości, zakres [0~100]
5* @param [in] opt 1-punkt kontrolny, domyślnie 1
6* @return Kod błędu
7*/
8int LoadTrajectoryJ(String name, double ovl, int opt);
9.10. Odtwarzanie trajektorii
1/**
2* @brief Odtwarzanie zewnętrznego pliku trajektorii
3* @return Kod błędu
4*/
5int MoveTrajectoryJ();
9.11. Pobieranie początkowej pozy trajektorii
1/**
2* @brief Pobieranie początkowej pozy trajektorii
3* @param [in] name Nazwa pliku trajektorii
4* @param [out] desc_pose Pobrana początkowa poza trajektorii
5* @return Kod błędu
6*/
7int GetTrajectoryStartPose(String name, DescPose desc_pose);
9.12. Pobieranie numeru punktu trajektorii
1/**
2* @brief Pobieranie numeru punktu trajektorii
3* @return Kod błędu
4*/
5public int GetTrajectoryPointNum(int pnum)
9.13. Ustawianie prędkości podczas odtwarzania trajektorii
1/*
2* @brief Ustawianie prędkości podczas odtwarzania trajektorii
3* @param ovl Procent prędkości
4* @param mode Tryb; 0-tryb zmniejszania prędkości; 1-bezpośrednie przełączanie
5* @return Kod błędu
6*/
7public int SetTrajectoryJSpeed(double ovl, int mode)
9.14. Ustawianie siły i momentu obrotowego podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie siły i momentu obrotowego podczas odtwarzania trajektorii
3* @param [in] ft Siły w trzech kierunkach i momenty obrotowe, jednostka N i Nm
4* @return Kod błędu
5*/
6public int SetTrajectoryJForceTorque(ForceTorque ft)
9.15. Ustawianie siły w kierunku X podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie siły w kierunku X podczas odtwarzania trajektorii
3* @param [in] fx Siła w kierunku X, jednostka N
4* @return Kod błędu
5*/
6int SetTrajectoryJForceFx(double fx);
9.16. Ustawianie siły w kierunku Y podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie siły w kierunku Y podczas odtwarzania trajektorii
3* @param [in] fy Siła w kierunku Y, jednostka N
4* @return Kod błędu
5*/
6int SetTrajectoryJForceFy(double fy);
9.17. Ustawianie siły w kierunku Z podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie siły w kierunku Z podczas odtwarzania trajektorii
3* @param [in] fz Siła w kierunku Z, jednostka N
4* @return Kod błędu
5*/
6int SetTrajectoryJForceFz(double fz);
9.18. Ustawianie momentu obrotowego wokół osi X podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie momentu obrotowego wokół osi X podczas odtwarzania trajektorii
3* @param [in] tx Moment obrotowy wokół osi X, jednostka Nm
4* @return Kod błędu
5*/
6int SetTrajectoryJTorqueTx(double tx);
9.19. Ustawianie momentu obrotowego wokół osi Y podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie momentu obrotowego wokół osi Y podczas odtwarzania trajektorii
3* @param [in] ty Moment obrotowy wokół osi Y, jednostka Nm
4* @return Kod błędu
5*/
6int SetTrajectoryJTorqueTy(double ty);
9.20. Ustawianie momentu obrotowego wokół osi Z podczas odtwarzania trajektorii
1/**
2* @brief Ustawianie momentu obrotowego wokół osi Z podczas odtwarzania trajektorii
3* @param [in] tz Moment obrotowy wokół osi Z, jednostka Nm
4* @return Kod błędu
5*/
6int SetTrajectoryJTorqueTz(double tz);
9.21. Przesyłanie pliku trajektorii J
1/**
2* @brief Przesyłanie pliku trajektorii J
3* @param [in] filePath Pełna ścieżka przesyłanego pliku trajektorii C://test/testJ.txt
4* @return Kod błędu
5*/
6int TrajectoryJUpLoad(String filePath);
9.22. Usuwanie pliku trajektorii J
1/**
2* @brief Usuwanie pliku trajektorii J
3* @param [in] fileName Nazwa pliku testJ.txt
4* @return Kod błędu
5*/
6int TrajectoryJDelete(String fileName);
9.23. Przykład kodu odtwarzania pliku trajektorii J robota
1public static int TestTraj(Robot robot)
2{
3 int rtn = robot.TrajectoryJUpLoad("D://zUP/horse.txt");
4 System.out.println("Upload TrajectoryJ A :"+ rtn);
5
6 String traj_file_name = "horse.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
16 ExaxisPos epos=new ExaxisPos(0,0,0,0);
17 DescPose po=new DescPose(0,0,0,0,0,0);
18 robot.SetSpeed(50);
19 robot.MoveCart(traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
20
21 int traj_num = 0;
22 rtn = robot.GetTrajectoryPointNum(traj_num);
23
24 rtn = robot.SetTrajectoryJSpeed(50.0);
25 System.out.println("SetTrajectoryJSpeed is:"+ rtn);
26
27 ForceTorque traj_force=new ForceTorque(0,0,0,0,0,0);
28 traj_force.fx = 10;
29 rtn = robot.SetTrajectoryJForceTorque(traj_force);
30 System.out.println("SetTrajectoryJForceTorque rtn is: "+ rtn);
31
32 rtn = robot.SetTrajectoryJForceFx(10.0);
33 System.out.println("SetTrajectoryJForceFx rtn is:"+ rtn);
34
35 rtn = robot.SetTrajectoryJForceFy(0.0);
36 System.out.println("SetTrajectoryJForceFy rtn is:"+ rtn);
37
38 rtn = robot.SetTrajectoryJForceFz(0.0);
39 System.out.println("SetTrajectoryJForceFz rtn is: "+ rtn);
40
41 rtn = robot.SetTrajectoryJTorqueTx(10.0);
42 System.out.println("SetTrajectoryJTorqueTx rtn is: "+ rtn);
43
44 rtn = robot.SetTrajectoryJTorqueTy(10.0);
45 System.out.println("SetTrajectoryJTorqueTy rtn is:"+ rtn);
46
47 rtn = robot.SetTrajectoryJTorqueTz(10.0);
48 System.out.println("SetTrajectoryJTorqueTz rtn is:"+ rtn);
49
50 rtn = robot.MoveTrajectoryJ();
51 System.out.println("MoveTrajectoryJ rtn is: "+ rtn);
52
53 return 0;
54}
9.24. Przykład kodu ustawiania prędkości podczas odtwarzania trajektorii robota
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/horse.txt");
7 System.out.printf("Upload TrajectoryJ A %d%n", rtn);
8 String trajFileName = "horse.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. Wstępne przetwarzanie trajektorii (Look-Ahead)
Nowe w wersji Java: SDK-v1.0.3-3.8.0
1/**
2* @brief Wstępne przetwarzanie trajektorii (Look-Ahead)
3* @param [in] name Nazwa pliku trajektorii
4* @param [in] mode Tryb próbkowania, 0-bez próbkowania; 1-równomierne próbkowanie odstępów danych; 2-próbkowanie z ograniczeniem błędu
5* @param [in] errorLim Ograniczenie błędu, obowiązuje przy użyciu aproksymacji liniowej
6* @param [in] type Sposób wygładzania, 0-wygładzanie Beziera
7* @param [in] precision Dokładność wygładzania, obowiązuje przy użyciu wygładzania Beziera
8* @param [in] vamx Ustawiona maksymalna prędkość, mm/s
9* @param [in] amax Ustawione maksymalne przyspieszenie, mm/s2
10* @param [in] jmax Ustawione maksymalne zryw, mm/s3
11* @return Kod błędu
12*/
13int LoadTrajectoryLA(String name, int mode, double errorLim, int type, double precision, double vamx, double amax, double jmax);
9.26. Odtwarzanie trajektorii (Look-Ahead)
Nowe w wersji Java: SDK-v1.0.3-3.8.0
1/**
2* @brief Odtwarzanie trajektorii (Look-Ahead)
3* @return Kod błędu
4*/
5int MoveTrajectoryLA();
9.27. Przykład kodu odtwarzania trajektorii (Look-Ahead)
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. Ruch do punktu początkowego rejestracji trajektorii TPD
1/**
2* @brief Ruch do punktu początkowego rejestracji trajektorii TPD
3* @param name Nazwa pliku trajektorii
4* @param moveType Typ ruchu; 0-PTP; 1-LIN
5* @param ovl Procent skalowania prędkości, zakres [0~100]
6* @return Kod błędu
7*/
8public int MoveToTPDStart(string name, int moveType, double ovl)
9.29. Przykład kodu SDK ruchu do punktu początkowego rejestracji trajektorii TPD
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}