Sterowanie siłą robota ======================= .. toctree:: :maxdepth: 5 Konfiguracja czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_SetConfig(company,device,softversion=0,bus=0)``" "Opis", "Konfiguracja czujnika siły" "Parametry wymagane", "- ``company``: Producent czujnika, 17-Kunwei Technology, 19-Institute 11 of Aerospace, 20-ATI sensor, 21-Zhongke Midian, 22-Weihang Minxin, 23-NBIT, 24-Xinjingcheng (XJC), 26-NSR; - ``device``: Numer urządzenia, Kunwei (0-KWR75B), Institute 11 of Aerospace (0-MCS6A-200-4), ATI (0-AXIA80-M8), Zhongke Midian (0-MST2010), Weihang Minxin (0-WHC6L-YB-10A), NBIT (0-XLH93003ACS), Xinjingcheng XJC (0-XJC-6F-D82), NSR (0-NSR-FTSensorA);" "Parametry domyślne", "- ``softversion``: Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0; - ``bus``: Pozycja magistrali końcowej urządzenia, tymczasowo nieużywane, domyślnie 0;" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Pobieranie konfiguracji czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_GetConfig()``" "Opis", "Pobieranie konfiguracji czujnika siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``[number,company,device,softversion,bus]``: number Numer czujnika; company Producent czujnika siły, 17-Kunwei Technology, 19-Institute 11 of Aerospace, 20-ATI sensor, 21-Zhongke Midian, 22-Weihang Minxin; device Numer urządzenia, Kunwei (0-KWR75B), Institute 11 of Aerospace (0-MCS6A-200-4), ATI (0-AXIA80-M8), Zhongke Midian (0-MST2010), Weihang Minxin (0-WHC6L-YB10A); softvesion Numer wersji oprogramowania, tymczasowo nieużywane, domyślnie 0" Aktywacja czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_Activate(state)``" "Opis", "Aktywacja czujnika siły" "Parametry wymagane", "- ``state``: 0-reset, 1-aktywacja" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Zerowanie czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_SetZero(state)``" "Opis", "Zerowanie czujnika siły" "Parametry wymagane", "- ``state``: 0-usunięcie punktu zerowego, 1-korekcja punktu zerowego" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Ustawianie układu odniesienia czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionchanged:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_SetRCS(ref,coord=[0,0,0,0,0,0])``" "Opis", "Ustawianie układu odniesienia czujnika siły" "Parametry wymagane", "- ``ref``: 0-układ narzędzia, 1-układ bazowy" "Parametry domyślne", "- ``coord``: [x,y,z,rx,ry,rz] wartość niestandardowego układu współrzędnych, domyślnie [0,0,0,0,0,0]" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Ustawianie ciężaru obciążenia pod czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``SetForceSensorPayload(weight)``" "Opis", "Ustawianie ciężaru obciążenia pod czujnikiem siły" "Parametry wymagane", " - ``weight``: Ciężar obciążenia kg" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Ustawianie środka ciężkości obciążenia pod czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``SetForceSensorPayloadCog(x,y,z)``" "Opis", "Ustawianie środka ciężkości obciążenia pod czujnikiem siły" "Parametry wymagane", " - ``x``: Środek ciężkości obciążenia x mm - ``y``: Środek ciężkości obciążenia y mm - ``z``: Środek ciężkości obciążenia z mm " "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Pobieranie ciężaru obciążenia pod czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``GetForceSensorPayload()``" "Opis", "Pobieranie ciężaru obciążenia pod czujnikiem siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``weight``: Ciężar obciążenia kg" Pobieranie środka ciężkości obciążenia pod czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``GetForceSensorPayloadCog()``" "Opis", "Pobieranie środka ciężkości obciążenia pod czujnikiem siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``x``: Środek ciężkości obciążenia x mm - ``y``: Środek ciężkości obciążenia y mm - ``z``: Środek ciężkości obciążenia z mm" Automatyczne zerowanie czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``ForceSensorAutoComputeLoad()``" "Opis", "Automatyczne zerowanie czujnika siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``weight``: Masa czujnika kg - ``pos=[x,y,z]``: Środek ciężkości czujnika mm" Pobieranie danych siły/momentu w układzie odniesienia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_GetForceTorqueRCS()``" "Opis", "Pobieranie danych siły/momentu w układzie odniesienia" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``data=[fx,fy,fz,tx,ty,tz]``: Dane siły/momentu w układzie odniesienia" Pobieranie surowych danych siły/momentu czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_GetForceTorqueOrigin()``" "Opis", "Pobieranie surowych danych siły/momentu czujnika siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``data=[fx,fy,fz,tx,ty,tz]``: Surowe dane siły/momentu czujnika siły" Przykład kodu konfiguracji czujnika siły i automatycznego zerowania ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) error,ft = robot.FT_GetForceTorqueOrigin() print(f"ft origin:{ft[0]},{ft[1]},{ft[2]},{ft[3]},{ft[4]},{ft[5]}") robot.FT_SetZero(1) time.sleep(1) ftCoord = [0, 0, 0, 0, 0, 0] robot.FT_SetRCS(0, ftCoord) robot.SetForceSensorPayload(0.824) robot.SetForceSensorPayloadCog(0.778, 2.554, 48.765) error,weight = robot.GetForceSensorPayload() error,x, y, z = robot.GetForceSensorPayloadCog() print(f"the FT load is {weight}, {x} {y} {z}") robot.SetForceSensorPayload(0) robot.SetForceSensorPayloadCog(0, 0, 0) error,computeWeight, tran = robot.ForceSensorAutoComputeLoad() print(f"the result is weight {computeWeight} pos is {tran[0]} {tran[1]} {tran[2]}") robot.CloseRPC() Rejestracja identyfikacji ciężaru obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_PdIdenRecord(tool_id)``" "Opis", "Rejestracja identyfikacji ciężaru obciążenia" "Parametry wymagane", "- ``tool_id``: Numer układu współrzędnych czujnika, zakres [0~14]" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Obliczanie identyfikacji ciężaru obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_PdIdenCompute()``" "Opis", "Obliczanie identyfikacji ciężaru obciążenia" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``weight``: Ciężar obciążenia, jednostka kg " Rejestracja identyfikacji środka ciężkości obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_PdCogIdenRecord(tool_id,index)``" "Opis", "Rejestracja identyfikacji środka ciężkości obciążenia" "Parametry wymagane", "- ``tool_id``: Numer układu współrzędnych czujnika, zakres [0~14]; - ``index``: Numer punktu [1~3]" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Obliczanie identyfikacji środka ciężkości obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_PdCogIdenCompute()``" "Opis", "Obliczanie identyfikacji środka ciężkości obciążenia" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``cog=[cogx,cogy,cogz]``: Środek ciężkości obciążenia, jednostka mm " Przykład kodu identyfikacji obciążenia czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) error,ft = robot.FT_GetForceTorqueOrigin() print(f"ft origin:{ft[0]},{ft[1]},{ft[2]},{ft[3]},{ft[4]},{ft[5]}") robot.FT_SetZero(1) time.sleep(1) tcoord = [0, 0, 35.0, 0, 0, 0] robot.SetToolCoord(10, tcoord, 1, 0, 0, 0) robot.FT_PdIdenRecord(10) time.sleep(1) error,weight = robot.FT_PdIdenCompute() print(f"payload weight:{weight}") desc_p1 = [-419.524, -13.000, 351.569, -178.118, 0.314, 3.833] desc_p2 = [-321.222, 185.189, 335.520, -179.030, -1.284, -29.869] desc_p3 = [-327.622, 402.230, 320.402, -178.067, 2.127, -46.207] robot.MoveCart(desc_p1, 0, 0, 100.0) time.sleep(1) robot.FT_PdCogIdenRecord(10, 1) robot.MoveCart(desc_p2, 0, 0, 100.0) time.sleep(1) robot.FT_PdCogIdenRecord(10, 2) robot.MoveCart(desc_p3, 0, 0, 100.0) time.sleep(1) robot.FT_PdCogIdenRecord(10, 3) time.sleep(1) error,cog = robot.FT_PdCogIdenCompute() print(f"FT_PdCogIdenCompute return {error}") print(f"cog:{cog[0]},{cog[1]},{cog[2]}") robot.CloseRPC() Ochrona przed kolizją ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_Guard(flag,sensor_num,select,force_torque,max_threshold,min_threshold)``" "Opis", "Ochrona przed kolizją" "Parametry wymagane", "- ``flag``: 0-wyłączenie ochrony przed kolizją, 1-włączenie ochrony przed kolizją; - ``sensor_num``: Numer czujnika siły; - ``select``: Czy sześć stopni swobody wykrywa kolizję [fx,fy,fz,mx,my,mz], 0-nieaktywne, 1-aktywne; - ``force_torque``: Siła/moment wykrywania kolizji, jednostka N lub Nm; - ``max_threshold``: Próg maksymalny; - ``min_threshold``: Próg minimalny; - Zakres wykrywania siły/momentu: (force_torque-min_threshold, force_torque+max_threshold)" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Przykład kodu ochrony przed kolizją ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) sensor_id = 1 select = [1, 1, 1, 1, 1, 1] max_threshold = [10.0, 10.0, 10.0, 10.0, 10.0, 10.0] min_threshold = [5.0, 5.0, 5.0, 5.0, 5.0, 5.0] ft = None desc_p1 = [-419.524, -13.000, 351.569, -178.118, 0.314, 3.833] desc_p2 = [-321.222, 185.189, 335.520, -179.030, -1.284, -29.869] desc_p3 = [-327.622, 402.230, 320.402, -178.067, 2.127, -46.207] error = robot.FT_Guard(1, sensor_id, select,[0.0,0.0,0.0,0.0,0.0,0.0], max_threshold, min_threshold) robot.MoveCart(desc_p1, 0, 0, 100.0) robot.MoveCart(desc_p2, 0, 0, 100.0) robot.MoveCart(desc_p3, 0, 0, 100.0) robot.FT_Guard(0, sensor_id, select,[0.0,0.0,0.0,0.0,0.0,0.0], max_threshold, min_threshold) robot.CloseRPC() Sterowanie stałą siłą ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_Control(flag, sensor_id, select, ft, ft_pid, adj_sign, ILC_sign, max_dis, max_ang, M=None, B=None, threshold=[0.2,0.2], adjustCoeff=[1.0,1.0], polishRadio=0, filter_Sign=0, posAdapt_sign=0, isNoBlock=0)``" "Opis", "Sterowanie stałą siłą" "Parametry wymagane", "- ``flag``: Flaga włączenia sterowania stałą siłą, 0-wył., 1-wł.; - ``sensor_id``: Numer czujnika siły; - ``select``: Czy sześć stopni swobody jest wykrywanych [fx,fy,fz,mx,my,mz], 0-nieaktywne, 1-aktywne; - ``ft``: Siła/moment wykrywania, jednostka N lub Nm; - ``ft_pid``: [f_p,f_i,f_d,m_p,m_i,m_d], parametry PID siły, parametry PID momentu; - ``adj_sign``: Stan uruchomienia/zatrzymania adaptacji, 0-wył., 1-wł.; - ``ILC_sign``: Stan uruchomienia/zatrzymania sterowania ILC, 0-zatrzymaj, 1-trenuj, 2-praktykuj; - ``max_dis``: Maksymalna odległość regulacji; - ``max_ang``: Maksymalny kąt regulacji;" "Parametry domyślne", "- ``M``: Parametr masy; - ``B``: Parametr tłumienia; - ``threshold``: Próg uruchomienia rx, ry [0-10], domyślnie 0.2; - ``adjustCoeff``: Współczynnik regulacji momentu rx, ry [0-1], domyślnie 1; - ``polishRadio``: Promień tarczy szlifierskiej, jednostka mm; - ``filter_Sign``: Flaga włączenia filtracji 0-wył.; 1-wł., domyślnie 0-wył.; - ``posAdapt_sign``: Flaga włączenia zgodności postawy 0-wył.; 1-wł., domyślnie 0-wył.; - ``isNoBlock``: Flaga blokowania, 0-blokujący; 1-nieblokujący domyślnie 0-blokujący;" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Przykład kodu sterowania stałą siłą z tłumieniem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time robot = Robot.RPC('192.168.58.2') sensor_id = 10 select = [0, 0, 1, 0, 0, 0] ft_pid = [0.0008, 0.0, 0.0, 0.0, 0.0, 0.0] adj_sign = 0 ILC_sign = 0 max_dis = 1000.0 max_ang = 20.0 ft = [0.0] * 6 epos = [0.0] * 4 j1 = [80.765, -98.795, 106.548, -97.734, -89.999, 94.842] j2 = [43.067, -84.429, 92.620, -98.175, -90.011, 57.144] desc_p1 = [5.009, -547.463, 262.053, -179.999, -0.019, 75.923] desc_p2 = [-347.966, -547.463, 262.048, -180.000, -0.019, 75.923] offset_pos = [0.0] * 6 M = [2.0, 2.0] B = [15.0, 15.0] threshold = [1.0, 1.0] adjustCoeff = [1.0, 0.8] polishRadio = 0.0 filter_Sign = 0 posAdapt_sign = 1 isNoBlock = 0 ft[2] = -10.0 while True: rtn = robot.FT_Control(1, sensor_id, select, ft, ft_pid, adj_sign, ILC_sign, max_dis, max_ang, M, B, threshold,adjustCoeff, 0, 0, 1, 0) print(f"FT_Control start rtn is {rtn}") rtn = robot.MoveL(desc_pos=desc_p1, tool=1, user=0, vel=100, acc=100, ovl=100, blendR=-1, blendMode = 0, exaxis_pos=epos, search=0, offset_flag=0, offset_pos=offset_pos) rtn = robot.MoveL(desc_pos=desc_p2, tool=1, user=0, vel=100, acc=100, ovl=100, blendR=-1, blendMode = 0, exaxis_pos=epos, search=0, offset_flag=0, offset_pos=offset_pos) rtn = robot.FT_Control(0, sensor_id, select, ft, ft_pid, adj_sign, ILC_sign, max_dis, max_ang, M, B, threshold,adjustCoeff, 0, 0, 1, 0) print(f"FT_Control end rtn is {rtn}") robot.CloseRPC() return 0 Poszukiwanie spiralne ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_SpiralSearch(rcs, ft, dr=0.7, max_t_ms=60000, max_vel=5)``" "Opis", "Poszukiwanie spiralne" "Parametry wymagane", "- ``rcs``: Układ odniesienia, 0-układ narzędzia, 1-układ bazowy - ``ft``: Próg siły lub momentu (0~100), jednostka N lub Nm;" "Parametry domyślne", "- ``dr``: Posuw promienia na okrążenie, jednostka mm domyślnie 0.7; - ``max_t_ms``: Maksymalny czas poszukiwania, jednostka ms domyślnie 60000; - ``max_vel``: Maksymalna prędkość liniowa, jednostka mm/s domyślnie 5" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Wkładanie obrotowe ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_RotInsertion(rcs, ft, orn, angVelRot=3, angleMax=45, angAccmax=0, rotorn=1, strategy=0)``" "Opis", "Wkładanie obrotowe" "Parametry wymagane", "- ``rcs``: Układ odniesienia, 0-układ narzędzia, 1-układ bazowy; - ``ft``: Próg siły lub momentu (0~100), jednostka N lub Nm; - ``orn``: Kierunek siły/momentu, 1-wzdłuż osi Z, 2-wokół osi Z;" "Parametry domyślne", "- ``angVelRot``: Prędkość kątowa obrotu, jednostka °/s, domyślnie 3; - ``angleMax``: Maksymalny kąt obrotu, jednostka ° domyślnie 45; - ``angAccmax``: Maksymalne przyspieszenie kątowe, jednostka °/s^2, tymczasowo nieużywane domyślnie 0; - ``rotorn``: Kierunek obrotu, 1-zgodnie z ruchem wskazówek zegara, 2-przeciwnie do ruchu wskazówek zegara domyślnie 1; - ``strategy``: Strategia postępowania przy niewykryciu siły/momentu, 0-zgłoś błąd; 1-ostrzeżenie, kontynuuj ruch" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Przykład kodu instrukcji poszukiwania spiralnego, wkładania liniowego itp. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time robot = Robot.RPC('192.168.58.2') j1=[-11.904,-99.669,117.473,-108.616,-91.726,74.256] j2=[-45.615,-106.172,124.296,-107.151,-91.282,74.255] j3=[-29.777,-84.536,109.275,-114.075,-86.655,74.257] j4=[-31.154,-95.317,94.276,-88.079,-89.740,74.256] desc_pos1=[-419.524,-13.000,351.569,-178.118,0.314,3.833] desc_pos2=[-321.222,185.189,335.520,-179.030,-1.284,-29.869] desc_pos3=[-487.434,154.362,308.576,176.600,0.268,-14.061] desc_pos4=[-443.165,147.881,480.951,179.511,-0.775,-15.409] offset_pos=[0.0]*6 epos=[0.0]*4 tool=0 user=0 vel=100.0 acc=100.0 ovl=100.0 oacc=100.0 blendT=0.0 blendR=0.0 flag=0 search=0 blendMode=0 velAccMode=0 robot.SetSpeed(20) rtn=robot.MoveJ(joint_pos=j1,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,exaxis_pos=epos,blendT=blendT,offset_flag=flag,offset_pos=offset_pos) print(f"movejerrcode:{rtn}") rtn=robot.MoveL(desc_pos=desc_pos2,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,blendR=blendR,blendMode=blendMode,exaxis_pos=epos,search=search,offset_flag=flag,offset_pos=offset_pos,oacc=oacc,velAccParamMode=velAccMode) print(f"movelerrcode:{rtn}") rtn=robot.MoveC(desc_pos_p=desc_pos3,tool_p=tool,user_p=user,vel_p=vel,acc_p=acc,exaxis_pos_p=epos,offset_flag_p=flag,offset_pos_p=offset_pos,desc_pos_t=desc_pos4,tool_t=tool,user_t=user,vel_t=vel,acc_t=acc,exaxis_pos_t=epos,offset_flag_t=flag,offset_pos_t=offset_pos,ovl=ovl,blendR=blendR,oacc=oacc,velAccParamMode=velAccMode) print(f"movecerrcode:{rtn}") rtn=robot.MoveJ(joint_pos=j2,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,exaxis_pos=epos,blendT=blendT,offset_flag=flag,offset_pos=offset_pos) print(f"movejerrcode:{rtn}") rtn=robot.Circle(desc_pos_p=desc_pos3,tool_p=tool,user_p=user,vel_p=vel,acc_p=acc,exaxis_pos_p=epos,desc_pos_t=desc_pos1,tool_t=tool,user_t=user,vel_t=vel,acc_t=acc,exaxis_pos_t=epos,ovl=ovl,offset_flag=flag,offset_pos=offset_pos,oacc=oacc,blendR=-1,velAccParamMode=velAccMode) print(f"circleerrcode:{rtn}") rtn=robot.MoveCart(desc_pos=desc_pos4,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,blendT=blendT,config=-1) print(f"MoveCarterrcode:{rtn}") rtn=robot.MoveJ(joint_pos=j1,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,exaxis_pos=epos,blendT=blendT,offset_flag=flag,offset_pos=offset_pos) print(f"movejerrcode:{rtn}") rtn=robot.MoveL(desc_pos=desc_pos2,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,blendR=blendR,blendMode=blendMode,exaxis_pos=epos,search=search,offset_flag=flag,offset_pos=offset_pos,config=-1,velAccParamMode=velAccMode) print(f"movelerrcode:{rtn}") rtn=robot.MoveC(desc_pos_p=desc_pos3,tool_p=tool,user_p=user,vel_p=vel,acc_p=acc,exaxis_pos_p=epos,offset_flag_p=flag,offset_pos_p=offset_pos,desc_pos_t=desc_pos4,tool_t=tool,user_t=user,vel_t=vel,acc_t=acc,exaxis_pos_t=epos,offset_flag_t=flag,offset_pos_t=offset_pos,ovl=ovl,blendR=blendR,config=-1,velAccParamMode=velAccMode) print(f"movecerrcode:{rtn}") rtn=robot.MoveJ(joint_pos=j2,tool=tool,user=user,vel=vel,acc=acc,ovl=ovl,exaxis_pos=epos,blendT=blendT,offset_flag=flag,offset_pos=offset_pos) print(f"movejerrcode:{rtn}") rtn=robot.Circle(desc_pos_p=desc_pos3,tool_p=tool,user_p=user,vel_p=vel,acc_p=acc,exaxis_pos_p=epos,desc_pos_t=desc_pos1,tool_t=tool,user_t=user,vel_t=vel,acc_t=acc,exaxis_pos_t=epos,ovl=ovl,offset_flag=flag,offset_pos=offset_pos,oacc=oacc,blendR=-1,velAccParamMode=velAccMode) print(f"circleerrcode:{rtn}") robot.CloseRPC() return0 Wkładanie liniowe ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_LinInsertion(rcs, ft, disMax, linorn, lin_v=1.0, lin_a=1.0)``" "Opis", "Wkładanie liniowe" "Parametry wymagane", "- ``rcs``: Układ odniesienia, 0-układ narzędzia, 1-układ bazowy; - ``ft``: Próg siły lub momentu (0~100), jednostka N lub Nm; - ``disMax``: Maksymalna odległość wkładania, jednostka mm; - ``linorn``: Kierunek wkładania: 0-kierunek ujemny, 1-kierunek dodatni" "Parametry domyślne", "- ``lin_v``: Prędkość liniowa, jednostka mm/s domyślnie 1; - ``lin_a``: Przyspieszenie liniowe, jednostka mm/s^2, tymczasowo nieużywane domyślnie 1" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Przykład kodu instrukcji poszukiwania spiralnego, wkładania liniowego itp. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) status = 1 sensor_num = 1 gain = [0.0001, 0.0, 0.0, 0.0, 0.0, 0.0] adj_sign = 0 ILC_sign = 0 max_dis = 100.0 max_ang = 5.0 ft = [0.0,0.0,-10.0,0.0,0.0,0.0] rcs = 0 dr = 0.7 fFinish = 1.0 t = 60000.0 vmax = 3.0 force_goal = 20.0 lin_v = 0.0 lin_a = 0.0 disMax = 100.0 linorn = 1 angVelRot = 2.0 forceInsertion = 1.0 angleMax = 45 orn = 1 angAccmax = 0.0 rotorn = 1 select1 = [0, 0, 1, 1, 1, 0] robot.FT_Control(status, sensor_num, select1, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) rtn = robot.FT_SpiralSearch(rcs, dr, fFinish, t, vmax) print(f"FT_SpiralSearch rtn is {rtn}") robot.FT_Control(0, sensor_num, select1, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) select2 = [1, 1, 1, 0, 0, 0] gain[0] = 0.00005 ft[2] = -30.0 robot.FT_Control(1, sensor_num, select2, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) rtn = robot.FT_LinInsertion(rcs, force_goal, lin_v, lin_a, disMax, linorn) print(f"FT_LinInsertion rtn is {rtn}") robot.FT_Control(0, sensor_num, select2, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) select3 = [0, 0, 1, 1, 1, 0] ft[2] = -10.0 gain[0] = 0.0001 robot.FT_Control(1, sensor_num, select3, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) rtn = robot.FT_RotInsertion(rcs, angVelRot, forceInsertion, angleMax, orn, angAccmax, rotorn) print(f"FT_RotInsertion rtn is {rtn}") robot.FT_Control(0, sensor_num, select3, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) select4 = [1, 1, 1, 0, 0, 0] ft[2] = -30.0 robot.FT_Control(1, sensor_num, select4, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) rtn = robot.FT_LinInsertion(rcs, force_goal, lin_v, lin_a, disMax, linorn) print(f"FT_LinInsertion rtn is {rtn}") robot.FT_Control(0, sensor_num, select4, ft, gain, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) robot.CloseRPC() Lokalizacja powierzchni ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_FindSurface (rcs, dir, axis, disMax, ft, lin_v=3.0, lin_a=0.0)``" "Opis", "Lokalizacja powierzchni" "Parametry wymagane", "- ``rcs``: Układ odniesienia, 0-układ narzędzia, 1-układ bazowy; - ``dir``: Kierunek ruchu, 1-kierunek dodatni, 2-kierunek ujemny; - ``axis``: Oś ruchu, 1-x, 2-y, 3-z; - ``disMax``: Maksymalna odległość poszukiwania, jednostka mm; - ``ft``: Próg siły zakończenia działania, jednostka N;" "Parametry domyślne", "- ``lin_v``: Prędkość liniowa poszukiwania, jednostka mm/s domyślnie 3; - ``lin_a``: Przyspieszenie liniowe poszukiwania, jednostka mm/s^2 domyślnie 0;" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Rozpoczęcie obliczania pozycji środkowej płaszczyzny ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_CalCenterStart()``" "Opis", "Rozpoczęcie obliczania pozycji środkowej płaszczyzny" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Zakończenie obliczania pozycji środkowej płaszczyzny ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_CalCenterEnd()``" "Opis", "Zakończenie obliczania pozycji środkowej płaszczyzny" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode - ``pos=[x,y,z,rx,ry,rz]``: Pozycja środkowej płaszczyzny" Przykład kodu lokalizacji powierzchni ++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) rcs = 0 dir = 1 axis = 1 lin_v = 3.0 lin_a = 0.0 maxdis = 50.0 ft_goal = 2.0 desc_pos = [-419.524, -13.000, 351.569, -178.118, 0.314, 3.833] xcenter = [0, 0, 0, 0, 0, 0] ycenter = [0, 0, 0, 0, 0, 0] ft = [-2.0, 0.0, 0.0, 0.0, 0.0, 0.0] robot.MoveCart(desc_pos, 9, 0, 100.0) robot.FT_CalCenterStart() robot.FT_FindSurface(rcs, dir, axis, lin_v, lin_a, maxdis, ft_goal) robot.MoveCart(desc_pos, 9, 0) robot.WaitMs(1000) dir = 2 robot.FT_FindSurface(rcs, dir, axis, lin_v, lin_a, maxdis, ft_goal) error,xcenter = robot.FT_CalCenterEnd() print(f"xcenter:{xcenter[0]},{xcenter[1]},{xcenter[2]},{xcenter[3]},{xcenter[4]},{xcenter[5]}") robot.MoveCart(xcenter, 9, 0, 60.0) robot.FT_CalCenterStart() dir = 1 axis = 2 lin_v = 6.0 maxdis = 150.0 robot.FT_FindSurface(rcs, dir, axis, lin_v, lin_a, maxdis, ft_goal) robot.MoveCart(desc_pos, 9, 0, 100.0) robot.WaitMs(1000) dir = 2 robot.FT_FindSurface(rcs, dir, axis, lin_v, lin_a, maxdis, ft_goal) error,ycenter = robot.FT_CalCenterEnd() print(f"ycenter:{ycenter[0]},{ycenter[1]},{ycenter[2]},{ycenter[3]},{ycenter[4]},{ycenter[5]}") robot.MoveCart(ycenter, 9, 0, 60.0) robot.CloseRPC() Włączenie sterowania zgodnego ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_ComplianceStart(p, force)``" "Opis", "Włączenie sterowania zgodnego" "Parametry wymagane", "- ``p``: Współczynnik regulacji pozycji lub współczynnik zgodności - ``force``: Próg siły włączenia zgodności, jednostka N" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Wyłączenie sterowania zgodnego ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``FT_ComplianceStop()``" "Opis", "Wyłączenie sterowania zgodnego" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Przykład kodu sterowania zgodnego +++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') company = 24 device = 0 softversion = 0 bus = 1 index = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) error,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) flag = 1 sensor_id = 1 select = [1, 1, 1, 0, 0, 0] ft_pid = [0.0005, 0.0, 0.0, 0.0, 0.0, 0.0] adj_sign = 0 ILC_sign = 0 max_dis = 100.0 max_ang = 0.0 ft = [-10.0, -10.0, -10.0, 0.0, 0.0, 0.0] offset_pos = [0.0,0.0,0.0,0.0,0.0,0.0] # Zastępuje DescPose(0, 0, 0, 0, 0, 0) epos = [0.0,0.0,0.0,0.0] # Zastępuje ExaxisPos(0, 0, 0, 0) j1 = [-11.904, -99.669, 117.473, -108.616, -91.726, 74.256] # JointPos j2 = [-45.615, -106.172, 124.296, -107.151, -91.282, 74.255] desc_p1 = [-419.524, -13.000, 351.569, -178.118, 0.314, 3.833] # DescPose desc_p2 = [-321.222, 185.189, 335.520, -179.030, -1.284, -29.869] robot.FT_Control(flag, sensor_id, select, ft, ft_pid, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) p = 0.00005 force = 30.0 rtn = robot.FT_ComplianceStart(p, force) print(f"FT_ComplianceStart rtn is {rtn}") count = 3 while count > 0: robot.MoveL(desc_pos=desc_p1,tool= 0,user= 0,vel= 100.0) robot.MoveL(desc_pos=desc_p2,tool= 0,user= 0,vel= 100.0) count -= 1 robot.FT_ComplianceStop() print(f"FT_ComplianceStop rtn is {rtn}") flag = 0 robot.FT_Control(flag, sensor_id, select, ft, ft_pid, adj_sign, ILC_sign, max_dis, max_ang, 0, 0, 0) robot.CloseRPC() Inicjalizacja filtracji identyfikacji obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.1 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``LoadIdentifyDynFilterInit()``" "Opis", "Inicjalizacja filtracji identyfikacji obciążenia" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Inicjalizacja zmiennych identyfikacji obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.1 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``LoadIdentifyDynVarInit()``" "Opis", "Inicjalizacja zmiennych identyfikacji obciążenia" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode " Główny program identyfikacji obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.1 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``LoadIdentifyMain(joint_torque, joint_pos, t)``" "Opis", "Główny program identyfikacji obciążenia" "Parametry wymagane", "- ``joint_torque``: Moment obrotowy przegubów j1-j6; - ``joint_pos``: Pozycja przegubów j1-j6 - ``t``: Okres próbkowania" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Pobieranie wyniku identyfikacji obciążenia ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.1 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``LoadIdentifyGetResult(gain)``" "Opis", "Pobieranie wyniku identyfikacji obciążenia" "Parametry wymagane", "- ``gain``: Współczynnik członu grawitacyjnego double[6], współczynnik członu odśrodkowego double[6]" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``weight``: Ciężar obciążenia - ``cog=[x,y,z]``: Współrzędne środka ciężkości obciążenia" Przykład kodu identyfikacji obciążenia robota ++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') retval = robot.LoadIdentifyDynFilterInit() print(f"LoadIdentifyDynFilterInit retval is: {retval}") retval = robot.LoadIdentifyDynVarInit() print(f"LoadIdentifyDynVarInit retval is: {retval}") error, posJ = robot.GetActualJointPosDegree(0) posJ[1] += 10 # Modyfikacja przegubu 2 error, joint_toq = robot.GetJointTorques(0) joint_toq[1] += 2 # Modyfikacja momentu na przegubie 2 tmpTorque = joint_toq.copy() retval = robot.LoadIdentifyMain(tmpTorque, posJ, 1) print(f"LoadIdentifyMain retval is: {retval}") gain = [0, 0.05, 0, 0, 0, 0, 0, 0.02, 0, 0, 0, 0] weight = [0.0] load_pos = [0.0, 0.0, 0.0] retval, weight, load_pos = robot.LoadIdentifyGetResult(gain) print(f"LoadIdentifyGetResult retval is: {retval} ; weight is {weight} cog is {load_pos[0]} {load_pos[1]} {load_pos[2]}") robot.CloseRPC() Przeciąganie wspomagane czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.1.3 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``EndForceDragControl(status, asaptiveFlag, interfereDragFlag, ingularityConstraintsFlag, M, B, K, F, Fmax, Vmax, forceCollisionFlag=0)``" "Opis", "Przeciąganie wspomagane czujnikiem siły" "Parametry wymagane", "- ``status``: Stan sterowania, 0-wyłączone; 1-włączone - ``asaptiveFlag``: Flaga włączenia adaptacji, 0-wyłączona; 1-włączona - ``interfereDragFlag``: Flaga przeciągania w strefie interferencji, 0-wyłączona; 1-włączona - ``ingularityConstraintsFlag``: Strategia punktu osobliwego, 0-unikanie; 1-przechodzenie - ``forceCollisionFlag``: Flaga wykrywania kolizji robota podczas przeciągania wspomaganego; 0-wyłączona; 1-włączona - ``M=[m1,m2,m3,m4,m5,m6]``: Współczynniki bezwładności - ``B=[b1,b2,b3,b4,b5,b6]``: Współczynniki tłumienia - ``K=[k1,k2,k3,k4,k5,k6]``: Współczynniki sztywności - ``F=[f1,f2,f3,f4,f5,f6]``: Próg sześciowymiarowej siły przeciągania - ``Fmax``: Maksymalne ograniczenie siły przeciągania - ``Vmax``: Maksymalne ograniczenie prędkości przegubów" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Pobieranie stanu przełącznika przeciągania czujnika siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``GetForceAndTorqueDragState()``" "Opis", "Pobieranie stanu przełącznika przeciągania czujnika siły" "Parametry wymagane", "Brak" "Parametry domyślne", "Brak" "Wartość zwracana", "- Kod błędu sukces-0 błąd- errcode - ``dragState``: Stan sterowania przeciąganiem wspomaganym czujnikiem siły, 0-wyłączone; 1-włączone - ``sixDimensionalDragState``: Stan sterowania przeciąganiem wspomaganym sześciowymiarową siłą, 0-wyłączone; 1-włączone" Automatyczne włączanie czujnika siły po wyczyszczeniu błędu ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``SetForceSensorDragAutoFlag(status)``" "Opis", "Automatyczne włączanie czujnika siły po wyczyszczeniu błędu" "Parametry wymagane", "- ``status``: Stan sterowania, 0-wyłączone; 1-włączone" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Przykład kodu przeciągania wspomaganego czujnikiem siły ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') robot.SetForceSensorDragAutoFlag(1) M = [15.0, 15.0, 15.0, 0.5, 0.5, 0.1] B = [150.0, 150.0, 150.0, 5.0, 5.0, 1.0] K = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] F = [10.0, 10.0, 10.0, 1.0, 1.0, 1.0] robot.EndForceDragControl(1, 0, 0, 0, M, B, K, F, 50, 100) time.sleep(5) drag_state = 0 six_dimensional_drag_state = 0 error,drag_state, six_dimensional_drag_state = robot.GetForceAndTorqueDragState() print(f"the drag state is {drag_state} {six_dimensional_drag_state}") robot.EndForceDragControl(0, 0, 0, 0, M, B, K, F, 50, 100) robot.CloseRPC() Ustawianie przełącznika i parametrów mieszanego przeciągania z impedancją sześciowymiarowej siły i przegubów +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.0.5 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``ForceAndJointImpedanceStartStop(status, impedanceFlag, lamdeDain, KGain, BGain, dragMaxTcpVel, dragMaxTcpOriVel)``" "Opis", "Ustawianie przełącznika i parametrów mieszanego przeciągania z impedancją sześciowymiarowej siły i przegubów" "Parametry wymagane", "- ``status``: Stan sterowania, 0-wyłączone; 1-włączone - ``impedanceFlag``: Flaga włączenia impedancji, 0-wyłączona; 1-włączona - ``lamdeDain``: [D1,D2,D3,D4,D5, D6] Wzmocnienie przeciągania - ``KGain``: [K1,K2,K3,K4,K5,K6] Wzmocnienie sztywności - ``BGain``: [B1,B2,B3,B4,B5,B] Wzmocnienie tłumienia - ``dragMaxTcpVel``: Maksymalne ograniczenie prędkości liniowej końcówki podczas przeciągania - ``dragMaxTcpOriVel``: Maksymalne ograniczenie prędkości kątowej końcówki podczas przeciągania" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Przykład kodu mieszanego przeciągania z impedancją sześciowymiarowej siły i przegubów ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot import time # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') robot.DragTeachSwitch(1) lamde_dain = [3.0, 2.0, 2.0, 2.0, 2.0, 3.0] k_gain = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0] b_gain = [150.0, 150.0, 150.0, 5.0, 5.0, 1.0] rtn = robot.ForceAndJointImpedanceStartStop(1, 0, lamde_dain, k_gain, b_gain, 1000, 180) print(f"ForceAndJointImpedanceStartStop rtn is {rtn}") time.sleep(5) robot.DragTeachSwitch(0) rtn = robot.ForceAndJointImpedanceStartStop(0, 0, lamde_dain, k_gain, b_gain, 1000, 180) print(f"ForceAndJointImpedanceStartStop rtn is {rtn}") robot.CloseRPC() Sterowanie uruchamianiem/zatrzymywaniem impedancji ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. versionadded:: python SDK-v2.1.6 .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``ImpedanceControlStartStop(status, workSpace, forceThreshold, m, b, k, maxV, maxVA, maxW, maxWA)``" "Opis", "Sterowanie uruchamianiem/zatrzymywaniem impedancji" "Parametry wymagane", "- ``status``: 0-wyłączone; 1-włączone - ``workSpace``: 0-przestrzeń przegubów; 1-przestrzeń kartezjańska - ``forceThreshold``: Próg siły wyzwalającej (N) - ``m``: Parametr masy - ``b``: Parametr tłumienia - ``k``: Parametr sztywności - ``maxV``: Maksymalna prędkość liniowa (mm/s) - ``maxVA``: Maksymalne przyspieszenie liniowe (mm/s2) - ``maxW``: Maksymalna prędkość kątowa (°/s) - ``maxWA``: Maksymalne przyspieszenie kątowe (°/s2)" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode" Przykład kodu sterowania uruchamianiem/zatrzymywaniem impedancji ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. code-block:: python :linenos: from fairino import Robot # Połączenie z kontrolerem robota, po pomyślnym połączeniu zwraca obiekt robota robot = Robot.RPC('192.168.58.2') j1 = [102.622, -135.990, 120.769, -73.950, -90.848, 35.507] j2 = [93.674, -80.062, 82.947, -92.199, -90.967, 26.559] desc_pos1 = [136.552, -149.799, 449.532, 179.817, -1.172, 157.123] desc_pos2 = [136.540, -561.048, 449.542, 179.819, -1.172, 157.122] offset_pos = [0.0] * 6 epos = [0.0] * 4 tool = 0 user = 0 vel = 100.0 acc = 200.0 ovl = 100.0 blendT = -1.0 blendR = -1.0 flag = 0 search = 0 robot.SetSpeed(20) company = 17 device = 0 softversion = 0 bus = 1 robot.FT_SetConfig(company, device, softversion, bus) time.sleep(1) rnt,[company, device, softversion, bus] = robot.FT_GetConfig() print(f"FT config:{company},{device},{softversion},{bus}") time.sleep(1) robot.FT_Activate(0) time.sleep(1) robot.FT_Activate(1) time.sleep(1) time.sleep(1) robot.FT_SetZero(0) time.sleep(1) robot.FT_SetZero(1) time.sleep(1) forceThreshold = [30.0, 30.0, 30.0, 5.0, 5.0, 5.0] m = [0.1, 0.1, 0.1, 0.02, 0.02, 0.02] b = [1.0, 1.0, 1.0, 0.08, 0.08, 0.08] k = [0.0] * 6 rtn = robot.ImpedanceControlStartStop(1, 1, forceThreshold, m, b, k, 1000, 500, 100, 100) print(f"ImpedanceControlStartStop errcode:{rtn}") rtn = robot.MoveL(desc_pos=desc_pos1,tool= tool,user= user,vel= vel,speedPercent=1) rtn = robot.MoveL(desc_pos=desc_pos2,tool= tool,user= user,vel= vel,speedPercent=1) rtn = robot.MoveL(desc_pos=desc_pos1,tool= tool,user= user,vel= vel,speedPercent=1) rtn = robot.MoveL(desc_pos=desc_pos2,tool= tool,user= user,vel= vel,speedPercent=1) rtn = robot.MoveL(desc_pos=desc_pos1,tool= tool,user= user,vel= vel,speedPercent=1) rtn = robot.MoveL(desc_pos=desc_pos2,tool= tool,user= user,vel= vel,speedPercent=1) print(f"movel errcode:{rtn}") robot.ImpedanceControlStartStop(0, 1, forceThreshold, m, b, k, 1000, 500, 100, 100) robot.CloseRPC() Włączanie funkcji kompensacji momentu i współczynnik kompensacji ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .. csv-table:: :stub-columns: 1 :widths: 10 30 "Prototyp", "``SetCoderCompenParams(status, torqueCoeff)``" "Opis", "Włączanie funkcji kompensacji momentu i współczynnik kompensacji" "Parametry wymagane", "- ``status``: Przełącznik, 0-wyłączone; 1-włączone - ``torqueCoeff``: Współczynniki kompensacji momentu J1-J6 [0-1]" "Parametry domyślne", "Brak" "Wartość zwracana", "Kod błędu sukces-0 błąd- errcode"