9. Roboter-Trajektorienreproduktion
9.1. TPD-Trajektorienaufzeichnungsparameter einstellen
1/**
2* @brief Stellt die Parameter für die TPD-Trajektorienaufzeichnung ein.
3* @param [in] type Aufzuzeichnender Datentyp, 1-Gelenkpositionen.
4* @param [in] name Name der Trajektoriendatei.
5* @param [in] period_ms Datenabtastperiode, feste Werte: 2ms, 4ms oder 8ms.
6* @param [in] di_choose DI-Auswahl, Bits 0-7 für Steuerschrank DI0-DI7, Bits 8-9 für Endeffektor DI0-DI1. 0-nicht ausgewählt, 1-ausgewählt.
7* @param [in] do_choose DO-Auswahl, Bits 0-7 für Steuerschrank DO0-DO7, Bits 8-9 für Endeffektor DO0-DO1. 0-nicht ausgewählt, 1-ausgewählt.
8* @return Fehlercode.
9*/
10int SetTPDParam(int type, string name, int period_ms, UInt16 di_choose, UInt16 do_choose);
9.2. TPD-Trajektorienaufzeichnung starten
1/**
2* @brief Startet die TPD-Trajektorienaufzeichnung.
3* @param [in] type Aufzuzeichnender Datentyp, 1-Gelenkpositionen.
4* @param [in] name Name der Trajektoriendatei.
5* @param [in] period_ms Datenabtastperiode, feste Werte: 2ms, 4ms oder 8ms.
6* @param [in] di_choose DI-Auswahl, Bits 0-7 für Steuerschrank DI0-DI7, Bits 8-9 für Endeffektor DI0-DI1. 0-nicht ausgewählt, 1-ausgewählt.
7* @param [in] do_choose DO-Auswahl, Bits 0-7 für Steuerschrank DO0-DO7, Bits 8-9 für Endeffektor DO0-DO1. 0-nicht ausgewählt, 1-ausgewählt.
8* @return Fehlercode.
9*/
10int SetTPDStart(int type, string name, int period_ms, UInt16 di_choose, UInt16 do_choose);
9.3. TPD-Trajektorienaufzeichnung stoppen
1/**
2* @brief Stoppt die TPD-Trajektorienaufzeichnung.
3* @return Fehlercode.
4*/
5int SetWebTPDStop();
9.4. TPD-Trajektorienaufzeichnung löschen
1/**
2* @brief Löscht eine TPD-Trajektorienaufzeichnung.
3* @param [in] name Name der Trajektoriendatei.
4* @return Fehlercode.
5*/
6int SetTPDDelete(string name);
9.5. TPD-Trajektorie vorladen
1/**
2* @brief Lädt eine Trajektorie vor.
3* @param [in] name Name der Trajektoriendatei.
4* @return Fehlercode.
5*/
6int LoadTPD(string name);
9.6. Startpose einer TPD-Trajektorie abrufen
1/**
2* @brief Gibt die Startpose einer Trajektorie zurück.
3* @param [in] name Name der Trajektoriendatei.
4* @param [out] desc_pose Startpose der Trajektorie.
5* @return Fehlercode.
6*/
7int GetTPDStartPose(string name, ref DescPose desc_pose);
9.7. TPD-Trajektorie reproduzieren
1/**
2* @brief Reproduziert eine Trajektorie.
3* @param [in] name Name der Trajektoriendatei.
4* @param [in] blend 0-nicht glätten, 1-glätten.
5* @param [in] ovl Geschwindigkeitsskalierungsprozentsatz, Bereich [0~100].
6* @return Fehlercode.
7*/
8int MoveTPD(string name, byte blend, float ovl);
9.8. Codebeispiel für Roboter-TPD-Trajektorienaufzeichnung
1private void btnTPDMove_Click(object sender, EventArgs e)
2{
3 int type = 1;
4 string name = "tpd2025";
5 int period_ms = 4;
6 ushort di_choose = 0;
7 ushort do_choose = 0;
8
9 robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
10
11 robot.Mode(1);
12 Thread.Sleep(1000);
13 robot.DragTeachSwitch(1);
14 robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
15 Thread.Sleep(10000);
16 robot.SetWebTPDStop();
17 robot.DragTeachSwitch(0);
18
19 float ovl = 100.0f;
20 byte blend = 0;
21
22 DescPose start_pose = new DescPose();
23
24 int rtn = robot.LoadTPD(name);
25 Console.WriteLine("LoadTPD rtn is: {0}\n", rtn);
26
27 robot.GetTPDStartPose(name, ref start_pose);
28 Console.WriteLine("start pose, xyz is: {0} {1} {2}. rpy is: {3} {4} {5} \n",
29 start_pose.tran.x, start_pose.tran.y, start_pose.tran.z,
30 start_pose.rpy.rx, start_pose.rpy.ry, start_pose.rpy.rz);
31 robot.MoveCart(start_pose, 0, 0, 100, 100, ovl, -1, -1);
32 Thread.Sleep(1000);
33
34 rtn = robot.MoveTPD(name, blend, ovl);
35 Console.WriteLine("MoveTPD rtn is: {0}\n", rtn);
36 Thread.Sleep(5000);
37
38 robot.SetTPDDelete(name);
39}
9.9. Externe Trajektoriendatei vorverarbeiten
1/**
2* @brief Vorverarbeitung einer externen Trajektoriendatei (TrajectoryJ).
3* @param [in] name Name der Trajektoriendatei.
4* @param [in] ovl Geschwindigkeitsskalierungsprozentsatz, Bereich [0~100].
5* @param [in] opt 1-Kontrollpunkte, Standard 1.
6* @return Fehlercode.
7*/
8int LoadTrajectoryJ(string name, float ovl, int opt);
9.10. Externe Trajektoriendatei reproduzieren
1/**
2* @brief Reproduziert eine externe Trajektoriendatei (TrajectoryJ).
3* @return Fehlercode.
4*/
5int MoveTrajectoryJ();
9.11. Startpose einer Trajektoriendatei abrufen
1/**
2* @brief Gibt die Startpose einer Trajektoriendatei zurück.
3* @param [in] name Name der Trajektoriendatei.
4* @param [out] desc_pose Startpose der Trajektorie.
5* @return Fehlercode.
6*/
7int GetTrajectoryStartPose(string name, ref DescPose desc_pose);
9.12. Punktnummer einer Trajektoriendatei abrufen
1/**
2* @brief Gibt die Nummer des Trajektorienpunkts zurück.
3* @param [out] pnum Trajektorienpunktnummer.
4* @return Fehlercode.
5*/
6int GetTrajectoryPointNum(ref int pnum);
9.13. Geschwindigkeit für die Trajektorienreproduktion einstellen
1/**
2* @brief Stellt die Geschwindigkeit für die Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] ovl Geschwindigkeitsprozentsatz.
4* @return Fehlercode.
5*/
6int SetTrajectoryJSpeed(double ovl);
9.14. Kraft und Drehmoment während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt die Kraft und das Drehmoment während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] ft Kräfte und Drehmomente in drei Richtungen, Einheiten N und Nm.
4* @return Fehlercode.
5*/
6int SetTrajectoryJForceTorque(ForceTorque ft);
9.15. Kraft in x-Richtung während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt die Kraft in x-Richtung während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] fx Kraft in x-Richtung, Einheit N.
4* @return Fehlercode.
5*/
6int SetTrajectoryJForceFx(double fx);
9.16. Kraft in y-Richtung während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt die Kraft in y-Richtung während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] fy Kraft in y-Richtung, Einheit N.
4* @return Fehlercode.
5*/
6int SetTrajectoryJForceFy(double fy);
9.17. Kraft in z-Richtung während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt die Kraft in z-Richtung während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] fz Kraft in z-Richtung, Einheit N.
4* @return Fehlercode.
5*/
6int SetTrajectoryJForceFz(double fz);
9.18. Drehmoment um die x-Achse während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt das Drehmoment um die x-Achse während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] tx Drehmoment um die x-Achse, Einheit Nm.
4* @return Fehlercode.
5*/
6int SetTrajectoryJTorqueTx(double tx);
9.19. Drehmoment um die y-Achse während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt das Drehmoment um die y-Achse während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] ty Drehmoment um die y-Achse, Einheit Nm.
4* @return Fehlercode.
5*/
6int SetTrajectoryJTorqueTy(double ty);
9.20. Drehmoment um die z-Achse während der Trajektorienreproduktion einstellen
1/**
2* @brief Stellt das Drehmoment um die z-Achse während der Trajektorienreproduktion ein (TrajectoryJ).
3* @param [in] tz Drehmoment um die z-Achse, Einheit Nm.
4* @return Fehlercode.
5*/
6int SetTrajectoryJTorqueTz(double tz);
9.21. TrajectoryJ-Datei hochladen
1/**
2* @brief Lädt eine TrajectoryJ-Datei hoch.
3* @param [in] filePath Vollständiger Pfad zur hochzuladenden Trajektoriendatei, z.B. C://test/testJ.txt.
4* @return Fehlercode.
5*/
6int TrajectoryJUpLoad(string filePath);
9.22. TrajectoryJ-Datei löschen
1/**
2* @brief Löscht eine TrajectoryJ-Datei.
3* @param [in] fileName Dateiname, z.B. testJ.txt.
4* @return Fehlercode.
5*/
6int TrajectoryJDelete(string fileName);
9.23. Codebeispiel für Roboter-TrajectoryJ-Reproduktion
1private void button33_Click(object sender, EventArgs e)
2{
3 int rtn = robot.TrajectoryJUpLoad("D://zUP/spray_traj1.txt");
4 Console.WriteLine("Upload TrajectoryJ A {0}\n", rtn);
5
6 string traj_file_name = "/fruser/traj/spray_traj1.txt";
7 rtn = robot.LoadTrajectoryJ(traj_file_name, 100, 1);
8 Console.WriteLine("LoadTrajectoryJ {0}, rtn is: {1}\n", traj_file_name, rtn);
9
10 DescPose traj_start_pose = new DescPose();
11 rtn = robot.GetTrajectoryStartPose(traj_file_name, ref traj_start_pose);
12 Console.WriteLine("GetTrajectoryStartPose is: {0}\n", rtn);
13 Console.WriteLine("desc_pos:{0},{1},{2},{3},{4},{5}\n",
14 traj_start_pose.tran.x, traj_start_pose.tran.y, traj_start_pose.tran.z,
15 traj_start_pose.rpy.rx, traj_start_pose.rpy.ry, traj_start_pose.rpy.rz);
16
17 Thread.Sleep(1000);
18
19 robot.SetSpeed(50);
20 robot.MoveCart(traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
21
22 int traj_num = 0;
23 rtn = robot.GetTrajectoryPointNum(ref traj_num);
24 Console.WriteLine("GetTrajectoryStartPose rtn is: {0}, traj num is: {1}\n", rtn, traj_num);
25
26 rtn = robot.SetTrajectoryJSpeed(50.0f);
27 Console.WriteLine("SetTrajectoryJSpeed is: {0}\n", rtn);
28
29 ForceTorque traj_force = new ForceTorque();
30 traj_force.fx = 10;
31 rtn = robot.SetTrajectoryJForceTorque(traj_force);
32 Console.WriteLine("SetTrajectoryJForceTorque rtn is: {0}\n", rtn);
33
34 rtn = robot.SetTrajectoryJForceFx(10.0f);
35 Console.WriteLine("SetTrajectoryJForceFx rtn is: {0}\n", rtn);
36
37 rtn = robot.SetTrajectoryJForceFy(0.0f);
38 Console.WriteLine("SetTrajectoryJForceFy rtn is: {0}\n", rtn);
39
40 rtn = robot.SetTrajectoryJForceFz(0.0f);
41 Console.WriteLine("SetTrajectoryJForceFz rtn is: {0}\n", rtn);
42
43 rtn = robot.SetTrajectoryJTorqueTx(10.0f);
44 Console.WriteLine("SetTrajectoryJTorqueTx rtn is: {0}\n", rtn);
45
46 rtn = robot.SetTrajectoryJTorqueTy(10.0f);
47 Console.WriteLine("SetTrajectoryJTorqueTy rtn is: {0}\n", rtn);
48
49 rtn = robot.SetTrajectoryJTorqueTz(10.0f);
50 Console.WriteLine("SetTrajectoryJTorqueTz rtn is: {0}\n", rtn);
51
52 rtn = robot.MoveTrajectoryJ();
53 Console.WriteLine("MoveTrajectoryJ rtn is: {0}\n", rtn);
54}
9.24. Trajektorienvorverarbeitung (Trajektorienvorausschau)
1/**
2* @brief Trajektorienvorverarbeitung (Trajektorienvorausschau).
3* @param [in] name Name der Trajektoriendatei.
4* @param [in] mode Abtastmodus, 0-keine Abtastung; 1-Abtastung in gleichen Datenabständen; 2-Abtastung mit Fehlerbegrenzung.
5* @param [in] errorLim Fehlergrenze, wirksam bei Verwendung von linearer Approximation.
6* @param [in] type Glättungsart, 0-Bézier-Glättung.
7* @param [in] precision Glättungsgenauigkeit, wirksam bei Verwendung von Bézier-Glättung.
8* @param [in] vmax Eingestellte maximale Geschwindigkeit, mm/s.
9* @param [in] amax Eingestellte maximale Beschleunigung, mm/s².
10* @param [in] jmax Eingestellte maximale Ruck (Jerk), mm/s³.
11* @return Fehlercode.
12*/
13int LoadTrajectoryLA(string name, int mode, double errorLim, int type, double precision, double vmax, double amax, double jmax);
9.25. Trajektorienreproduktion (Trajektorienvorausschau)
1/**
2* @brief Trajektorienreproduktion (Trajektorienvorausschau).
3* @return Fehlercode.
4*/
5int MoveTrajectoryLA();
9.26. Codebeispiel für Trajektorienreproduktion (Trajektorienvorausschau)
1private void button8_Click(object sender, EventArgs e)
2{
3 int rtn = 0;
4
5 string nameA = "/fruser/traj/A.txt";
6 string nameB = "/fruser/traj/B.txt";
7
8 rtn = robot.LoadTrajectoryLA(nameB, 0, 0, 0, 1, 100.0, 100.0, 1000.0); // Lineare Approximation
9 Console.WriteLine($"LoadTrajectoryLA rtn is {rtn}");
10
11 DescPose startPos = new DescPose(0, 0, 0, 0, 0, 0);
12 robot.GetTrajectoryStartPose(nameA, ref startPos);
13
14 robot.MoveCart(startPos, 1, 0, (float)100.0, (float)100.0, (float)100.0, -1, -1);
15
16 rtn = robot.MoveTrajectoryLA();
17 Console.WriteLine($"MoveTrajectoryLA rtn is {rtn}");
18}