From bf9d36f2d9a1cc601171640f899665133aea9b95 Mon Sep 17 00:00:00 2001
From: m-guberina <gubi.guberina@gmail.com>
Date: Fri, 17 Nov 2023 21:54:57 +0100
Subject: [PATCH] click works in pinocchio

---
 .../.measuring_stick.py.swp => .setup.py.swp} | Bin 12288 -> 12288 bytes
 python/README.md                              |   4 +
 python/setup.py                               |  28 ++++--
 python/ur_simple_control.egg-info/PKG-INFO    |   7 ++
 python/ur_simple_control.egg-info/SOURCES.txt |   9 ++
 .../dependency_links.txt                      |   1 +
 .../ur_simple_control.egg-info/not-zip-safe   |   1 +
 .../ur_simple_control.egg-info/top_level.txt  |   1 +
 python/ur_simple_control/__init__.py          |   4 +
 .../__pycache__/__init__.cpython-310.pyc      | Bin 189 -> 312 bytes
 python/ur_simple_control/clik/.clik.py.swp    | Bin 28672 -> 28672 bytes
 .../clik/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes
 python/ur_simple_control/clik/clik.py         |  12 +--
 .../dmp/__pycache__/__init__.cpython-310.pyc  | Bin 0 -> 193 bytes
 .../robot_descriptions/__init__.py            |   0
 .../__pycache__/__init__.cpython-310.pyc      | Bin 0 -> 208 bytes
 .../robot_descriptions/config/__init__.py     |   0
 .../config/ur5e/__init__.py                   |   0
 .../robot_descriptions/meshes/__init__.py     |   0
 .../meshes/ur5e/__init__.py                   |   0
 .../meshes/ur5e/collision/__init__.py         |   0
 .../meshes/ur5e/visual/__init__.py            |   0
 .../robot_descriptions/urdf/__init__.py       |   0
 .../urdf/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 213 bytes
 .../util/.boilerplate_wrapper.py.swp          | Bin 28672 -> 32768 bytes
 .../ur_simple_control/util/.get_model.py.swp  | Bin 0 -> 12288 bytes
 .../util/__pycache__/__init__.cpython-310.pyc | Bin 0 -> 194 bytes
 .../boilerplate_wrapper.cpython-310.pyc       | Bin 0 -> 5360 bytes
 .../__pycache__/get_model.cpython-310.pyc     | Bin 0 -> 1996 bytes
 .../robotiq_gripper.cpython-310.pyc           | Bin 0 -> 12248 bytes
 .../util/boilerplate_wrapper.py               |  88 +++++++++++-------
 python/ur_simple_control/util/get_model.py    |   8 +-
 32 files changed, 114 insertions(+), 49 deletions(-)
 rename python/{convenience_tool_box/.measuring_stick.py.swp => .setup.py.swp} (84%)
 create mode 100644 python/ur_simple_control.egg-info/PKG-INFO
 create mode 100644 python/ur_simple_control.egg-info/SOURCES.txt
 create mode 100644 python/ur_simple_control.egg-info/dependency_links.txt
 create mode 100644 python/ur_simple_control.egg-info/not-zip-safe
 create mode 100644 python/ur_simple_control.egg-info/top_level.txt
 create mode 100644 python/ur_simple_control/clik/__pycache__/__init__.cpython-310.pyc
 create mode 100644 python/ur_simple_control/dmp/__pycache__/__init__.cpython-310.pyc
 create mode 100644 python/ur_simple_control/robot_descriptions/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/__pycache__/__init__.cpython-310.pyc
 create mode 100644 python/ur_simple_control/robot_descriptions/config/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/config/ur5e/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/meshes/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/meshes/ur5e/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/meshes/ur5e/collision/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/meshes/ur5e/visual/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/urdf/__init__.py
 create mode 100644 python/ur_simple_control/robot_descriptions/urdf/__pycache__/__init__.cpython-310.pyc
 create mode 100644 python/ur_simple_control/util/.get_model.py.swp
 create mode 100644 python/ur_simple_control/util/__pycache__/__init__.cpython-310.pyc
 create mode 100644 python/ur_simple_control/util/__pycache__/boilerplate_wrapper.cpython-310.pyc
 create mode 100644 python/ur_simple_control/util/__pycache__/get_model.cpython-310.pyc
 create mode 100644 python/ur_simple_control/util/__pycache__/robotiq_gripper.cpython-310.pyc

diff --git a/python/convenience_tool_box/.measuring_stick.py.swp b/python/.setup.py.swp
similarity index 84%
rename from python/convenience_tool_box/.measuring_stick.py.swp
rename to python/.setup.py.swp
index 565f0d5acdeb8db8100b7857fee177e575e0ce70..fc1c48cd886b09bab7b4826d832c3761456cf528 100644
GIT binary patch
literal 12288
zcmYc?2=nw+u+TGNU|?VnU|?9cIXu-hw1&Y#f{`ITzqlYjC9w!3g%9T@7H4PX;Zp&T
ztAiP+pOK%NYNQY6=9K28=ob_vR%90ImlnkrXXX~<q{b)b=am%Y=jazymSp7T=@+M#
zlosd}R6@)eB}YSGGz3TpfzpyRT?<|YV<STYkS=8<MFnA@P!MwzkA}c#2#kinXb6mk
zz-S1JhQMeDjE2By2#k;rC@ElMsAphcV1oKr0!lNY(NOLvH5vk=Aut*OqaiRF0;3@?
z8UmvsFd71*Aut*OqaiRF0;3@?1VbP(g@Hkon}J~>H)Q@F*8ji4&%m&SpMha6KLZ0Z
zKLf)fJ_d%_d<+c5d<+cMd<+aKd<+aPc^MdP@iH(R;$>i%$jiVG%*()F#LK|&m4|_0
z7Y_qN4G#lDI1dAZ7!L!(3vLF6x!ep4lc07j1lczP!)w&ZqaiRF0;3@?8UmvsFd71*
zAut*Oqai@u5Kw>uWlaVsOF_9HF*!RiJvBZhu_V#9S{-AJth$v#w0d$*X12bTx{iW+
zN^Sv!QCgCjqpzhNTZ>^-v29vrUP?UF;9`yPjMSo3TlM0iWOYp)gldJPqWtXCJROCk
z(h`NtG=<9iQuUl1h4RF_5`~g{h2rwelH?49oWzpUA_b5MAO#BP`3M6t^NLFnb8_N~
zQVUBni&Beiqt)|Da|<ffV^M5LO-?K=P6g{u$<I?Sf!hGpuTYSgm!F)Rk(sYhmYJwf
zkXeARLLnu!AT=)~H7_|cwOAo9H8lm~w4_vplEm!PJcZ=MqEv<aG=<{Sg2bZ4lGL0^
zB&~@lDGK=|8L34I`FW|u3W<3s3MHw<B{~Yp8L7$H3VJ2^xj71HnK`KnY57G8x%ow@
z49Z|tnF<hhf=y2>Q7FmCELJEkNlXVRKne*Rh3vfi<ZO`7ii%Tn(iHMbOLP=cGE+dF
zEJ{tx$*EK*&o9b`n4hY{pse8MAL42S4QzNgKtsADU!f!;RRQd*l8nr}bVMjtWfsI2
zC#I#^x+Ufmry>#$C=t~nl!3UI2}rLfKPkT?J|(p{xhS)sBr`v+7@VfGkmCuOSfHs8
zDHK6wDkvzx<ui+HtCf_j6qGO$suGe*pvpl>0z)0LwWUQlw(1!rB?ZM+`ugdaB{_*n
zdeF7udO0N-dc~>wxrs&D`MT+ti^tUw9#1SS$;dCVRrdv{Rd6p&N-fIFOGHwD<at|l
z=lq<U)MQXVfYJ`sI)%iX^!%dCl8oG9aD0KHA~eV}RUxq`S0O2}I5kBfKMx#1rA6^Y
zB`K*2nRz9tMQMr2ko1$BpPO5nmzkUhHW!rG5Xl;pzLFDjl1p>Ivc-BxE-OndD$dN$
zvsE|HGgQ}M0I!7C$V<#kwZ)7{bsdJZqWoM1u%eRu{G4Ki%-n+fq7sORjsi-)X8-^o
CxToC!

literal 12288
zcmYc?2=nw+u+TGNU|?VnU|{Hc<C9vZS;Jr<!N`!FUtEx%l2`<i!iRGci?cKH@Tq{v
z)xiwZ&&bbBHPVN3b4v44^b3j-D>94qON-)*Gjj`aQsa~J^Gb^HbMy-;OEU8F^po@R
z%2M+(Q}dEj<4f}MbK;ZoEA(?y6N^iWGV{{oi%T+-v-JupAy$o&qaiRF0vI8{%V2C|
zXaEvcR#H?D777J1NAYL~jE2By2#kinXb6mkz-S1JhQMeDjE2An34xLVMuvI@1_mam
ze|4cWBN`3mj#8r`Fd71*Aut*OqaiRF0;3@?8UmvsFd71*Aut*OqaiRF0z)ta5>pr$
z4stRuOyq*h|HJzKFZdZ4uJSW5oZ@F-IKa=qFqNNyp_8A1A)KFq!G@oK;XfY(!y!Hf
zh8=ti3~Trp80PUYFl6&FFl6yDF!=E?FevjeF#P9bVEDqz!0?%uf#DM`1H&<128LO@
z3=Ac_3=HYK3=AQ>3=F}%3=C$x3=9Ii3=I6d3=9W&7#P}l7#Nay7#K`>7#O~BGcbJR
zW?*>9&A@P+n}J~~Hv_|BZU%;YZU%-3ZU%;TTnr4$xghSJ0P@2SjDt}pkA}c#2#kin
zXb6mkz-S1JhQNpp0R;sGg_6wNRK4Py)YJkE13d!+Q%wetXhBhCUWtZMX_2Xwl8%B_
zUV&a>QBh*0Mo~#hYJ5>@a%yH-s$P0(iDPm}X<|-@b3j0TajJ%<re0BgX<mwki6)9M
z1(|tZV^R`J67}+ZGo#I7^-78o^NMp4OEUBG;F@$4v<fow^oj~9^>PzSiZUxg@`DO0
zHITIx<(Gi<V7CcLCDZ|#d3tI2MdgV_Dc+fRskw<InaRZ(x%nxnIXVg;)jA4rzZF6q
zU8t8>P>`CJ0tyd^DOf}lY!$GFMWBWzLwQDKPO3skQE93b0|Sy}3bqRAsU`7X5slKK
zl(hJQ#FC8o#H8Z<oYIn19fjP~;*9u|%p$muCIg0$f~`V+u^vdHUSd))h}M9qL8w-+
zRZ!B?(=W<T$}fpeNi9w;$}9i{b+Nt@1E$4Tj6^6ZN(IGIS*j+IMwl3GYe4$-ON&fX
z<I6KkGUCAw$t;Y|NX$z~)dNW?F)$QorspN*=s_qA2&EV7>F((lqN4y(nUh+i$p8*!
z==x;6w4&71l%mYCRNwrRR1HlA253S}&d<wBO)g1IQG&!6NPT8rX(}`-^72a{(FGDO
z%FofuEOv(J(9pDk*a1z}3bqPCAug^#kVLMbWN2xmXJ}@jXQ*drV5EfV9;jMp$m(fK
zwG80Qlv<Hlq5*Liif2;uQryt|gUEa8nF{5ZIXMccc_|8TUn?Z$r6_=mQ`cljNlk+V
z5;*Kib9EHbiV|~EHLVyJ(u(qP71A@yQsZ+|<4ZD9<C7C}GLwoDOHxxH$xk6Ow;;c$
z1d$#YpaPI+fbo*^3o2pk{9=f)U_ZbD3#tn##60s#Qj5|OlT#HEi;+VTNi#GSU~T|u
zh6W*qW~eyK4e6-`sU;=(ddc}kNr}a&MP;c)5OWJM^YW9EGcxn_$})>f6LT`FQenos
zL-d5f#EW2tfr>teZfJ&r=}5^e%1g{m)ltaG&&<<NfMzq8w)|oktGE)*%qz_;s08^q
QuK*?scM?drATy5v09^+*ivR!s

diff --git a/python/README.md b/python/README.md
index ca8d709..0368c08 100644
--- a/python/README.md
+++ b/python/README.md
@@ -1,6 +1,10 @@
 # TODO:
 ---------
 - go to a previous version, save basic version of click where everything is in one file
+- write test for every algorithm - just run it on sample data on simulation and pinocchio.
+  using things on the real robot needs to be tested manually, but simulation in URsimulator should
+  take care of that because the only difference is the IP address in that case.
+  point is test what you can.
 
 # installation
 ------------
diff --git a/python/setup.py b/python/setup.py
index cbd9fa9..9daa358 100644
--- a/python/setup.py
+++ b/python/setup.py
@@ -1,10 +1,24 @@
 from setuptools import setup, find_packages
 setup(name='ur_simple_control',
-        version='0.0.1',
-        # TODO add other ones and test, check .toml file for more
-        install_requires=['numpy'],
-        packages=find_packages(where='src'),
-
-        package_data={'ur_simple_control': ['clik/*', 'dmp/*', 'util/*']}
-        )
+        version='0.1',
+        description='Collection of control algorithms for the UR5e arm based on the ur_rtde interface for communication and pinocchio for calculations.',
+        author='Marko Guberina',
+        url='https://gitlab.control.lth.se/marko-g/ur_simple_control',
+        packages=['ur_simple_control'],
+        #        package_dir={"": "ur_simple_control"},
+        package_data={
+            'ur_simple_control.robot_descriptions': ['*'],
+            },
+        zip_safe=False)
+# NOTE: if you want to switch to the toml thing,
+# here you go, knock yourself out, didn't really work for me,
+# and i don't care at this stage
+        # add other ones and test, check .toml file for more
+        # dependencies need to be taken care of separately
+        # because you don't want to install pinocchio via pip
+        #install_requires=['numpy'],
+        # broken, but if you'll want to switch later here you go
+        #packages=find_packages(where='src'),
+        #package_data={'ur_simple_control': ['clik/*', 'dmp/*', 'util/*']}
+        #)
 
diff --git a/python/ur_simple_control.egg-info/PKG-INFO b/python/ur_simple_control.egg-info/PKG-INFO
new file mode 100644
index 0000000..b15b402
--- /dev/null
+++ b/python/ur_simple_control.egg-info/PKG-INFO
@@ -0,0 +1,7 @@
+Metadata-Version: 2.1
+Name: ur-simple-control
+Version: 0.1
+Summary: Collection of control algorithms for the UR5e arm based on the ur_rtde interface for communication and pinocchio for calculations.
+Home-page: https://gitlab.control.lth.se/marko-g/ur_simple_control
+Author: Marko Guberina
+License-File: LICENSE.txt
diff --git a/python/ur_simple_control.egg-info/SOURCES.txt b/python/ur_simple_control.egg-info/SOURCES.txt
new file mode 100644
index 0000000..77d6984
--- /dev/null
+++ b/python/ur_simple_control.egg-info/SOURCES.txt
@@ -0,0 +1,9 @@
+LICENSE.txt
+README.md
+setup.py
+ur_simple_control/__init__.py
+ur_simple_control.egg-info/PKG-INFO
+ur_simple_control.egg-info/SOURCES.txt
+ur_simple_control.egg-info/dependency_links.txt
+ur_simple_control.egg-info/not-zip-safe
+ur_simple_control.egg-info/top_level.txt
\ No newline at end of file
diff --git a/python/ur_simple_control.egg-info/dependency_links.txt b/python/ur_simple_control.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/python/ur_simple_control.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/python/ur_simple_control.egg-info/not-zip-safe b/python/ur_simple_control.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/python/ur_simple_control.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/python/ur_simple_control.egg-info/top_level.txt b/python/ur_simple_control.egg-info/top_level.txt
new file mode 100644
index 0000000..9a3fac6
--- /dev/null
+++ b/python/ur_simple_control.egg-info/top_level.txt
@@ -0,0 +1 @@
+ur_simple_control
diff --git a/python/ur_simple_control/__init__.py b/python/ur_simple_control/__init__.py
index e69de29..38c21a5 100644
--- a/python/ur_simple_control/__init__.py
+++ b/python/ur_simple_control/__init__.py
@@ -0,0 +1,4 @@
+from ur_simple_control import clik, dmp, robot_descriptions, util
+__all__ = [
+"clik", "dmp", "robot_descriptions", "util",
+]
diff --git a/python/ur_simple_control/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/__pycache__/__init__.cpython-310.pyc
index 0564b9f600679f04e19e0738fa67cd4f9fecb063..f0e52da6259b072f7fdf395595c1bd877a6aea0b 100644
GIT binary patch
delta 206
zcmdnXxPz%apO=@5fq{X+Zbf)%Edv9?V-N=!GchnQI503U6ss^WFr+Y~Fy=7iGDb1x
zGDR`vGDk7zvP7{kGNd!4FfL+@VohNRX3%7Q3DU30a*HK7Co}sNb4qT(Euo_Pr2LZj
zl+@znqRfJl%>2CKTP&p|nYKB8nrycOON-)*Gjj`aQsa~J^Gb^HbBaLL7BMq0Fch(X
j2v!CLhFk3M@rgM(@$oAeia0=m921>OI6%@83_OegwN)>#

delta 82
zcmdnNw3pF2pO=@5fq{X+GAt|=L_Y=*$e59Vfx&@+fuWd%fq@}~A(%mv(QhR~5l9$H
POx#n##>BwDz`_6kx7rFa

diff --git a/python/ur_simple_control/clik/.clik.py.swp b/python/ur_simple_control/clik/.clik.py.swp
index 7e2d03a88b0a8fd17bdc30aa40008b6dee547ff7..9fc488300be91c4a2b8a7a31043e23c54fcc35ba 100644
GIT binary patch
delta 296
zcmZp8z}WDBQ8dXQ%+puFLeGeSfq_AQfx&BAcxvKC(f9hSllT}Iu1)4N&}V%MVr{lH
zn9OIWprD|ToDU*%^79Mga})Ct(^HG|ic0e|G#Su^6>JrpH#6EZ3wqw+VPG)eh1kFc
zvWbC#;Uzx<!+d@Qh9G_h20eZT1~z^MhR1vi4CnY57@GJP7*zQf7zFqj7;f`2Ff8C@
zU`Xa=U@+M18}OKCvR~|hNlJ2?72;AEm5TC{@=Nq`^HWlDbQB<*l*E!m9fd*|ck<Nu
zd{zcl1_qJIoC*I~{n;28L^ks#va?QBOp6zQXi3jc%!yAeD#|aKd{lAoW`}eE7RHRt
If!XU>0CTHOpa1{>

delta 272
zcmZp8z}WDBQ8dXQ%+puFLeGeSfq_AQfkAO@cxu8%(f9hSv-ubp?oZ}4&}aPvVr{lH
zn9MhMh8@3>f`WoVa(-S(QGSk3etv;(VqRi;YLQ-1X`Y5A16Xo1qdl{r=Pw=x20vbi
zv3wxo85kH|@-r~Z=VxF@;b&lQ;Adcv;Add?%E!R)fRBM;3LgW5IUfUq5+4J@PhJLw
zeY^||jl2vDew%#*9`j6mAUD|{_5f!}Vo9Q2zHesqX4beoMuFV?l++v@1(2wYLZObr
z<f-xbth}rY42qLE6aKTturV+wZstv7XPq38#>1#E`9iA8<cKus$%hmVY<5T&V419t
LA+R|idjSgo?2SjJ

diff --git a/python/ur_simple_control/clik/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/clik/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..22ff463a3a86e96cac507291831172989a59a7cc
GIT binary patch
literal 194
zcmd1j<>g{vU|@(?5uOU7AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_rRrzo
z=cekX=NA{`rz94Ec}56sPHA3>enC-UMP{*nX;FM}W^O@FYJ75jUP)1Yj($O9Nk)Di
p7K!AX%xwMm_{_Y_lK6PNg34PQHo5sJr8%i~AnS{n7#J8>7yxp~G*kcp

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/clik/clik.py b/python/ur_simple_control/clik/clik.py
index 7f40d33..6f10066 100644
--- a/python/ur_simple_control/clik/clik.py
+++ b/python/ur_simple_control/clik/clik.py
@@ -75,7 +75,7 @@ TODO: write out other algorithms
 """
 def getController(args):
     if args.controller == "dampedPseudoinverse":
-        return partial(dampedPseudoinverse, args.tiknonov_damp)
+        return partial(dampedPseudoinverse, args.tikhonov_damp)
     if args.controller == "jacobianTranspose":
         return jacobianTranspose
     # TODO implement and add in the rest
@@ -107,11 +107,11 @@ def controlLoopClik(robot, controller, i):
     # first check whether we're at the goal
     SEerror = robot.data.oMi[robot.JOINT_ID].actInv(robot.Mgoal)
     err_vector = pin.log6(SEerror).vector 
-    if np.linalg.norm(err_vector) < eps:
+    if np.linalg.norm(err_vector) < robot.goal_error:
       print("Convergence achieved, reached destionation!")
       breakFlag = True
     # pin.computeJointJacobian is much different than the C++ version lel
-    J = pin.computeJointJacobian(model, data, q, JOINT_ID)
+    J = pin.computeJointJacobian(robot.model, robot.data, q, robot.JOINT_ID)
     # compute the joint velocities.
     # just plug and play different ones
     qd = controller(J, err_vector)
@@ -119,7 +119,7 @@ def controlLoopClik(robot, controller, i):
     # we do the printing here because controlLoopManager should be general.
     # and these prints are click specific (although i'm not 100% happy with the arrangement)
     if not i % 1000:
-        print("pos", data.oMi[JOINT_ID])
+        print("pos", robot.data.oMi[robot.JOINT_ID])
         print("linear error = ", pin.log6(SEerror).linear)
         print("angular error = ", pin.log6(SEerror).angular)
         print(" error = ", err_vector.transpose())
@@ -133,5 +133,5 @@ if __name__ == "__main__":
     Mgoal = robot.defineGoalPoint()
     controller = getController(args)
     controlLoop = partial(controlLoopClik, robot, controller)
-    controlLoopManager(controlLoop, args)
-    controlLoopManager.run()
+    loop_manager = ControlLoopManager(controlLoop, args)
+    loop_manager.run()
diff --git a/python/ur_simple_control/dmp/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/dmp/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..1935145d6fced2a08057f336744c1f3174952a6e
GIT binary patch
literal 193
zcmd1j<>g{vU|@(@5uOU7AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_rRZnm
z=cekX=NA{`rz94Ec}56sPHA3>enC-UMP{*nX;FM}W^O@FYJ75jUP)1Yj($O9Nk)Di
o7KxPH0{!^-%)HE!_;|g7%3B;Zx%nxjIjMFa+l!eP7#LU>06iNs^#A|>

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/robot_descriptions/__init__.py b/python/ur_simple_control/robot_descriptions/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/robot_descriptions/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3c8fc8dc0aef0b7824804dd26c62c026082113cd
GIT binary patch
literal 208
zcmd1j<>g{vU|@K;B0LpDKL!!Vn2~{j!GVE+p_qk%fgyz<m_d`#ZzV$!NEku<D%Q`)
z&rQ`&&o3^>Pf08S^NbMOoYK4${eq&zip*mD(xUj{%-n*U)cEB5ypp2)9Q}gIl8pR3
zED}ZeN%<x5DXGQDMVSR9nfZCe`tk9Zd6^~g@p=W7w>WHa^HWN5Qtd#FDQ03|U|?YY
E06xn)>;M1&

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/robot_descriptions/config/__init__.py b/python/ur_simple_control/robot_descriptions/config/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/config/ur5e/__init__.py b/python/ur_simple_control/robot_descriptions/config/ur5e/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/meshes/__init__.py b/python/ur_simple_control/robot_descriptions/meshes/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/meshes/ur5e/__init__.py b/python/ur_simple_control/robot_descriptions/meshes/ur5e/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/meshes/ur5e/collision/__init__.py b/python/ur_simple_control/robot_descriptions/meshes/ur5e/collision/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/meshes/ur5e/visual/__init__.py b/python/ur_simple_control/robot_descriptions/meshes/ur5e/visual/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/urdf/__init__.py b/python/ur_simple_control/robot_descriptions/urdf/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/python/ur_simple_control/robot_descriptions/urdf/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/robot_descriptions/urdf/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..604494c47ace559fed14c143479ef69e2f44abc8
GIT binary patch
literal 213
zcmd1j<>g{vU|_hhE<6=PKL!!Vn2~{j!GVE+p_qk%fgyz<m_d`#ZzV$!NEku<s?g8K
z&rQ`&&o3^>Pf08S^NbMOoYK4${eq&zip*mD(xUj{%-n*U)cEB5ypp2)9Q}gIl8pR3
zED}ZeN%<x5DXGQDMVSR9nfZAj-6?7M@$s2?nI-Y@dIgoYIBatBQ%ZAE?LaOnW@2Dq
HU||3Nc5pn#

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/.boilerplate_wrapper.py.swp b/python/ur_simple_control/util/.boilerplate_wrapper.py.swp
index d0befeb34512b3259ffe76f42513039b4404548a..30b86a09891ea955ae68c488d3e981f4f26b79da 100644
GIT binary patch
delta 2671
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
PLyA3Ajj-wjRg?h$;S6Ja

delta 1572
zcmZo@U}|{4D4Jvt=IN_op=ZRvz`!8Dz#uR;Jk@-o=v#h%R)%^81_maOI0FNN&tyRX
zdB%Xrh63W8%uq4A$%O*)j0T%03gq)o{Gc#Nfra-ZGXsMtE5s<D$$|>n^{e?980Paa
zFihlQU?|~ZV6f$5VEE0;!0?)vf#DS|1H&_328PSL3=I2u85k;f85oRs85o}PFfi=q
zVPNRuVPFX0VPNp#VPKHwVPJU0&A_mOn}J~>Hv_{2ZUzPiZUzPgZU%;<Tnr3-Tnr4o
zTnr4UTnr2xTnr5NIT;uxaWd311aLAisB$teT;gD0Si`}<u$qH`VKD~-!(<KyhGq^1
z244;ahVSeQ3|HA17&fpoFsxu_V3@|vz)-}_z+lYIz#zuX!0?5Qfnhfr1H&3N28Pva
z3=E6e7#L==F)&PKV_+y@V_@)NV_^8h%D`}wm4V?RD+9wmRtAQNtPBi=tTGG?uB;3U
z+N_XpF<@a};9_B5c*e}YaD#bsn4$yoWV;lu$pR_jliyS&PQD+;F)2)Z^A44Cw#iGh
z3v6-|E8;UtQi~ExGV}9_HLVzua}tY-6`b?)N{aGxeDd=Pd=v8$(^HEyk`Y2W3W-JO
z#hROqb<&tNZ_o>2tXE)RU@(D3iybufF7Y!k%;slc$mC~WFz07rc)`cOP{+r>kj%%x
zpwGv^Aj-$U@PL<rVGAz<!)jgzhQ+)L46}F{7$)#CFvRgPFzE3zFudhqV3@|kz|hCT
zz);1*z~INjz+k|`!0?Hif#Co*1H)o&28I}JhI$57ZU%;TTnr2kxEL5Va4|4U<6>Z_
z;bLIW;bLHT&B?%UnUjIx04D>(dQJw0b({<g%QzVrW^*zyOyp!>u;OH3c+A1T(9OZX
zkjKHmkjBBl;KRYd@Rgl`VH-OG!#s8dhD>$_22*whhBs^s4Exv^80y#<7~<F%7{u8a
z7%sDFFfbftWnd^_g@nQ}RtAPytPBidtPBiqSr{1RvoJ9DvoJ6Sv24~dyu-9PB0`UG
z@^541$;u`jlV|yeOg>^#&sCh6TbcuohRuPdKFpI(S_n^mV6k@cL`x|!K5MBnd8Ucb
zWMM0FFz&Q+pM1qicJfy%qsjI5tdk9_O($ns%PAKs*eVp|C*_yu6_uo<#uud~r)HL=
z>ZPZaI3|~rCguccXl}k}?ZLQtrtKrf$@TW;n{U}`3Gkj^Wnfss2FX|klLZ6fQ}1&#
zFx=y2V3@(pz@Wp;z;J_$fngaJ1A_+_1A{ad1H&gy28Jb^3=AQh3=HC&3=ID{7#OB<
zFfcT5Ffb%@FfbT%FfjaQXJ9zW&cLvioq?eZ8iW$;3=F@Z!MJ4e!-DgylbgasCNEPF
zn%o!0u~|Os598#M#<rUyB5pEHHjR><93ExQs5N;(l=<X4Q96@(qOBMiCVNGfYz~gu
z$Xu_)$iPqsDntYr7y_Uv?-4%(!(n~~hL!vb3`P7543Yc{4DS3442t{=48Qmo7*6mp
zFzn)EV94iVVDRE&VDRK)U~uJQU@+%nU{L2{V0g*Pz;Kk8fng#q14AS)1A{Ct0|Nsu
z1H(Zc28NkD3=CmB3=Gmd3=CgEDQ_n?149ir149Kj149Zo12`rA;9_9d!^OZbkBfn!
zm5YI)fQx}ajf;WdHYWqa7ET6+nVbv^E}RSu|2P;J-f}Q7Y~f&FXyIUB$mC#PkmF!r
zVBlb2xXaGKaDbhGVL3YkLp3`CgEu<^gCaWv10y@6s3>J)V6bEhVPKG9V_>+?%D}Lb
zm4RU@D+5D2E2KzZW@TVtVr5{s%fi5Ln1z9%j)j52oP~km4KoA7C1wVO^~?+m9n1_2
z(aa1C>dXubPnZ}OW-@_7bK=8olS>i<CZ8@--h8I4g=w=<3LDepiPZ{|m#0mgTx-p@
zIW7Gt)8sB~!Odw|8<;0c<*822$Wvm{QJUP7w~#BPL_t>}B{MBebMgmE<;n5+Ho_?-
QnhXj^ATv#2@{W8D0BTuD`Tzg`

diff --git a/python/ur_simple_control/util/.get_model.py.swp b/python/ur_simple_control/util/.get_model.py.swp
new file mode 100644
index 0000000000000000000000000000000000000000..bd148d33717e53ec67b40270ae0735a98b999d35
GIT binary patch
literal 12288
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

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/__pycache__/__init__.cpython-310.pyc b/python/ur_simple_control/util/__pycache__/__init__.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..41c97b7686410f2feed21cab462d3e8c926d6c9c
GIT binary patch
literal 194
zcmd1j<>g{vU|>jE5uOU7AA<;F%*epN;K0DZP|U)>z>vZa%%I8Wx00a<B#a<_rRrzo
z=cekX=NA{`rz94Ec}56sPHA3>enC-UMP{*nX;FM}W^O@FYJ75jUP)1Yj($O9Nk)Di
p7Kzf5%pCpr_{_Y_lK6PNg34PQHo5sJr8%i~AnS{n7#J8>7yy0gG<g63

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/__pycache__/boilerplate_wrapper.cpython-310.pyc b/python/ur_simple_control/util/__pycache__/boilerplate_wrapper.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..8b3e26aeb2ede980f7ca8364b51c2f398c05e7c0
GIT binary patch
literal 5360
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

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/__pycache__/get_model.cpython-310.pyc b/python/ur_simple_control/util/__pycache__/get_model.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..184950c3ec3f73f88e80199f281657e18a3678c9
GIT binary patch
literal 1996
zcmd1j<>g{vU|=}AB|LQ!4+Fzv5C<7EF)%PVFfcF_TQD#%q%fo~<}gGtf@!8GW-!eX
z#R8^TqgYcIQkZhsa@nKU85vTTQ&?IUqBv3*gBdhgUxLi^(`3BGnwFW9TAa)X;zO|v
z0|Nsq0|SFI$eMkO3=Aa<DU8jG3m8+F7Bbc{mM~>8FJP%*T*z3<RKk$L+{{?Z3>9Nu
z$XLr#!n%Mhogsx~5l96ql*bC@v6Zkd;3#3w;#|O0!?uvIhIJuREjv^N8(0Mgl*bO{
zaU!YbT*z3%v5={j3#x(xtb!ZL;{@|~kks=mWUS#{$W+S<Rlx;T!3X7WgL(W&>iHKk
z*6=N4suh5$-~p=;gz|X7JRv0YLJJvd1Q#;Z3PV-!fmMh=dHi6WD3W^7g^V>K3z=%g
zY8Z;vmT;#CG&43amas42sR4zmR0>0_L<&Q#WDR?bR2FZFpbbL}7nmhv!%)KuW(nIc
z)ChoCA~p;)!eExD4MU9>m?dVzP{O`|uSRMiW36<JRE<Q9WQ}whOE80`xL=iKX;FM}
zW^O@FYJ75jUP)1Yj$ToIQhrH%N@{U(QD#9&W`16=UTINET9r&`k!fmtd1gsQJXlF)
zVSGknUP>xNR)rXYG?|M)=?P4v-;*etV0-q6J&GVhgTS=gojG=z%;^VKr|xdqVQddp
z4JI_1)0Zx-`q-lS6C#+tQAI{TBWW{8b>r-q1qDX8_k$IJ2~Fnoz!&xnRSKLA>A`Km
zkDq}Ud@E8`eO2Ui&}2@3d$^%2N$TeQ^sliAcFPTe_opu?k86umIB2iQoPP4~7nX!~
zjrQrUr>2x@?l-be7oKuBn$zVT$gca=wriZqdF|8v-u?8DtJt|e{qo~|<$rJKfOHzY
ziQ|4P0dpY(gG5LC<mvlB{&~FFLWA+KUHZ?4@S}<4JMGiWPM_PN(x?Q|WqWpV$!YbU
z_URJ3E+M}aIUUk3htCKEF{+{i5=%0Q6*BV_N-|OvKvAKPU!+i+pPO2ek(rmSkeXAR
zs*snOnxasWuaK0gkd|2iVV4%CDwJeo7AvG>78RH1DFo*i6;<jfIOperv=!&)=jpu!
zMaN4}(eaX*fq~&A3y1(^@t1523=Eq5MIfnL99j99c?F3j8Mm17i*K=jS?q~P#b5?g
zUcoKa#G<0a%3I6@nR&OEgI$epF&7n7-r_DQs0_*XO)M$OthgoYmtW!uN@uyLc_pbS
zu0=)pMYn{KN;7j(eDhOMbKHvZb3=<#(r)pCEGr4fNlZ=!DJ{Om;*waBs3~)cvn;c?
zG%+W$D)p8SC=}vB*2fp6<|LM6mZ69xCKc!Bl$NC4;>b-c&WKOREV?BKW5vTI`HD00
zOLJ0Ei{eX)67!00@xb{Y$0K;fsm8bXOA888i{cZDa-oWO5dt99NL-L|-n9IpRD@z~
z7#E}z&H*bdFUl+~i8q9r$_?X!6~Z`33XM<|8pR_iG>S)3XpE}R7+Ik)SRq?(eoARh
z>Mj1{{G6Q3;>`TK_*_s#+~R?RGnB^)5oAe8EJ<9+P-M)&!0;<gKO;XkRX;tyxFA0z
zu?WmFLU40R^HTH+iV`a_i}f)|1^t4`l8pR3EE1(9nK}CDsU;AL^$IF)al(0^s;}6M
zfq{XKnTL^siHC`giH}i)5kJYo%)!XT$->CO$i>9Ph=4pyMW&$C&3TKnATuvNIXNRU
zzlfiKf#DWwUTJPYWf3ok&0JhrTm-WBmT+cnL4Hw5PG*u`QEG91X;E@&F*sv@jR6M<
f5@7<;%wYowT{}?zD&}EeVBlcjU<5%PMjloG<`a9S

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/__pycache__/robotiq_gripper.cpython-310.pyc b/python/ur_simple_control/util/__pycache__/robotiq_gripper.cpython-310.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..9310cab2c4819c34952aa62d53df3b15536a6460
GIT binary patch
literal 12248
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

literal 0
HcmV?d00001

diff --git a/python/ur_simple_control/util/boilerplate_wrapper.py b/python/ur_simple_control/util/boilerplate_wrapper.py
index 99e0492..e93b62d 100644
--- a/python/ur_simple_control/util/boilerplate_wrapper.py
+++ b/python/ur_simple_control/util/boilerplate_wrapper.py
@@ -7,7 +7,7 @@ from pinocchio.visualize import GepettoVisualizer
 from rtde_control import RTDEControlInterface
 from rtde_receive import RTDEReceiveInterface
 from rtde_io import RTDEIOInterface
-from robotiq_gripper import RobotiqGripper
+from ur_simple_control.util.robotiq_gripper import RobotiqGripper
 import copy
 import signal
 # TODO make the package work
@@ -25,10 +25,14 @@ like max_iterations, what data to save etc.
 NOTE: you give this the ready-made control loop.
 if it has arguments, bake them in with functools.partial.
 """
-class ControlLoopManager(controlLoop, args):
-    def __init__(self, controlLoop, max_iterations):
+class ControlLoopManager:
+    def __init__(self, controlLoop, args):
         self.max_iterations = args.max_iterations
         self.controlLoop = controlLoop
+        self.args = args
+        # predefined ur magic numbers
+        self.update_rate = 500
+        self.dt = 1 / self.update_rate
 
         # if you just stop it the program with Ctrl-C, it will continue running
         # the last speedj lmao.
@@ -76,16 +80,17 @@ class ControlLoopManager(controlLoop, args):
                 break
             end = time.time()
             diff = end - start
-            if dt < diff:
-                print("missed deadline by", diff - dt)
+            if self.dt < diff:
+                print("missed deadline by", diff - self.dt)
                 continue
             else:
-                time.sleep(dt - diff)
+                time.sleep(self.dt - diff)
         if i < self.max_iterations -1:
             print("success in", i, "iterations!")
         else:
-            print("FAIL: did not succed in," max_iterations, "iterations")
-        self.stopHandler(None, None)
+            print("FAIL: did not succed in", max_iterations, "iterations")
+        if not self.args.pinocchio_only:
+            self.stopHandler(None, None)
 
 """
 robotmanager:
@@ -110,6 +115,9 @@ class RobotManager:
     # might be changed later if that seems more appropriate
     def __init__(self, args):
         self.args = args
+        self.pinocchio_only = args.pinocchio_only
+        self.simulation = args.simulation
+        self.gripper_flag = args.gripper
         # load model
         # collision and visual models are none if args.visualize == False
         self.model, self.collision_model, self.visual_model, self.data = \
@@ -125,11 +133,13 @@ class RobotManager:
             #viz.initViewer()
             #viz.loadViewerModel()
             #viz.display(q0)
-        if args.gripper:
+        if self.gripper_flag and not self.pinocchio_only:
             self.gripper = RobotiqGripper()
         # initialize and connect the interfaces
         self.simulation = args.simulation
-        if not args.simulation:
+        if self.pinocchio_only:
+            self.q = pin.neutral(self.model)
+        elif not args.simulation:
             self.rtde_control = RTDEControlInterface("192.168.1.102")
             self.rtde_receive = RTDEReceiveInterface("192.168.1.102")
             self.rtde_io = RTDEIOInterface("192.168.1.102")
@@ -140,6 +150,8 @@ class RobotManager:
         else:
             self.rtde_control = RTDEControlInterface("127.0.0.1")
             self.rtde_receive = RTDEReceiveInterface("127.0.0.1")
+            self.rtde_io = RTDEIOInterface("127.0.0.1")
+
 
         # ur specific magic numbers 
         self.n_joints = 6
@@ -155,7 +167,8 @@ class RobotManager:
         # we're not saying it's qdd because it isn't directly (apparently)
         # TODO: check that
         self.acceleration = args.acceleration
-        self.rtde_io.setSpeedSlider(args.speed_slider)
+        if not args.pinocchio_only:
+            self.rtde_io.setSpeedSlider(args.speed_slider)
         self.max_iterations = args.max_iterations
         # TODO: these are almost certainly higher
         # maybe you want to have them high and cap the rest with speed slider?
@@ -165,6 +178,9 @@ class RobotManager:
         self.max_qd = 0.5
         # maybe you want to scale the control signal
         self.controller_speed_scaling = 1.0
+        # error limit 
+        # TODO this is clik specific, put it in a better place
+        self.goal_error = args.goal_error
         
     """
     getQ
@@ -175,22 +191,25 @@ class RobotManager:
     also, the gripper is controlled separately so we'd need to do this somehow anyway 
     """
     def getQ(self):
-        q = robot.rtde_receive.getActualQ()
-        if self.args.gripper:
-            self.gripper_pos = gripper.get_current_position()
-            # the /255 is to get it dimensionless
-            # the gap is 5cm
-            # thus half the gap is 0.025m and we only do si units here
-            q.append((self.gripper_pos / 255) * 0.025)
-            q.append((self.gripper_pos / 255) * 0.025)
-        else:
-            # just fill it with zeros otherwise
-            q.append(0.0)
-            q.append(0.0)
+        if not self.pinocchio_only:
+            q = self.rtde_receive.getActualQ()
+            if self.args.gripper:
+                self.gripper_pos = gripper.get_current_position()
+                # the /255 is to get it dimensionless
+                # the gap is 5cm
+                # thus half the gap is 0.025m and we only do si units here
+                q.append((self.gripper_pos / 255) * 0.025)
+                q.append((self.gripper_pos / 255) * 0.025)
+            else:
+                # just fill it with zeros otherwise
+                q.append(0.0)
+                q.append(0.0)
         # let's just have both options for getting q, it's just a 8d float list
         # readability is a somewhat subjective quality after all
-        q = np.array(q)
-        self.q = q
+            q = np.array(q)
+            self.q = q
+        else:
+            return self.q
         return q
 
     """
@@ -210,12 +229,12 @@ class RobotManager:
         # np.clip is ok with bounds being scalar, it does what it should
         # (but you can also give it an array)
         qd_cmd = np.clip(qd_cmd, -1 * self.max_qd, self.max_qd)
-        if not self.simulation:
+        if not self.pinocchio_only:
             # speedj(qd, scalar_lead_axis_acc, hangup_time_on_command)
-            rtde_control.speedJ(qd_cmd, self.acceleration, self.dt)
+            self.rtde_control.speedJ(qd_cmd, self.acceleration, self.dt)
         else:
             # this one takes all 8 elements of qd since we're still in pinocchio
-            self.q = pin.integrate(model, self.q, qd * self.dt)
+            self.q = pin.integrate(self.model, self.q, qd * self.dt)
 
 
     """
@@ -238,11 +257,12 @@ class RobotManager:
         Mtool = self.data.oMi[self.JOINT_ID]
         if not self.args.visualize:
             print("You can only specify the translation right now.")
-            print("Here's where the robot is currently. Ensure you know what the base frame is first.")
-
-            print("base frame end-effector pose from pinocchio:\n", \
-                    *data.oMi[6].translation.round(4), *pin.rpy.matrixToRpy(data.oMi[6].rotation).round(4))
-            print("UR5e TCP:", *np.array(rtde_receive.getActualTCPPose()).round(4))
+            if not self.pinocchio_only:
+                print("In the following, first 3 numbers are x,y,z position, and second 3 are r,p,y angles")
+                print("Here's where the robot is currently. Ensure you know what the base frame is first.")
+                print("base frame end-effector pose from pinocchio:\n", \
+                        *self.data.oMi[6].translation.round(4), *pin.rpy.matrixToRpy(self.data.oMi[6].rotation).round(4))
+                print("UR5e TCP:", *np.array(self.rtde_receive.getActualTCPPose()).round(4))
             # remain with the current orientation
             # TODO: add something, probably rpy for orientation because it's the least number
             # of numbers you need to type in
@@ -251,7 +271,7 @@ class RobotManager:
             #Mgoal.translation = Mgoal.translation + np.array([0.0, 0.0, -0.1])
             # do a while loop until this is parsed correctly
             while True:
-                goal = input("Please enter the target end effector position in the x.x,y.y,z.z format: ")
+                goal = input("Please enter the target end-effector position in the x.x,y.y,z.z format: ")
                 try:
                     e = "ok"
                     goal_list = goal.split(',')
diff --git a/python/ur_simple_control/util/get_model.py b/python/ur_simple_control/util/get_model.py
index 34b958f..62537f7 100644
--- a/python/ur_simple_control/util/get_model.py
+++ b/python/ur_simple_control/util/get_model.py
@@ -2,15 +2,19 @@ import pinocchio as pin
 import numpy as np
 import sys
 import os
+from importlib.resources import files
 
 # can't get the urdf reading with these functions to save my life, idk what or why
 
 # TODO fix paths via python packaging
 def get_model(visualize):
     
-    urdf_path_relative = "../robot_descriptions/urdf/ur5e_with_robotiq_hande.urdf"
+    #urdf_path_relative = "../robot_descriptions/urdf/ur5e_with_robotiq_hande.urdf"
+    urdf_path_relative = files('ur_simple_control.robot_descriptions.urdf').joinpath('ur5e_with_robotiq_hande.urdf')
     urdf_path_absolute = os.path.abspath(urdf_path_relative)
-    mesh_dir = "../robot_descriptions/"
+    #mesh_dir = "../robot_descriptions/"
+    mesh_dir = files('ur_simple_control.robot_descriptions')
+    #mesh_dir_absolute = os.path.abspath(mesh_dir)
     mesh_dir_absolute = os.path.abspath(mesh_dir)
 
     shoulder_trans = np.array([0, 0, 0.1625134425523304])
-- 
GitLab