8. Zapytanie o stan robota

8.1. Pobieranie bieżącej pozycji przegubów (kąt)

Prototyp

GetActualJointPosDegree(flag=1)

Opis

Pobieranie bieżącej pozycji przegubów (kąt)

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint_pos=[j1,j2,j3,j4,j5,j6]: Bieżąca pozycja przegubów (kąt)

8.2. Pobieranie bieżącej pozycji przegubów (radian)

Prototyp

GetActualJointPosRadian(flag=1)

Opis

Pobieranie bieżącej pozycji przegubów (radian)

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint_pos=[j1,j2,j3,j4,j5,j6]: Bieżąca pozycja przegubów (radian)

8.3. Pobieranie prędkości sprzężenia zwrotnego przegubów - deg/s

Prototyp

GetActualJointSpeedsDegree(flag=1)

Opis

Pobieranie prędkości sprzężenia zwrotnego przegubów - deg/s

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • speed=[j1,j2,j3,j4,j5,j6]: Prędkości sprzężenia zwrotnego przegubów - deg/s

8.4. Pobieranie przyspieszenia sprzężenia zwrotnego przegubów - deg/s^2

Prototyp

GetActualJointAccDegree(flag=1)

Opis

Pobieranie przyspieszenia sprzężenia zwrotnego przegubów - deg/s^2

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • acc=[j1,j2,j3,j4,j5,j6]: Przyspieszenia sprzężenia zwrotnego przegubów - deg/s^2

8.5. Pobieranie prędkości wypadkowej zadanej TCP

Prototyp

GetTargetTCPCompositeSpeed(flag=1)

Opis

Pobieranie prędkości wypadkowej zadanej TCP

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • [tcp_speed,ori_speed]: tcp_speed - liniowa prędkość wypadkowa ori_speed - prędkość wypadkowa pozy

8.6. Pobieranie prędkości wypadkowej sprzężenia zwrotnego TCP

Prototyp

GetActualTCPCompositeSpeed(flag=1)

Opis

Pobieranie prędkości wypadkowej sprzężenia zwrotnego TCP

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • [tcp_speed,ori_speed]: tcp_speed - liniowa prędkość wypadkowa ori_speed - prędkość wypadkowa pozy

8.7. Pobieranie prędkości zadanej TCP

Prototyp

GetTargetTCPSpeed(flag=1)

Opis

Pobieranie prędkości zadanej TCP

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • speed=[x,y,z,rx,ry,rz]: Prędkość zadana TCP, mm/s

8.8. Pobieranie prędkości sprzężenia zwrotnego TCP

Prototyp

GetActualTCPSpeed(flag=1)

Opis

Pobieranie prędkości sprzężenia zwrotnego TCP

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • speed=[x,y,z,rx,ry,rz]: Prędkość sprzężenia zwrotnego TCP

8.9. Pobieranie bieżącej pozy narzędzia

Prototyp

GetActualTCPPose(flag=1)

Opis

Pobieranie bieżącej pozy narzędzia

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • tcp_pose=[x,y,z,rx,ry,rz]: Bieżąca poza narzędzia

8.10. Pobieranie bieżącego numeru układu narzędzia

Prototyp

GetActualTCPNum(flag=1)

Opis

Pobieranie bieżącego numeru układu narzędzia

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • tool_id: Numer układu narzędzia

8.11. Pobieranie bieżącego numeru układu przedmiotu

Prototyp

GetActualWObjNum(flag=1)

Opis

Pobieranie bieżącego numeru układu przedmiotu

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • wobj_id: Numer układu przedmiotu

8.12. Pobieranie bieżącej pozy kołnierza końcowego

Prototyp

GetActualToolFlangePose(flag=1)

Opis

Pobieranie bieżącej pozy kołnierza końcowego

Parametry wymagane

Brak

Parametry domyślne

  • flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • flange_pose=[x,y,z,rx,ry,rz]: Bieżąca poza kołnierza końcowego

8.13. Pobieranie bieżącego momentu obrotowego przegubów

Prototyp

GetJointTorques(flag=1)

Opis

Pobieranie bieżącego momentu obrotowego przegubów

Parametry wymagane

Brak

Parametry domyślne

flag: 0-blokujący, 1-nieblokujący, domyślnie 1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • torques=[j1,j2,j3,j4,j5,j6]: Moment obrotowy przegubów

8.14. Pobieranie czasu systemowego

Prototyp

GetSystemClock()

Opis

Pobieranie czasu systemowego

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • t_ms: Czas systemowy, jednostka [ms]

8.15. Synchronizacja Czasu Systemowego z Robotem

Prototyp

SetRobottime(self)

Opis

Pobiera bieżący czas systemowy komputera hosta i wysyła go do robota w celu synchronizacji czasu systemowego (ze względu na ograniczenia systemu QNX, dokładność synchronizacji jest na poziomie minut)

Parametry Wymagane

Brak

Parametry Domyślne

Brak

Wartość Zwracana

  • Kod błędu, 0-sukces; niezerowy-błąd

8.16. Przykład Kodu Synchronizacji Czasu Systemowego z Robotem

 1from fairino import Robot
 2import time
 3from datetime import datetime, timedelta
 4
 5
 6def main():
 7    # Nawiązanie połączenia z kontrolerem robota
 8    robot = Robot.RPC('192.168.58.2')
 9    time.sleep(0.5)
10
11    print("========== Set and Get Robot Time Test ==========")
12
13    # Pobranie czasu systemowego przed ustawieniem
14    ret, t_ms = robot.GetSystemClock()
15    if ret == 0 and t_ms is not None:
16        print(f"system clock : {t_ms}")
17        # Robot przechowuje UTC+8, konwersja do czasu PC (odejmij 8 godzin)
18        robot_time = datetime.fromtimestamp(t_ms / 1000.0) - timedelta(hours=8)
19        print(f"BEFORE Robot Time: {robot_time.strftime('%Y-%m-%d %H:%M:%S')}")
20    else:
21        print(f"GetSystemClock failed, ret:{ret}")
22
23    # Ustawienie czasu robota na czas PC
24    ret = robot.SetRobottime()
25    print(f"SetRobottime ret: {ret}")
26
27    # Pobranie czasu robota po ustawieniu
28    ret, t_ms_after = robot.GetSystemClock()
29    if ret == 0 and t_ms_after is not None:
30        print(f"system clock : {t_ms_after}")
31        # Robot przechowuje UTC+8, konwersja do czasu PC (odejmij 8 godzin)
32        robot_time = datetime.fromtimestamp(t_ms_after / 1000.0) - timedelta(hours=8)
33
34        # Czas PC - wyświetl lokalny czas systemowy
35        pc_time = datetime.now()
36
37        # Obcięcie obu czasów do minut
38        pc_minute = pc_time.replace(second=0, microsecond=0)
39        robot_minute = robot_time.replace(second=0, microsecond=0)
40
41        # Porównanie spójności
42        is_consistent = (pc_minute == robot_minute)
43        if is_consistent:
44            print(f"Consistent     | PC time: {pc_minute.strftime('%Y-%m-%d %H:%M')}  | Robot time: {robot_minute.strftime('%Y-%m-%d %H:%M')}")
45        else:
46            print(f"Inconsistent | PC time: {pc_minute.strftime('%Y-%m-%d %H:%M')}  | Robot time: {robot_minute.strftime('%Y-%m-%d %H:%M')}")
47    else:
48        print(f"GetSystemClock failed, ret:{ret}")
49
50    # Zamknięcie połączenia
51    robot.CloseRPC()
52
53
54if __name__ == "__main__":
55    main()

8.17. Sprawdzanie, czy ruch robota został zakończony

Prototyp

GetRobotMotionDone()

Opis

Sprawdzanie, czy ruch robota został zakończony

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • state: Stan ruchu robota, 0-niezakończony, 1-zakończony

8.18. Sprawdzanie długości bufora kolejki ruchu robota

Prototyp

GetMotionQueueLength()

Opis

Sprawdzanie długości bufora kolejki ruchu robota

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • len: Długość bufora

8.19. Pobieranie stanu zatrzymania awaryjnego robota

Prototyp

GetRobotEmergencyStopState()

Opis

Pobieranie stanu zatrzymania awaryjnego robota

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • state: Stan zatrzymania awaryjnego, 0-brak zatrzymania awaryjnego, 1-zatrzymanie awaryjne

8.20. Pobieranie stanu komunikacji SDK z robotem

Prototyp

GetSDKComState()

Opis

Pobieranie stanu komunikacji SDK z robotem

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • state: Stan komunikacji, 0-komunikacja normalna, 1-komunikacja nieprawidłowa

8.21. Pobieranie sygnału bezpiecznego zatrzymania

Prototyp

GetSafetyStopState()

Opis

Pobieranie sygnału bezpiecznego zatrzymania

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • [si0_state,si1_state]: si0_state - sygnał bezpiecznego zatrzymania SI0, 0-nieaktywny, 1-aktywny; si1_state - sygnał bezpiecznego zatrzymania SI1, 0-nieaktywny, 1-aktywny

8.22. Pobieranie bieżącej temperatury sterownika przegubu (℃)

Prototyp

GetJointDriverTemperature()

Opis

Pobieranie bieżącej temperatury sterownika przegubu (℃)

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • data=[t1,t2,t3,t4,t5,t6]: Bieżące temperatury każdego przegubu

8.23. Pobieranie bieżącego momentu obrotowego sterownika przegubu (Nm)

Prototyp

GetJointDriverTorque()

Opis

Pobieranie bieżącego momentu obrotowego sterownika przegubu (Nm)

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • data=[j1,j2,j3,j4,j5,j6]: Moment obrotowy przegubów [fx,fy,fz,tx,ty,tz]

8.24. Pobieranie stanu robota

Prototyp

GetRobotRealTimeState()

Opis

Pobieranie stanu robota

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • robot_state_pkg: Struktura stanu robota

8.25. Przykład kodu zapytania o stan robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4error,[yangle, zangle] = robot.GetRobotInstallAngle()
 5print(f"yangle:{yangle},zangle:{zangle}")
 6error,j_deg = robot.GetActualJointPosDegree(0)
 7print(f"joint pos deg:{j_deg[0]},{j_deg[1]},{j_deg[2]},{j_deg[3]},{j_deg[4]},{j_deg[5]}")
 8error,jointSpeed = robot.GetActualJointSpeedsDegree(0)
 9print(f"joint speeds deg:{jointSpeed[0]},{jointSpeed[1]},{jointSpeed[2]},{jointSpeed[3]},{jointSpeed[4]},{jointSpeed[5]}")
10error,jointAcc = robot.GetActualJointAccDegree(0)
11print(f"joint acc deg:{jointAcc[0]},{jointAcc[1]},{jointAcc[2]},{jointAcc[3]},{jointAcc[4]},{jointAcc[5]}")
12error,[tcp_speed, ori_speed] = robot.GetTargetTCPCompositeSpeed(0)
13print(f"GetTargetTCPCompositeSpeed tcp {tcp_speed}; ori {ori_speed}")
14error,[tcp_speed, ori_speed] = robot.GetActualTCPCompositeSpeed(0)
15print(f"GetActualTCPCompositeSpeed tcp {tcp_speed}; ori {ori_speed}")
16error,targetSpeed = robot.GetTargetTCPSpeed(0)
17print(f"GetTargetTCPSpeed {targetSpeed[0]},{targetSpeed[1]},{targetSpeed[2]},{targetSpeed[3]},{targetSpeed[4]},{targetSpeed[5]}")
18error,actualSpeed = robot.GetActualTCPSpeed(0)
19print(f"GetActualTCPSpeed {actualSpeed[0]},{actualSpeed[1]},{actualSpeed[2]},{actualSpeed[3]},{actualSpeed[4]},{actualSpeed[5]}")
20error,tcp = robot.GetActualTCPPose(0)
21print(f"tcp pose:{tcp[0]},{tcp[1]},{tcp[2]},{tcp[3]},{tcp[4]},{tcp[5]}")
22error,flange = robot.GetActualToolFlangePose(0)
23print(f"flange pose:{flange[0]},{flange[1]},{flange[2]},{flange[3]},{flange[4]},{flange[5]}")
24error,id = robot.GetActualTCPNum(0)
25print(f"tcp num:{id}")
26error,id = robot.GetActualWObjNum(0)
27print(f"wobj num:{id}")
28error,jtorque = robot.GetJointTorques(0)
29print(f"torques:{jtorque[0]},{jtorque[1]},{jtorque[2]},{jtorque[3]},{jtorque[4]},{jtorque[5]}")
30error,t_ms = robot.GetSystemClock()
31print(f"system clock:{t_ms}")
32error,config = robot.GetRobotCurJointsConfig()
33print(f"joint config:{config}")
34error,motionDone = robot.GetRobotMotionDone()
35print(f"GetRobotMotionDone:{motionDone}")
36error,len = robot.GetMotionQueueLength()
37print(f"GetMotionQueueLength:{len}")
38error,emergState = robot.GetRobotEmergencyStopState()
39print(f"GetRobotEmergencyStopState:{emergState}")
40error,comstate = robot.GetSDKComState()
41print(f"GetSDKComState:{comstate}")
42error,[si0_state, si1_state] = robot.GetSafetyStopState()
43print(f"GetSafetyStopState:{si0_state} {si1_state}")
44error,temp = robot.GetJointDriverTemperature()
45print(f"Temperature:{temp[0]},{temp[1]},{temp[2]},{temp[3]},{temp[4]},{temp[5]}")
46error,torque = robot.GetJointDriverTorque()
47print(f"torque:{torque[0]},{torque[1]},{torque[2]},{torque[3]},{torque[4]},{torque[5]}")
48error,pkg = robot.GetRobotRealTimeState()
49robot.CloseRPC()

8.26. Rozwiązanie kinematyki odwrotnej

Prototyp

GetInverseKin(type,desc_pos,config=-1)

Opis

Kinematyka odwrotna, rozwiązanie pozycji przegubów na podstawie pozy kartezjańskiej

Parametry wymagane

  • type: 0-pozycja absolutna (układ bazowy), 1-pozycja względna (układ bazowy), 2-pozycja względna (układ narzędzia)

  • desc_pose: [x,y,z,rx,ry,rz], poza narzędzia, jednostka [mm][°]

Parametry domyślne

  • config: Konfiguracja przegubów, [-1]-obliczenia względem bieżącej pozycji przegubów, [0~7]-obliczenia według konfiguracji przegubów, domyślnie -1

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint_pos=[j1,j2,j3,j4,j5,j6]: Rozwiązanie kinematyki odwrotnej, pozycja przegubów na podstawie pozy kartezjańskiej

8.27. Rozwiązanie kinematyki odwrotnej - z określoną pozycją odniesienia

Prototyp

GetInverseKinRef(type,desc_pos,joint_pos_ref)

Opis

Kinematyka odwrotna, rozwiązanie pozycji przegubów na podstawie pozy narzędzia, z określoną pozycją odniesienia przegubów

Parametry wymagane

  • type: 0-pozycja absolutna (układ bazowy), 1-pozycja względna (układ bazowy), 2-pozycja względna (układ narzędzia)

  • desc_pos: [x,y,z,rx,ry,rz] poza narzędzia, jednostka [mm][°]

  • joint_pos_ref: [j1,j2,j3,j4,j5,j6], referencyjna pozycja przegubów, jednostka [°]

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint_pos=[j1,j2,j3,j4,j5,j6]: Rozwiązanie kinematyki odwrotnej, pozycja przegubów na podstawie pozy narzędzia

8.28. Rozwiązanie kinematyki odwrotnej, przestrzeń kartezjańska z uwzględnieniem pozycji osi rozszerzenia

Prototyp

GetInverseKinExaxis(type, desc_pos, exaxis, tool, workPiece, config = -1)

Opis

Rozwiązanie kinematyki odwrotnej, przestrzeń kartezjańska z uwzględnieniem pozycji osi rozszerzenia

Parametry wymagane

  • type: 0-pozycja absolutna (układ bazowy), 1-pozycja przyrostowa (układ bazowy), 2-pozycja przyrostowa (układ narzędzia)

  • desc_pos: Pozycja kartezjańska

  • exaxis: Pozycja osi rozszerzenia

  • tool: Numer narzędzia

  • workPiece: Numer przedmiotu

  • config -1: automatyczne rozwiązanie, 0-7 odpowiada ośmiu zestawom rozwiązań

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • joint_pos: Pozycja przegubów

8.29. Przykład kodu rozwiązania kinematyki odwrotnej z uwzględnieniem pozycji osi rozszerzenia

 1from fairino import Robot
 2import time
 3robot = Robot.RPC('192.168.58.2')
 4desc = [99.957, -0.002, 29.994, -176.569, -6.757, -167.462]
 5exaxis = [100.0, 0.0, 0.0, 0.0]
 6jointPos = [0.0] * 6
 7offsetPos = [0.0] * 6
 8rtn,pkg = robot.GetRobotRealTimeState()
 9toolnum = pkg.tool
10workPcsNum = pkg.user
11rtn, jointPos = robot.GetInverseKinExaxis(0, desc, exaxis, toolnum, workPcsNum)
12print(f"GetInverseKinExaxis joint is {jointPos[0]},{jointPos[1]},{jointPos[2]},{jointPos[3]},{jointPos[4]},{jointPos[5]}")
13robot.ExtAxisMove(exaxis, 100, -1)
14robot.MoveJ(joint_pos=jointPos, desc_pos=desc, tool=toolnum, user=workPcsNum, vel=100.0, acc=100.0, ovl=100.0, exaxis_pos=exaxis, blendT=-1, offset_flag=0, offset_pos=offsetPos)
15robot.CloseRPC()
16return 0

8.30. Sprawdzanie, czy kinematyka odwrotna ma rozwiązanie

Prototyp

GetInverseKinHasSolution(type,desc_pos,joint_pos_ref)

Opis

Sprawdzanie, czy kinematyka odwrotna (rozwiązanie pozycji przegubów na podstawie pozy narzędzia) ma rozwiązanie

Parametry wymagane

  • type: 0-pozycja absolutna (układ bazowy), 1-pozycja względna (układ bazowy), 2-pozycja względna (układ narzędzia)

  • desc_pos: [x,y,z,rx,ry,rz] poza narzędzia, jednostka [mm][°]

  • joint_pos_ref: [j1,j2,j3,j4,j5,j6], referencyjna pozycja przegubów, jednostka [°]

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • result: „True” - ma rozwiązanie, „False” - nie ma rozwiązania

8.31. Pobieranie 8 zestawów rozwiązań odwrotnych dla robota

Prototyp

TCFToAllJoint(self, tcp_pose, tool, workpiece, exPos)

Opis

Pobierz 8 zestawów rozwiązań odwrotnych

Parametry wymagane

  • tcp_pose: Pozycja kartezjańska, 6 elementów [x,y,z,rx,ry,rz]

  • tool: Układ współrzędnych narzędzia

  • workpiece: Układ współrzędnych przedmiotu obrabianego

  • exPos: Pozycja osi rozszerzonej, 4 elementy

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu Sukces-0 Błąd- errcode

  • jPos: Wyjście 8 zestawów kątów przegubów, lista dwuwymiarowa, każdy zestaw zawiera 6 wartości przegubów, łącznie 48 wartości

8.32. Przykład kodu pobierania 8 zestawów rozwiązań odwrotnych dla robota

 1from fairino import Robot
 2import time
 3
 4def main():
 5    # Establish connection with the robot controller
 6    robot = Robot.RPC('192.168.58.2')
 7    time.sleep(0.5)  # Wait for connection and data reception
 8
 9    # Get current TCP pose
10    ret, curTcp = robot.GetActualTCPPose(1)
11    if ret != 0:
12        print(f"GetActualTCPPose failed, ret:{ret}")
13        robot.CloseRPC()
14        return
15
16    print(f"Current TCP pose: x={curTcp[0]:.3f}, y={curTcp[1]:.3f}, z={curTcp[2]:.3f}, "
17        f"a={curTcp[3]:.3f}, b={curTcp[4]:.3f}, c={curTcp[5]:.3f}")
18
19    # Exaxis position, all zeros here
20    exPos = [0.0, 0.0, 0.0, 0.0]
21
22    # Call TCFToAllJoint to get 8 inverse solutions, tool=0, workpiece=0
23    rtn, allJoints = robot.TCFToAllJoint(curTcp, 0, 0, exPos)
24    if rtn != 0:
25        print(f"TCFToAllJoint failed, rtn:{rtn}")
26        robot.CloseRPC()
27        return
28
29    # Verify each solution with forward kinematics
30    for i in range(8):
31        joint = allJoints[i]
32
33        print(f"JOINT{i + 1}: j1={joint[0]:.3f}, j2={joint[1]:.3f}, j3={joint[2]:.3f}, "
34            f"j4={joint[3]:.3f}, j5={joint[4]:.3f}, j6={joint[5]:.3f}")
35
36        # Forward kinematics to get cartesian pose of the i-th solution
37        rtn, pos = robot.GetForwardKin(joint)
38        if rtn != 0:
39            # Skip this solution if forward kinematics fails
40            continue
41
42        print(f"POS{i + 1}: x={pos[0]:.3f}, y={pos[1]:.3f}, z={pos[2]:.3f}, "
43            f"a={pos[3]:.3f}, b={pos[4]:.3f}, c={pos[5]:.3f}")
44
45    # Close connection
46    robot.CloseRPC()
47
48if __name__ == "__main__":
49    main()

8.33. Rozwiązanie kinematyki prostej

Prototyp

GetForwardKin(joint_pos)

Opis

Kinematyka prosta, rozwiązanie pozy narzędzia na podstawie pozycji przegubów

Parametry wymagane

  • joint_pos: [j1,j2,j3,j4,j5,j6]: pozycja przegubów, jednostka [°]

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • desc_pos=[x,y,z,rx,ry,rz]: Rozwiązanie kinematyki prostej, poza narzędzia na podstawie pozycji przegubów

8.34. Przykład kodu obliczeń kinematyki prostej i odwrotnej robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4j1 = [-11.904, -99.669, 117.473, -108.616, -91.726, 74.256]
 5desc_pos1 = [-419.524, -13.000, 351.569, -178.118, 0.314, 3.833]
 6error, inverseRtn = robot.GetInverseKin(0, desc_pos=desc_pos1, config=-1)
 7print(f"dcs1 GetInverseKin rtn is {inverseRtn[0]}, {inverseRtn[1]}, {inverseRtn[2]}, "
 8      f"{inverseRtn[3]}, {inverseRtn[4]}, {inverseRtn[5]}")
 9error, inverseRtn = robot.GetInverseKinRef(0, desc_pos=desc_pos1, joint_pos_ref=j1)
10print(f"dcs1 GetInverseKinRef rtn is {inverseRtn[0]}, {inverseRtn[1]}, {inverseRtn[2]}, "
11      f"{inverseRtn[3]}, {inverseRtn[4]}, {inverseRtn[5]}")
12error, hasResult = robot.GetInverseKinHasSolution(0, desc_pos=desc_pos1, joint_pos_ref=j1)
13print(f"dcs1 GetInverseKinRef result {hasResult}")
14error, forwordResult = robot.GetForwardKin(j1)
15print(f"jpos1 forwordResult rtn is {forwordResult[0]}, {forwordResult[1]}, {forwordResult[2]}, "
16      f"{forwordResult[3]}, {forwordResult[4]}, {forwordResult[5]}")
17robot.CloseRPC()

8.35. Zapytanie o dane punktu zarządzania nauczaniem robota

Prototyp

GetRobotTeachingPoint(name)

Opis

Zapytanie o dane punktu zarządzania nauczaniem robota

Parametry wymagane

name: Nazwa punktu

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • [x,y,z,rx,ry,rz,j1,j2,j3,j4,j5,j6,tool,wobj,speed,acc,e1,e2,e3,e4]: Dane punktu

8.36. Pobieranie parametrów kompensacji DH

Dodane w wersji python: SDK-v2.0.1

Prototyp

GetDHCompensation()

Opis

Pobieranie parametrów kompensacji DH

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • dhCompensation=[cmpstD1,cmpstA2,cmpstA3,cmpstD4,cmpstD5,cmpstD6]: Wartości kompensacji parametrów DH robota (mm)

8.37. Pobieranie numeru SN skrzynki kontrolnej

Dodane w wersji python: SDK-v2.1.1

Prototyp

GetRobotSN()

Opis

Pobieranie numeru SN skrzynki kontrolnej

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • SNCode: Numer SN skrzynki kontrolnej

8.38. Przykład kodu zapytania o dane punktu zarządzania nauczaniem robota

 1from fairino import Robot
 2# Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota
 3robot = Robot.RPC('192.168.58.2')
 4name = "P1"
 5rtn, data = robot.GetRobotTeachingPoint(name)
 6print(f"{rtn} name is: {name}")
 7for i in range(20):
 8    print(f"data is: {data[i]}")
 9rtn,que_len = robot.GetMotionQueueLength()
10print(f"GetMotionQueueLength rtn is: {rtn}, queue length is: {que_len}")
11retval,dh = robot.GetDHCompensation()
12print(f"retval is: {retval}")
13print(f"dh is: {dh[0]} {dh[1]} {dh[2]} {dh[3]} {dh[4]} {dh[5]}")
14error,sn = robot.GetRobotSN()
15print(f"robot SN is {sn[0]}")
16robot.CloseRPC()

8.39. Pobieranie Układu Współrzędnych Narzędzia według ID

Zmienione w wersji python: SDK-V3.9.8

Prototyp

GetToolCoordWithID(id)

Opis

Pobiera układ współrzędnych narzędzia według ID

Parametry Wymagane

  • id: Numer układu współrzędnych narzędzia

Parametry Domyślne

Brak

Wartość Zwracana

  • Kod błędu, 0-sukces; niezerowy-błąd

  • coord: Wartości układu współrzędnych

  • type: Typ narzędzia (opcjonalny) 0-narzędzie; 1-czujnik

  • install: Pozycja instalacji (opcjonalna) 0-koniec robota; 1-na zewnątrz robota

  • toolID: ID narzędzia

  • loadNo: Numer obciążenia

8.40. Pobieranie Układu Współrzędnych Przedmiotu według ID

Zmienione w wersji python: SDK-V3.9.8

Prototyp

GetWObjCoordWithID(id)

Opis

Pobiera układ współrzędnych przedmiotu według ID

Parametry Wymagane

  • id: Numer układu współrzędnych przedmiotu

Parametry Domyślne

Brak

Wartość Zwracana

  • Kod błędu, 0-sukces; niezerowy-błąd

  • coord: Wartości układu współrzędnych

  • refFrame: Referencyjny układ współrzędnych

8.41. Pobieranie Zewnętrznego Układu Współrzędnych Narzędzia według ID

Zmienione w wersji python: SDK-V3.9.8

Prototyp

GetExToolCoordWithID(id)

Opis

Pobiera zewnętrzny układ współrzędnych narzędzia według ID

Parametry Wymagane

  • id: Numer zewnętrznego układu współrzędnych narzędzia

Parametry Domyślne

Brak

Wartość Zwracana

  • Kod błędu, 0-sukces; niezerowy-błąd

  • coord: Wartości układu współrzędnych

  • tcoord: Pozycja układu współrzędnych przedmiotu zamontowanego na końcówce robota (6 wartości: [x, y, z, rx, ry, rz])

8.42. Pobieranie Układu Współrzędnych Osi Rozszerzonej według ID

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetExAxisCoordWithID(id)

Opis

Pobiera układ współrzędnych osi rozszerzonej według ID

Parametry Wymagane

  • id: Numer układu współrzędnych osi rozszerzonej

Parametry Domyślne

Brak

Wartość Zwracana

  • Kod błędu, 0-sukces; niezerowy-błąd

  • coord: Wartości układu współrzędnych

  • axisCoordNum: Numer osi rozszerzonej (opcjonalny) bit0-bit3 odpowiadają osiom rozszerzonym 1-4; np. wartość 3 odpowiada osiom rozszerzonym [1,2]

  • calibFlag: Flaga kalibracji (opcjonalna) 0-niekalibrowany; 1-kalibrowany

8.43. Pobieranie masy i środka ciężkości obciążenia według numeru

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetTargetPayloadWithID(id)

Opis

Pobieranie masy i środka ciężkości obciążenia według numeru

Parametry wymagane

  • id: Numer układu osi rozszerzenia

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • weight: Masa obciążenia

  • cog: Środek ciężkości obciążenia

8.44. Pobieranie bieżącego układu narzędzia

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetCurToolCoord()

Opis

Pobieranie bieżącego układu narzędzia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • coord: Wartość układu współrzędnych

8.45. Pobieranie bieżącego układu przedmiotu

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetCurWObjCoord()

Opis

Pobieranie bieżącego układu przedmiotu

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • coord: Wartość układu współrzędnych

8.46. Pobieranie bieżącego zewnętrznego układu narzędzia

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetCurExToolCoord()

Opis

Pobieranie bieżącego zewnętrznego układu narzędzia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • coord: Wartość układu współrzędnych

8.47. Pobieranie bieżącego układu osi rozszerzenia

Dodane w wersji python: SDK-v2.1.6

Prototyp

GetCurExAxisCoord()

Opis

Pobieranie bieżącego układu osi rozszerzenia

Parametry wymagane

Brak

Parametry domyślne

Brak

Wartość zwracana

  • Kod błędu sukces-0 błąd- errcode

  • coord: Wartość układu współrzędnych

8.48. Przykład kodu układów współrzędnych robota i obciążenia

 1from fairino import Robot
 2import time
 3
 4def main():
 5    robot = Robot.RPC('192.168.58.2')
 6    time.sleep(0.5)
 7
 8    time.sleep(2)
 9
10    id = 1
11    rtn, toolCoord, type_val, install, toolID, loadNo = robot.GetToolCoordWithID(id)
12    print(f"GetToolCoordWithID {id}, {toolCoord[0]:.6f} {toolCoord[1]:.6f} {toolCoord[2]:.6f} {toolCoord[3]:.6f} {toolCoord[4]:.6f} {toolCoord[5]:.6f},  type = {type_val}, install = {install}, toolID = {toolID}, loadNo = {loadNo}")
13    rtn, wobjCoord, refFrame = robot.GetWObjCoordWithID(id)
14    print(f"GetWObjCoordWithID {id}, {wobjCoord[0]:.6f} {wobjCoord[1]:.6f} {wobjCoord[2]:.6f} {wobjCoord[3]:.6f} {wobjCoord[4]:.6f} {wobjCoord[5]:.6f}, refFrame = {refFrame}")
15    rtn, extoolCoord, exworkpieceCoord = robot.GetExToolCoordWithID(21)
16    print(f"GetExToolCoordWithID {id}, {extoolCoord[0]:.6f} {extoolCoord[1]:.6f} {extoolCoord[2]:.6f} {extoolCoord[3]:.6f} {extoolCoord[4]:.6f} {extoolCoord[5]:.6f}, {exworkpieceCoord[0]:.6f} {exworkpieceCoord[1]:.6f} {exworkpieceCoord[2]:.6f} {exworkpieceCoord[3]:.6f} {exworkpieceCoord[4]:.6f} {exworkpieceCoord[5]:.6f}")
17    rtn, exAxisCoord, axisCoordNum, calibFlag = robot.GetExAxisCoordWithID(id)
18    print(f"GetExAxisCoordWithID {id}, {exAxisCoord[0]:.6f} {exAxisCoord[1]:.6f} {exAxisCoord[2]:.6f} {exAxisCoord[3]:.6f} {exAxisCoord[4]:.6f} {exAxisCoord[5]:.6f}, axisCoordNum = {axisCoordNum}, calibFlag = {calibFlag}")
19    rtn, weight, cog = robot.GetTargetPayloadWithID(id)
20    print(f"GetTargetPayloadWithID {id}, {weight:.6f} {cog[0]:.6f} {cog[1]:.6f} {cog[2]:.6f}")
21    rtn, toolCoord = robot.GetCurToolCoord()
22    print(f"GetCurToolCoord {toolCoord[0]:.6f} {toolCoord[1]:.6f} {toolCoord[2]:.6f} {toolCoord[3]:.6f} {toolCoord[4]:.6f} {toolCoord[5]:.6f}")
23    rtn, wobjCoord = robot.GetCurWObjCoord()
24    print(f"GetCurWObjCoord {wobjCoord[0]:.6f} {wobjCoord[1]:.6f} {wobjCoord[2]:.6f} {wobjCoord[3]:.6f} {wobjCoord[4]:.6f} {wobjCoord[5]:.6f}")
25    rtn, extoolCoord = robot.GetCurExToolCoord()
26    print(f"GetCurExToolCoord {extoolCoord[0]:.6f} {extoolCoord[1]:.6f} {extoolCoord[2]:.6f} {extoolCoord[3]:.6f} {extoolCoord[4]:.6f} {extoolCoord[5]:.6f}")
27
28    rtn, exAxisCoord = robot.GetCurExAxisCoord()
29    print(f"GetCurExAxisCoord {exAxisCoord[0]:.6f} {exAxisCoord[1]:.6f} {exAxisCoord[2]:.6f} {exAxisCoord[3]:.6f} {exAxisCoord[4]:.6f} {exAxisCoord[5]:.6f}")
30    rtn, weightT = robot.GetTargetPayload(0)
31    rtn, cogT = robot.GetTargetPayloadCog(0)
32    print(f"GetTargetPayload {weightT:.6f} {cogT[0]:.6f} {cogT[1]:.6f} {cogT[2]:.6f}")
33    coordSet = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0]
34
35    rtn = robot.SetToolCoord(1, coordSet, 0, 0, 1, 0)
36    print(f"SetToolCoord rtn is {rtn}")
37
38    rtn = robot.SetWObjCoord(1, coordSet, 0)
39    print(f"SetWObjCoord rtn is {rtn}")
40
41    rtn = robot.SetLoadWeight(1, 1.3)
42    print(f"SetLoadWeight rtn is {rtn}")
43
44    rtn = robot.SetLoadCoord(10.0, 20.0, 30.0,1)
45    print(f"SetLoadCoord rtn is {rtn}")
46
47    etcp = [0.0, 0.0, 100.0, 0.0, 0.0, 0.0]
48    etool = [0.0, 0.0, 50.0, 0.0, 0.0, 0.0]
49    rtn = robot.SetExToolCoord(21, etcp, etool)
50    print(f"SetExToolCoord rtn is {rtn}")
51
52    rtn = robot.ExtAxisActiveECoordSys(1, 1, coordSet, 1)
53    print(f"ExtAxisActiveECoordSys rtn is {rtn}")
54
55    robot.CloseRPC()
56
57if __name__ == "__main__":
58    main()