9. Roboter-Trajektorienwiedergabe

9.1. TPD-Trajektorienaufzeichnungsparameter einstellen

 1/**
 2* @brief TPD-Trajektorienaufzeichnungsparameter einstellen
 3* @param [in] type Datentyp für die Aufzeichnung, 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, Bit0~Bit7 für Steuerkasten DI0~DI7, Bit8~Bit9 für Endeffektor DI0~DI1, 0 - nicht ausgewählt, 1 - ausgewählt
 7* @param [in] do_choose DO-Auswahl, Bit0~Bit7 für Steuerkasten DO0~DO7, Bit8~Bit9 für Endeffektor DO0~DO1, 0 - nicht ausgewählt, 1 - ausgewählt
 8* @return Fehlercode
 9*/
10errno_t SetTPDParam(int type, char name[30], int period_ms, uint16_t di_choose, uint16_t do_choose);

9.2. TPD-Trajektorienaufzeichnung starten

 1/**
 2* @brief TPD-Trajektorienaufzeichnung starten
 3* @param [in] type Datentyp für die Aufzeichnung, 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, Bit0~Bit7 für Steuerkasten DI0~DI7, Bit8~Bit9 für Endeffektor DI0~DI1, 0 - nicht ausgewählt, 1 - ausgewählt
 7* @param [in] do_choose DO-Auswahl, Bit0~Bit7 für Steuerkasten DO0~DO7, Bit8~Bit9 für Endeffektor DO0~DO1, 0 - nicht ausgewählt, 1 - ausgewählt
 8* @return Fehlercode
 9*/
10errno_t SetTPDStart(int type, char name[30], int period_ms, uint16_t di_choose, uint16_t do_choose);

9.3. TPD-Trajektorienaufzeichnung stoppen

1/**
2* @brief TPD-Trajektorienaufzeichnung stoppen
3* @return Fehlercode
4*/
5errno_t SetWebTPDStop();

9.4. TPD-Trajektoriendatei löschen

1/**
2* @brief TPD-Trajektoriendatei löschen
3* @param [in] name Name der Trajektoriendatei
4* @return Fehlercode
5*/
6errno_t SetTPDDelete(char name[30]);

9.5. TPD-Trajektorie vorladen

1/**
2* @brief TPD-Trajektorie vorladen
3* @param [in] name Name der Trajektoriendatei
4* @return Fehlercode
5*/
6errno_t LoadTPD(char name[30]);

9.6. TPD-Trajektorie wiedergeben

1/**
2* @brief TPD-Trajektorie wiedergeben
3* @param [in] name Name der Trajektoriendatei
4* @param [in] blend 0 - keine Glättung, 1 - Glättung
5* @param [in] ovl Geschwindigkeitsskalierungsprozentsatz, Bereich [0~100]
6* @return Fehlercode
7*/
8errno_t MoveTPD(char name[30], uint8_t blend, float ovl);

9.7. Startpose einer TPD-Trajektorie abrufen

1/**
2 * @brief Startpose einer TPD-Trajektorie abrufen
3 * @param [in] name TPD-Dateiname (ohne Dateiendung)
4 * @param [out] desc_pose Startpose der Trajektorie
5 * @return Fehlercode
6 */
7errno_t GetTPDStartPose(char name[30], DescPose *desc_pose);

9.8. Bewegung zum Startpunkt der TPD-Bahnaufzeichnung

1/**
2* @brief Bewegung zum Startpunkt der TPD-Bahnaufzeichnung
3* @param [in] name Bahndateiname
4* @param [in] moveType Bewegungstyp; 0-PTP; 1-LIN
5* @param [in] ovl Geschwindigkeitsskalierungsprozentsatz, Bereich [0~100]
6* @return Fehlercode
7*/
8errno_t MoveToTPDStart(char name[30], uint8_t moveType, float ovl);

9.9. Codebeispiel für Roboter-TPD-Bahnaufzeichnung

 1int TestTPD(void)
 2{
 3ROBOT_STATE_PKG pkg = {};
 4FRRobot robot;
 5robot.LoggerInit();
 6robot.SetLoggerLevel(1);
 7int rtn = robot.RPC("192.168.58.2");
 8if (rtn != 0)
 9{
10    return -1;
11}
12robot.SetReConnectParam(true, 30000, 500);
13int type = 1;
14char name[30] = "tpd2025";
15int period_ms = 4;
16uint16_t di_choose = 0;
17uint16_t do_choose = 0;
18robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
19robot.Mode(1);
20robot.Sleep(1000);
21robot.DragTeachSwitch(1);
22robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
23robot.Sleep(3000);
24robot.SetWebTPDStop();
25robot.DragTeachSwitch(0);
26robot.Sleep(1000);
27float ovl = 100.0;
28uint8_t blend = 0;
29DescPose start_pose = {};
30rtn = robot.LoadTPD(name);
31printf("LoadTPD rtn is: %d\n", rtn);
32robot.GetTPDStartPose(name, &start_pose);
33printf("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);
34rtn = robot.MoveToTPDStart(name, 0, 100);
35printf("MoveToTPDStart rtn is: %d\n", rtn);
36rtn = robot.MoveTPD(name, blend, ovl);
37printf("MoveTPD rtn is: %d\n", rtn);
38std::this_thread::sleep_for(std::chrono::milliseconds(5000));
39robot.SetTPDDelete(name);
40robot.CloseRPC();
41return 0;
42}

9.10. Codebeispiel für Roboter-TPD-Trajektorienaufzeichnung

 1int TestTPD(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  int type = 1;
14  char name[30] = "tpd2025";
15  int period_ms = 4;
16  uint16_t di_choose = 0;
17  uint16_t do_choose = 0;
18  robot.SetTPDParam(type, name, period_ms, di_choose, do_choose);
19  robot.Mode(1);
20  robot.Sleep(1000);
21  robot.DragTeachSwitch(1);
22  robot.SetTPDStart(type, name, period_ms, di_choose, do_choose);
23  robot.Sleep(10000);
24  robot.SetWebTPDStop();
25  robot.DragTeachSwitch(0);
26  float ovl = 100.0;
27  uint8_t blend = 0;
28  DescPose start_pose = {};
29  rtn = robot.LoadTPD(name);
30  printf("LoadTPD rtn is: %d\n", rtn);
31  robot.GetTPDStartPose(name, &start_pose);
32  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);
33  robot.MoveCart(&start_pose, 0, 0, 100, 100, ovl, -1, -1);
34  robot.Sleep(1000);
35  rtn = robot.MoveTPD(name, blend, ovl);
36  printf("MoveTPD rtn is: %d\n", rtn);
37  std::this_thread::sleep_for(std::chrono::milliseconds(5000));
38  robot.SetTPDDelete(name);
39  robot.CloseRPC();
40  return 0;
41}

9.11. Trajektorie vorverarbeiten

1/**
2 * @brief Trajektorie vorverarbeiten (für MoveTrajectoryJ)
3 * @param [in] name Name der Trajektoriendatei
4 * @param [in] ovl Geschwindigkeitsskalierungsprozentsatz, Bereich [0~100]
5 * @param [in] opt 1 - Kontrollpunkt, Standard = 1
6 * @return Fehlercode
7 */
8errno_t LoadTrajectoryJ(char name[30], float ovl, int opt);

9.12. Trajektorie wiedergeben (für MoveTrajectoryJ)

1/**
2 * @brief Trajektorie wiedergeben (für MoveTrajectoryJ)
3 * @return Fehlercode
4 */
5errno_t MoveTrajectoryJ();

9.13. Startpose einer Trajektorie abrufen

1/**
2 * @brief Startpose einer Trajektorie abrufen
3 * @param [in] name Name der Trajektoriendatei
4 * @param [out] desc_pose Startpose der Trajektorie
5 * @return Fehlercode
6 */
7errno_t GetTrajectoryStartPose(char name[30], DescPose *desc_pose);

9.14. Nummer des Trajektorienpunkts abrufen

1/**
2 * @brief Nummer des aktuellen Trajektorienpunkts abrufen
3 * @param [out] pnum Punktnummer
4 * @return Fehlercode
5 */
6errno_t GetTrajectoryPointNum(int *pnum);

9.15. Geschwindigkeit während der Trajektorienausführung einstellen

1/**
2* @brief Geschwindigkeit während der Trajektorienausführung einstellen
3* @param [in] ovl Geschwindigkeitsprozentsatz [0-100.0]
4* @param [in] mode Modus; 0-Geschwindigkeitsreduzierungsmodus; 1-direkte Umschaltung
5* @return Fehlercode
6*/
7errno_t SetTrajectoryJSpeed(float ovl, int mode = 0);

9.16. Codebeispiel zum Einstellen der Robotergeschwindigkeit während der Trajektorienausführung

 1int TestSetTrajectoryJSpeed()
 2{
 3    ROBOT_STATE_PKG pkg = {};
 4    FRRobot robot;
 5    robot.LoggerInit();
 6    robot.SetLoggerLevel(1);
 7    robot.SetReConnectParam(true, 30000, 500);
 8    int rtn = robot.RPC("192.168.58.2");
 9    if (rtn != 0)
10    {
11        return -1;
12    }
13
14    rtn = robot.TrajectoryJUpLoad("D://zUP/trajHelix_aima_1.txt");
15    printf("Upload TrajectoryJ A %d\n", rtn);
16    char traj_file_name[90] = "/fruser/traj/trajHelix_aima_1.txt";
17    rtn = robot.LoadTrajectoryJ(traj_file_name, 100, 1);
18    printf("LoadTrajectoryJ %s, rtn is: %d\n", traj_file_name, rtn);
19    DescPose traj_start_pose;
20    memset(&traj_start_pose, 0, sizeof(DescPose));
21    rtn = robot.GetTrajectoryStartPose(traj_file_name, &traj_start_pose);
22    printf("GetTrajectoryStartPose is: %d\n", rtn);
23    printf("desc_pos:%f,%f,%f,%f,%f,%f\n", traj_start_pose.tran.x, traj_start_pose.tran.y, traj_start_pose.tran.z, traj_start_pose.rpy.rx, traj_start_pose.rpy.ry, traj_start_pose.rpy.rz);
24    std::this_thread::sleep_for(std::chrono::seconds(1));
25    robot.SetSpeed(50);
26    robot.MoveCart(&traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
27    int traj_num = 0;
28    rtn = robot.GetTrajectoryPointNum(&traj_num);
29    printf("GetTrajectoryStartPose rtn is: %d, traj num is: %d\n", rtn, traj_num);
30    rtn = robot.MoveTrajectoryJ();
31    printf("MoveTrajectoryJ rtn is: %d\n", rtn);
32    robot.Sleep(1000);
33    robot.GetRobotRealTimeState(&pkg);
34    int trajspeedMode = 1;
35    while (pkg.motion_done == 0)
36    {
37        robot.GetRobotRealTimeState(&pkg);
38        rtn = robot.SetTrajectoryJSpeed(10.0, trajspeedMode);
39        printf("SetTrajectoryJSpeed is: %d\n", rtn);
40        robot.Sleep(1000);
41        rtn = robot.SetTrajectoryJSpeed(80.0, trajspeedMode);
42        printf("SetTrajectoryJSpeed is: %d\n", rtn);
43        robot.Sleep(1000);
44    }
45    robot.CloseRPC();
46    robot.Sleep(1000000);
47    return 0;
48}

9.17. Kraft und Drehmoment während der Trajektorienausführung einstellen

1/**
2 * @brief Kraft und Drehmoment während der Trajektorienausführung einstellen
3 * @param [in] ft Kräfte und Momente in drei Richtungen [fx, fy, fz, tx, ty, tz] (N und Nm)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJForceTorque(ForceTorque *ft);

9.18. Kraft in X-Richtung während der Trajektorienausführung einstellen

1/**
2 * @brief Kraft in X-Richtung während der Trajektorienausführung einstellen
3 * @param [in] fx Kraft in X-Richtung (N)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJForceFx(double fx);

9.19. Kraft in Y-Richtung während der Trajektorienausführung einstellen

1/**
2 * @brief Kraft in Y-Richtung während der Trajektorienausführung einstellen
3 * @param [in] fy Kraft in Y-Richtung (N)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJForceFy(double fy);

9.20. Kraft in Z-Richtung während der Trajektorienausführung einstellen

1/**
2 * @brief Kraft in Z-Richtung während der Trajektorienausführung einstellen
3 * @param [in] fz Kraft in Z-Richtung (N)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJForceFz(double fz);

9.21. Drehmoment um die X-Achse während der Trajektorienausführung einstellen

1/**
2 * @brief Drehmoment um die X-Achse während der Trajektorienausführung einstellen
3 * @param [in] tx Drehmoment um die X-Achse (Nm)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJTorqueTx(double tx);

9.22. Drehmoment um die Y-Achse während der Trajektorienausführung einstellen

1/**
2 * @brief Drehmoment um die Y-Achse während der Trajektorienausführung einstellen
3 * @param [in] ty Drehmoment um die Y-Achse (Nm)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJTorqueTy(double ty);

9.23. Drehmoment um die Z-Achse während der Trajektorienausführung einstellen

1/**
2 * @brief Drehmoment um die Z-Achse während der Trajektorienausführung einstellen
3 * @param [in] tz Drehmoment um die Z-Achse (Nm)
4 * @return Fehlercode
5 */
6errno_t SetTrajectoryJTorqueTz(double tz);

9.24. Trajektorien-J-Datei hochladen

Neu in Version V3.7.7.

1/**
2 * @brief Trajektorien-J-Datei hochladen
3 * @param [in] filePath Vollständiger Pfad zur hochzuladenden Trajektoriendatei, z.B. "C://test/testJ.txt"
4 * @return Fehlercode
5 */
6errno_t TrajectoryJUpLoad(const std::string& filePath);

9.25. Trajektorien-J-Datei löschen

Neu in Version V3.7.7.

1/**
2 * @brief Trajektorien-J-Datei löschen
3 * @param [in] fileName Name der Datei, z.B. "testJ.txt"
4 * @return Fehlercode
5 */
6errno_t TrajectoryJDelete(const std::string& fileName);

9.26. Codebeispiel für Roboter-Trajektorien-J-Wiedergabe

 1int TestTraj(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  rtn = robot.TrajectoryJUpLoad("D://zUP/traj1.txt");
14  printf("Upload TrajectoryJ A %d\n", rtn);
15  char traj_file_name[30] = "/fruser/traj/traj1.txt";
16  rtn = robot.LoadTrajectoryJ(traj_file_name, 100, 1);
17  printf("LoadTrajectoryJ %s, rtn is: %d\n", traj_file_name, rtn);
18  DescPose traj_start_pose;
19  memset(&traj_start_pose, 0, sizeof(DescPose));
20  rtn = robot.GetTrajectoryStartPose(traj_file_name, &traj_start_pose);
21  printf("GetTrajectoryStartPose is: %d\n", rtn);
22  printf("desc_pos:%f,%f,%f,%f,%f,%f\n", traj_start_pose.tran.x, traj_start_pose.tran.y, traj_start_pose.tran.z, traj_start_pose.rpy.rx, traj_start_pose.rpy.ry, traj_start_pose.rpy.rz);
23  std::this_thread::sleep_for(std::chrono::seconds(1));
24  robot.SetSpeed(50);
25  robot.MoveCart(&traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
26  int traj_num = 0;
27  rtn = robot.GetTrajectoryPointNum(&traj_num);
28  printf("GetTrajectoryStartPose rtn is: %d, traj num is: %d\n", rtn, traj_num);
29  rtn = robot.SetTrajectoryJSpeed(50.0);
30  printf("SetTrajectoryJSpeed is: %d\n", rtn);
31  ForceTorque traj_force;
32  memset(&traj_force, 0, sizeof(ForceTorque));
33  traj_force.fx = 10;
34  rtn = robot.SetTrajectoryJForceTorque(&traj_force);
35  printf("SetTrajectoryJForceTorque rtn is: %d\n", rtn);
36  rtn = robot.SetTrajectoryJForceFx(10.0);
37  printf("SetTrajectoryJForceFx rtn is: %d\n", rtn);
38  rtn = robot.SetTrajectoryJForceFy(0.0);
39  printf("SetTrajectoryJForceFy rtn is: %d\n", rtn);
40  rtn = robot.SetTrajectoryJForceFz(0.0);
41  printf("SetTrajectoryJForceFz rtn is: %d\n", rtn);
42  rtn = robot.SetTrajectoryJTorqueTx(10.0);
43  printf("SetTrajectoryJTorqueTx rtn is: %d\n", rtn);
44  rtn = robot.SetTrajectoryJTorqueTy(10.0);
45  printf("SetTrajectoryJTorqueTy rtn is: %d\n", rtn);
46  rtn = robot.SetTrajectoryJTorqueTz(10.0);
47  printf("SetTrajectoryJTorqueTz rtn is: %d\n", rtn);
48  rtn = robot.MoveTrajectoryJ();
49  printf("MoveTrajectoryJ rtn is: %d\n", rtn);
50  robot.CloseRPC();
51  return 0;
52}

9.27. Trajektorie vorverarbeiten (Vorausschauende Planung)

 1/**
 2 * @brief Trajektorie vorverarbeiten (Vorausschauende Planung für TrajectoryLA)
 3 * @param [in] name Name der Trajektoriendatei
 4 * @param [in] mode Abtastmodus, 0 - keine Abtastung, 1 - Abtastung mit konstantem Datenintervall, 2 - Abtastung mit Fehlergrenze
 5 * @param [in] errorLim Fehlergrenze (wirksam bei Verwendung linearer Approximation)
 6 * @param [in] type Glättungsmethode, 0 - Bezier-Glättung
 7 * @param [in] precision Glättungsgenauigkeit (wirksam bei Verwendung von Bezier-Glättung)
 8 * @param [in] vamax Eingestellte maximale Geschwindigkeit (mm/s)
 9 * @param [in] amax Eingestellte maximale Beschleunigung (mm/s²)
10 * @param [in] jmax Eingestellter maximaler Ruck (mm/s³)
11 * @param [in] flag Schalter für konstante Vorausschau-Geschwindigkeit, 0 - deaktiviert, 1 - aktiviert
12 * @return Fehlercode
13 */
14errno_t LoadTrajectoryLA(char name[30], int mode, double errorLim, int type, double precision, double vamax, double amax, double jmax, int flag = 0);

9.28. Trajektorie wiedergeben (Vorausschauende Planung)

1/**
2* @brief Trajektorie wiedergeben (Vorausschauende Planung für TrajectoryLA)
3* @return Fehlercode
4*/
5errno_t MoveTrajectoryLA();

9.29. Codebeispiel für Trajektorienwiedergabe (Vorausschauende Planung)

 1int TestLoadTrajLA(void)
 2{
 3  ROBOT_STATE_PKG pkg = {};
 4  FRRobot robot;
 5  robot.LoggerInit();
 6  robot.SetLoggerLevel(1);
 7  int rtn = robot.RPC("192.168.58.2");
 8  if (rtn != 0)
 9  {
10    return -1;
11  }
12  robot.SetReConnectParam(true, 30000, 500);
13  rtn = robot.TrajectoryJUpLoad("D://zUP/traj.txt");
14  printf("Upload TrajectoryJ A %d\n", rtn);
15  char traj_file_name[30] = "/fruser/traj/traj.txt";
16  rtn = robot.LoadTrajectoryLA(traj_file_name, 1, 2, 0, 2, 100, 200, 1000);
17  printf("LoadTrajectoryLA %s, rtn is: %d\n", traj_file_name, rtn);
18  DescPose traj_start_pose;
19  memset(&traj_start_pose, 0, sizeof(DescPose));
20  rtn = robot.GetTrajectoryStartPose(traj_file_name, &traj_start_pose);
21  printf("GetTrajectoryStartPose is: %d\n", rtn);
22  printf("desc_pos:%f,%f,%f,%f,%f,%f\n", traj_start_pose.tran.x, traj_start_pose.tran.y, traj_start_pose.tran.z, traj_start_pose.rpy.rx, traj_start_pose.rpy.ry, traj_start_pose.rpy.rz);
23  std::this_thread::sleep_for(std::chrono::seconds(1));
24  robot.SetSpeed(50);
25  robot.MoveCart(&traj_start_pose, 0, 0, 100, 100, 100, -1, -1);
26  rtn = robot.MoveTrajectoryLA();
27  printf("MoveTrajectoryLA rtn is: %d\n", rtn);
28  robot.CloseRPC();
29  return 0;
30}