From d2f05d0169305f08b91e468b7ad27ddd05a44abb Mon Sep 17 00:00:00 2001 From: "Ziwei.He" Date: Wed, 28 May 2025 21:13:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Massage/MassageControl/MassageRobot_nova5.py | 77 +++++++++--------- .../admithybrid_controller.cpython-39.pyc | Bin 0 -> 4294 bytes .../admittanceZ_controller.cpython-39.pyc | Bin 0 -> 5140 bytes .../__pycache__/arm_state.cpython-39.pyc | Bin 1574 -> 1643 bytes .../__pycache__/force_planner.cpython-39.pyc | Bin 0 -> 5375 bytes .../hybridAdmit_controller.cpython-39.pyc | Bin 0 -> 4415 bytes .../hybridPid_controller.cpython-39.pyc | Bin 0 -> 4546 bytes .../hybrid_controller.cpython-39.pyc | Bin 0 -> 4538 bytes .../__pycache__/interpolation.cpython-39.pyc | Bin 0 -> 12596 bytes ...positionerSensor_controller.cpython-39.pyc | Bin 0 -> 4858 bytes Massage/MassageControl/config/admittance.yaml | 6 +- .../__pycache__/dobot_api.cpython-39.pyc | Bin 136445 -> 136448 bytes .../__pycache__/dobot_nova5.cpython-39.pyc | Bin 22931 -> 23743 bytes .../__pycache__/force_sensor.cpython-39.pyc | Bin 11706 -> 11720 bytes .../MassageControl/hardware/dobot_nova5.py | 64 +++++++++++---- .../MassageControl/hardware/force_sensor.py | 2 +- .../decorator_tools.cpython-39.pyc | Bin 0 -> 1390 bytes .../__pycache__/serial_tools.cpython-39.pyc | Bin 2513 -> 2516 bytes Massage/tools/__pycache__/log.cpython-39.pyc | Bin 0 -> 3241 bytes VortXDB/__pycache__/client.cpython-39.pyc | Bin 0 -> 5160 bytes logs/test.py | 7 ++ 21 files changed, 99 insertions(+), 57 deletions(-) create mode 100644 Massage/MassageControl/algorithms/__pycache__/admithybrid_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/admittanceZ_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/force_planner.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/hybridAdmit_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/hybridPid_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/hybrid_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/interpolation.cpython-39.pyc create mode 100644 Massage/MassageControl/algorithms/__pycache__/positionerSensor_controller.cpython-39.pyc create mode 100644 Massage/MassageControl/tools/__pycache__/decorator_tools.cpython-39.pyc create mode 100644 Massage/tools/__pycache__/log.cpython-39.pyc create mode 100644 VortXDB/__pycache__/client.cpython-39.pyc create mode 100644 logs/test.py diff --git a/Massage/MassageControl/MassageRobot_nova5.py b/Massage/MassageControl/MassageRobot_nova5.py index f656d81..11b9fbf 100644 --- a/Massage/MassageControl/MassageRobot_nova5.py +++ b/Massage/MassageControl/MassageRobot_nova5.py @@ -111,8 +111,10 @@ class MassageRobot: self.arm_state = ArmState() self.arm_config = read_yaml(arm_config_path) # arm 实例化时机械臂类内部进行通讯连接 + # 初始化坐标系 TOOL=0 BASE=1 self.arm = dobot_nova5(arm_ip = self.arm_config['arm_ip']) self.arm.start() + self.arm.chooseRightFrame() self.thermotherapy = None self.shockwave = None @@ -127,13 +129,13 @@ class MassageRobot: # 控制器,初始为导纳控制 self.controller_manager = ControllerManager(self.arm_state) self.controller_manager.add_controller(AdmittanceController,'admittance',self.arm_config['controller'][0]) - self.controller_manager.add_controller(HybridController,'hybrid',self.arm_config['controller'][1]) - self.controller_manager.add_controller(PositionController,'position',self.arm_config['controller'][2]) - self.controller_manager.add_controller(AdmitHybridController,'admithybrid',self.arm_config['controller'][3]) - self.controller_manager.add_controller(HybridPidController,'hybridPid',self.arm_config['controller'][4]) - self.controller_manager.add_controller(HybridAdmitController,'hybridAdmit',self.arm_config['controller'][5]) - self.controller_manager.add_controller(PositionerSensorController,'positionerSensor',self.arm_config['controller'][6]) - self.controller_manager.add_controller(AdmittanceZController,'admittanceZ',self.arm_config['controller'][7]) + # self.controller_manager.add_controller(HybridController,'hybrid',self.arm_config['controller'][1]) + self.controller_manager.add_controller(PositionController,'position',self.arm_config['controller'][1]) + # self.controller_manager.add_controller(AdmitHybridController,'admithybrid',self.arm_config['controller'][3]) + # self.controller_manager.add_controller(HybridPidController,'hybridPid',self.arm_config['controller'][4]) + # self.controller_manager.add_controller(HybridAdmitController,'hybridAdmit',self.arm_config['controller'][5]) + # self.controller_manager.add_controller(PositionerSensorController,'positionerSensor',self.arm_config['controller'][6]) + # self.controller_manager.add_controller(AdmittanceZController,'admittanceZ',self.arm_config['controller'][7]) self.controller_manager.switch_controller('admittance') # 按摩头参数暂时使用本地数据 @@ -154,7 +156,7 @@ class MassageRobot: self.tool_position = None self.mass_center_position = None self.s_tf_matrix_t = None - arm_orientation_set0 = np.array([-180,0,-90]) + arm_orientation_set0 = np.array([-180,-30,0]) self.b_rotation_s_set0 = R.from_euler('xyz',arm_orientation_set0,degrees=True).as_matrix() # 频率数据赋值 @@ -499,9 +501,10 @@ class MassageRobot: status, pose_processed = self.arm.process_command( command_pose[:3], command_pose[3:] - ) - # print(f"pose_processed:{pose_processed}") - + ) + # pose_processed = command_pose + print(f"pose_processed:{pose_processed}") + print(self.arm.feedbackData.robotMode) tcp_command = ( f"ServoP({pose_processed[0]:.3f},{pose_processed[1]:.3f}," f"{pose_processed[2]:.3f},{pose_processed[3]:.3f}," @@ -1555,35 +1558,35 @@ class MassageRobot: if __name__ == "__main__": - waypoints = [ - {"time": 0.0, "position": [0.25, -0.135, 0.3443], "velocity": [0, 0, 0], - "acceleration": [0, 0, 0], - "orientation": R.from_euler("xyz", [0, 0, 0], degrees=True).as_quat()}, - {"time": 5.0, "position": [0.30, -0.135, 0.3043], "velocity": [0, 0, 0], - "acceleration": [0, 0, 0], - "orientation": R.from_euler("xyz", [0, 30, 30], degrees=True).as_quat()}, - ] ## 单位 m deg - myInterpolate = TrajectoryInterpolator(waypoints) - ts = np.linspace(0,5,100) + # waypoints = [ + # {"time": 0.0, "position": [0.25, -0.135, 0.3443], "velocity": [0, 0, 0], + # "acceleration": [0, 0, 0], + # "orientation": R.from_euler("xyz", [0, 0, 0], degrees=True).as_quat()}, + # {"time": 5.0, "position": [0.30, -0.135, 0.3043], "velocity": [0, 0, 0], + # "acceleration": [0, 0, 0], + # "orientation": R.from_euler("xyz", [0, 30, 30], degrees=True).as_quat()}, + # ] ## 单位 m deg + # myInterpolate = TrajectoryInterpolator(waypoints) + # ts = np.linspace(0,5,100) robot = MassageRobot(arm_config_path="/home/jsfb/jsfb/MassageRobot_Dobot/Massage/MassageControl/config/robot_config.yaml") - xr_list, vr_list, ar_list = [], [], [] - for t in ts: - xr, vr, ar = myInterpolate.interpolate(t) - xr_list.append(xr) - vr_list.append(vr) - ar_list.append(ar) - xr_array = np.array(xr_list) - vr_array = np.array(vr_list) - ar_array = np.array(ar_list) + # xr_list, vr_list, ar_list = [], [], [] + # for t in ts: + # xr, vr, ar = myInterpolate.interpolate(t) + # xr_list.append(xr) + # vr_list.append(vr) + # ar_list.append(ar) + # xr_array = np.array(xr_list) + # vr_array = np.array(vr_list) + # ar_array = np.array(ar_list) - robot.xr = xr_array - robot.vr = vr_array - robot.ar = ar_array - robot.ts = ts - robot.dt = ts[1] - ts[0] + # robot.xr = xr_array + # robot.vr = vr_array + # robot.ar = ar_array + # robot.ts = ts + # robot.dt = ts[1] - ts[0] - - ready_pose = [250.0, -135.0, 344.3392, -180.0, 0.0, -90.0] + + ready_pose = [194.3467,-134.9880,455.3604,-180.0000,-30.0000,0.0042] robot.current_head = 'finger_head' robot.force_sensor.disable_active_transmission() diff --git a/Massage/MassageControl/algorithms/__pycache__/admithybrid_controller.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/admithybrid_controller.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1859af2eaab839a28c780bb03b0b0b18a45664c6 GIT binary patch literal 4294 zcmb_g-E-Ww5eG;fkGwmb?yS@4BeE^K?o6)jNR6jW`r)Q=;(WBORoBjRrZ>~!&<98& zLmtl{BwHG)50yK4>R*s{=Jc4C{6To>L-XQ)p%0zz0wi_zIB(SrmcU}MSS+wVEEFy+ zwFvy}&E7ry*9IZ~#>V1b0~#Md$zK3rgwceI&6kcXXj_S$I^zZ<%w|sFrp<9v*BgnK z`ePsJgt%D3hU#vgu0-9Aw-T>0@AVsCPdMbN*2_l_E8Q70D0`C0;2zS7Rej5~?}o`iCL(#5=DQ(!=1_YEjVrfkXLcewU;~!i z1wv?-w&>}#H#%~sTI9q+(elrOZxhN#Q1XZ17D)*Z__4H@=6nUm z)^NWf|8&mjU#Ya`4se_eazW4RvenQnhq>T$*m$6>rcF&fkn&5(CQ4r5-n16DUd?SU zaQ&Lw0qzoO>2cjsQ(Mp3C|e!fa?4g}k6dO;=ky-=^X;={;S?}8bH5HXJI-EqzI?_ltsg~)`mrZd$Dg$Pf^HV@?3 z0rHNfx5q2{nV9hEzy-%RN;xbF55zhu1Nb9i6NqY@a*^d~WtQa}LP_!i5helGGc>@c z0~nV-6>{u8Fh;sbG==l6>}YzdT80S&kCl7B6u76qBTp>jEPb4%3N;o@q!=Q54apXg zt0+JtF~EidgIMuw15z= zL=s*LbtK&Zr^ESx7y|skFJKU(aMo^_R$KQ5wshu=svly`n!6X|%+{QyrrtU^a|%25 z3#Vr^w(t`9n{|hPbo+wT8X$@WI1+ZZWuav^?6eq_uWID@3J3;$_`# z6)^TaVvzvby>evVjNBl4<|{_>lDCfbU=%FB#v}1yVb0aUH5Nl$k$9-J^cOfJUaMN` zFq780uBFPA;{4d7d4qcOWWG^y8V2cOTuh(aolco4t-^Tt(h698slQ$` zYB;a}(_kM!Lz6Z2XlK3!b?s3^nE6%MFR!rlE_iwe{K7{r+7Vns3RYc{oALGewzlos z1-*)%)_rjkwCVlaAZupK4MdHvJ#$BiYjCPQfjhX#Af`Cal^sqd%0A|aaxmIPH_bJ) zQlSN08GLGPd1bRqs^w6m!6KJFQvSZk(%|V)D3u@P0ichFo~sT@g3<_61l6lF)*Sk| zYUv2qfh|U0njS7PdCVtjg+G^EKv)OQ1fNb0138(gZl%TW#P?y4!Hho6R`tqfQ7$i0 z#TZ?6!ivQYaNLh@#-)mF#{3X@ok+8t18QG-Om)BlL`5UpD%}JO z1p7pWS{7Y~^;&1I(uqa~Q~vBVkOOFyeD)65oZkjQtRdiAmwHwYkZlNf*RzJ!o;9|5 z);iQ3K)fseb)62%(T=rcoo>Dv=}_$}5Qk`5L) z8F49JhatiqjyiK85W59j#q(td%%%>@CbS@P2Dk(Y*L(%J1~9$Ci~FwtW_tm=NNiwl z1pw36fH}}}w{bQNnAlz|0drUZg9ei|BYDZIp{;~R18iDqV`0wC;?ff&eoOa5DuJM{ zA(X^*zt%|Nt-4oxt_0Dm<^1Ky1rV*}4dlcdm2Uy+3@mN1MNl=My-}|j+NIpE1l7*` zdI_qRmVzxMsMdZ#4H{HiT0^S_)oxK~#T5k_Mgdf}WhcHd zzo}QbU4p8C*d}Ou6;!{6pelCZ{ElvEz!X1$y7(!Qcagk@VE#fAUPmp|y1c6YzkL1@#K0s3AoVbh4%Y5lWY+j;SyFxPrIm9w?56QOr1$l!PLH%ORUY@&q1C2AMs?9YhcDdz5~N)(wodWMmY4=_xL z;Q`hPf;3}C3D!FS8l9LPfv-IM+|fy$_#B&PoLVZMToaxoL9nnAO#FmS1M!v9hLU5& zqXXBw?!7IrF&Zj6Kgm^NdX&O*N?#po`6Qa1?BwvIi^60Fv+5jD;Zy+PnUez79$a4f zRjTb$%TM5`SY^tP;S2mXfNJ8SFo~WBoufP0Qf@e#@hO8@rG9wsM|!PI!SgIRhDYu! zgxgc96`5s8zJsssAcIG0C^MmRc;(_bHf=qYpgDdoi=c-xd_l F`X4tkE${#U literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/algorithms/__pycache__/admittanceZ_controller.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/admittanceZ_controller.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8ed67e87a37dc525586d2a2662cc481800d48267 GIT binary patch literal 5140 zcmb_g&2t<_74M#z-JO~J(8^kAC0Vv*#|dlzIdC9UVSSO%!^$ zAiKfk3vJZnO4;LT$z3B(@ON3S^%Qevdp)k*`;#uf8fqQJRM1f$X2hwAZtAC83CPRmt>FjR*5V zX>8)@vT-F_ASpX#GoJCxIo3HwiY>)~W1Zw-_E2ZjWXlUw)D z7#_&`lLwPD*d;nw&F{tZZiVr|L`CVtQF1FhpFD+9JdvI0k!m0Yx)L*Q-r~nszjUQ` z<`WuNu%7?wU~0Ht$CbQ@mXu}ul%H4`8)A_J-(Vlw>ZQ~YM)Ns#K(76q{mnV$f8wb< zbD(iH*cm^u3#noxr;w^fsuWVqNYz4ejZ`Zn&q!_|`9|{Ky}p4*6;!}A3|CESqIt@9 z+3!C%@iRArrD%P~)IUTst92OqyIF;_nN75V*gA~tZnMlQt-n~Xt{Q7+!5VhA*+*Yw zo@nOY|H9RsukRt6w`puIv$4OMpIQ_@;`WWsF?=0u@CR*!w78mx(K)cruzR6xrS@=X z*2e1lMqV!Ex{)s#UzH2~SB$P|+B;dL@V{F2Trn+crQ9)c*Yt8Pcv?3)&$Mr3ZsBQD zv=G^4v~7tc({@ELY?t<)TEc5{+%Dc%K*Tm}i|ymBZ84F__IQ$RkHU2Da68{3d8_tD zv^`Q4jsD(@-B}MRYq&*RirbR!)l0kbqNrGe$#xmFs2kAuV zHq;k1Pw9nMglSK!Aib-K-gpzc_TLZVL-~eM=xB|nx)LfC9w~wfbp=FM5axlzuK!4- z+7VHB(68MyK_vaky?{cn?*+#O1qOhjF+mZ(r>k)^#{SiIG=8M(MGrvABkh@9hOOPr zJ?YBb+|%9QxL+@nWYPCbLvFk~H{Q*ScQI@mP$Sb|s-kfkq|r#~%CS_Fq`!i7k?5Do z0~N-Bq#5?=sznoP)5PYmC89y9R!O}^q)TL-$Oe&3B9}olkJJhYhIEK)f-K`o-UMOX z1@>&>TKxOm=MDUC;JRtG_zkNA&gW~q&D#YJjvK92wT`cUId&~T@CEpyW4(m049^)G z2fzhXr#p~caKOUNT&kPaz)qc6W!?^;vu4#Zc48Y%%}{rpoj932^fITNd-SnQtWPb# zhc&C8vC;!JZHJvyvdXYQN7v_)i{Tz4A@2y9j_Gk6F5f?qRzmJ5lzLcb0$G#7jd2O*)=?G zH?z!Bbj=g=GLN)0La zY~xL2Mm2%WCuO3pLZL{j?Qk&A_9Gc`Jw`dBx}5>6vZ;dFcMvDEPQv~NJcV1as(!lCYfut##BSLDa3 zRKTp@v6AD#!yp|@b!+Y=*QsyOL|&qv%QV`&HGLc^mQ}iBGMXyHk0o@vo>YN9`$j?6E)JE#Z{Rb z^n3$^+7fBLY*^sjWxa4oi>jAWi38_+&2)o~7A#+G>lX_Jh4zJv)6m$`q7h&EY|njC z(7{+feg;T!xTJFWL&TiW!Z2%%w}6$d)#hv9H*xRtw{f+tbzBb6^U{B-PJ`@t!`iZr zH@_S;$?XNWB*ZS^atAM@dAa`&aB2K_^G!k9u$x1uUqWa-Z$*ZL>Zq_Uw;_a02zSFjI{#r^}uzI&z*zs zs%cwW(6C|IZeWrPyJf4HRRPHBrYFtmSwJrBb7&ZD7V*U%gbsT^(Ix;V#c#fU}Q0-$&2{mYS! zjRE)^A~(b$z~@KN2F=F+Jmgt!w^jgrV|Kj&czPPo0{q&1Jn~=w-Zvin65v}|apY3Y zZQh-FmIFNUX1rI8tU+3uQD7h)0DmKG44<3j$-#{R;B&aI!P`ZEf1Utdy^Q_Sd%-}q z`Vn~b3XvZZxkKbtBCipldP?mQxl7~?B9tcOn0AA>Jt99RLQt&UBJvX=KP6Hkt$G`x zt}kLJA*=csk*`Hlb&pI4Kh--#2o=>Yh};M1HS=WfT~fS9CsMt&k#`< z?@)P_?BfJfruw-SwWjEk0dfGG5B%|+{^9uV=!xqtpC zLsv`A!8SH2vr>P-@+N%;O#%Ms>`d8 LsTOIQyU+gz_$2ym literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/algorithms/__pycache__/arm_state.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/arm_state.cpython-39.pyc index 5f8f7289a2a8f4e1a138a18dfbcd806e6d5d4b54..965de5156cbc97f09948a82f68a5593e521a093f 100644 GIT binary patch delta 399 zcmZ3+^O}b@k(ZZ?0SNpG%rd4;+_BDnayL^vqvGV( zOh=SO3i69HOEUBGQj3C9^NRC}ToOwXZ}Ft07H1Zvro?Atre|zk$85?dAqzC%SBQQ_ zer~FMR&iPqn20Ygp8SI)P|^w%bj(7G0*pe8LU5Xmk!^AuYrLpDP_hW5ABm8ge2G;@ K07H?08 z!n%lYAtR8_3s%8`q=FAsWO6ZMpe?cqB2W|9peBf-st1}WhAJ|dkx7grg&im%nZhyI zoJp3IA(%mvcXBF|(d4B}@r?45S(%S)e#>maC@Kx~z^_34jQreG{jB1&Brq}Ak~L7& z4CFUvAw~g4Ax0q>J$W%}yr?Wtq6nlBiIABr&ZeV*E(la}i^C>2KczG$)s7L!D`o-` G983U)zC`o@ diff --git a/Massage/MassageControl/algorithms/__pycache__/force_planner.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/force_planner.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..62f3046409f13888fdf8ba1b0e5343b952db3c63 GIT binary patch literal 5375 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 literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/algorithms/__pycache__/hybridAdmit_controller.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/hybridAdmit_controller.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ed49c70fff3b5fa10b23cc06b3b71fd6d09b50b GIT binary patch literal 4415 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 J;8hey{~t-NKCb`( literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/algorithms/__pycache__/hybridPid_controller.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/hybridPid_controller.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4dd152b8d25246522ced81f954f44071d2597e3 GIT binary patch literal 4546 zcmb_gTXWmE6$VI3qAr$XTaoR=PTbs;-P&!Z-R&jaTlUsw*G-*mA2ie9Fam5-ONuH; zCu@)VQfFtM+CQ-EjQp5?(cgjBKIN^?edzQ%AjQa@>~uO)dH50M;NSq~5cmMtUs$Ly z{C37~9sFgTv44;-|0_Xw4^Q$OAei7G>t}D?w;)@g9Xb6HXTlavSdJ?FiYb>uH>&ol zC^JzGYf-&l=S;F;W4a)lvMyVveA+%^!^Pp^DL>=Jt`aUq%l&0j=3%Gb`Gg5qRG%|Z zmDN+be@XDitXF%9k+7W}*Y0kd`e_i4UUFzi@xF>4LnTpee&8qaK|D%T9EMUs<2>@y z1H7wB`ocT%qi{f;=6_BuB==E}tj`7OThbO>Sbw#?VSAjSeBS6gq9n@CS-&JI!o|BR zs-lK>)5xc6ydBB{V`^Rx&+Qqrt38>Y2*)*m#obfRvrG zDWC9(b!KrkVN+{jn`H3`^K8M;k+q{t^bQ;!j-}GB=LMr6^*mhWx(}O1(6QWY5t~BEvoHjQmKdD!SA4%-9m25wp3^$zOZo zb9q5D;H7D>Ww32<5q7hYE|9J1ZD~&1EVRpW+E$_MKzm8FO}nm{MTH&H+Icwkc7cIG0j%xCY9PG`GhX6#NB`PfdmhdFE0gStt-Iwhy$DiHi`JYwh<}cIp z<7=;*`*TbB-1H|Fr(~Jw|9315OnXdx5C*+L8iIex)Xhw)n_ACK9ZdJU9t*{qme1IU zZ8Q~w?kYQRCibv8aoU;38gc&D)_n%+`WY)cU=nuNNoi6VHi#qt%(Fg*HGy5i*i%0X z#%mK^%P6%lz1w&%;@z5*1r``ekQ_E#f_^!x8@5(ihkEajj1qcUA^8%?f+A>j*eYq- zD`d&9p#E)UF>gswKiw--M;=%3u;D88L@kV0He3@W#6!JaHuW{?!L%p&N*>87A}@Vy ztud2{^~~~>&h)XPY`aRQbO;ob& zVMsBoX1XE<$hqCBaLF#cKD{x?zB0vxuZg@P;`|G*X8tqXzIDb=Fc;vVBC4jfGrfs& zKB_Z5y@fgBPAoGMTr&%*lPYOx9Nuk0jOuoJeRyYj*NpA<8Q-9}QCX+UQT-JW?YH2e!)Go)a+ zK-LtdeRwrew-{z!@_1waGu9($a zfrK+Um>$@<$o1~T1^do(efw$Z@8Z1&77S#kh51@ zpRp|EG1nP(z7G3q7j)qFOk=qIM&T{bw_(_956*K%{BOM7GTsV1qa$xdL*AwtTV6fK z^|ar>s)zw{Znu$hePenj=X#3iBG+%sc$_>KuCEynwSw!LlY9rK!=srS^-0F{b;I?I zNrSXB4$rVVzUSSvG3-t6nX%o?xjtk53cQ`?`ZtK{)%USJdT$!$RzF5r{e<8xg0~5N zO7Js+pA-B7pciJWXNXYIN>;xlAVO2O2tFqGgy0>5cM0Ajc%R^Zpuf?pFn1oRfNGvjBZ_?%#e;5Pu>_DB1Np|3pbXYn9Nk8n-QHWQbakoZhJ zBJ1B0>=HaC_=4d4kyBTRg}hYx!#|)lp#Tb|vv1EeLvXU+4XSR95_Zg@2KFso5?$2HeIb1qiDBe4(A3;Bg}Aj8n}<|3lA zvoa@X7o|F$gbFV2l-+fATanP~YCAbfbZK-L;W}ydwUuNLjE}YwTxbJ7+(I@+36A`c zqC737k9}}p_VEL%U-e(w}4iJYO^bCDOa z8r6r5Uc(T97&Iqy!Fr4z52aBi1nZb6oXlc0ITjsnGwR`Okgmk3)LP$4o zPp#gHG#-g={S_h+yIn&&598EN!+7+{fQA%rtKlQ40_5l4@sr@)c$BI*iUI|V{jr}O z;OnZum)?;-jQZqh_GcGDau=CE^b9F_W?)G}ntwCD5PJso@

}%ZjYN5WR}5NeADm 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 F{||x#>t+A| literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/algorithms/__pycache__/positionerSensor_controller.cpython-39.pyc b/Massage/MassageControl/algorithms/__pycache__/positionerSensor_controller.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..95f876bce3a78bb2173d44c9b766ec37efbb8f14 GIT binary patch literal 4858 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 delta 9845 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 LAo}?P$-@30_vb)_ diff --git a/Massage/MassageControl/hardware/__pycache__/dobot_nova5.cpython-39.pyc b/Massage/MassageControl/hardware/__pycache__/dobot_nova5.cpython-39.pyc index 88e09f497520eed1ff9654f9705c5c7a6c87532f..c53eae54c15287a3e9d439e7919a467335318bac 100644 GIT binary patch delta 7893 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 delta 6952 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 diff --git a/Massage/MassageControl/hardware/__pycache__/force_sensor.cpython-39.pyc b/Massage/MassageControl/hardware/__pycache__/force_sensor.cpython-39.pyc index 304bf5a99943a0c6720b87edd3d69ea6cfb15529..daa2ed3f30c5c501e45e7dcb35fed9ef3361c5f8 100644 GIT binary patch delta 1270 zcmZ{jPfQe79LML)va>700~x-CdiOg6*JTX*B`EWQ~K zh#b%~C27+(d9jUu66N5v*vzR-Pfe5d(rXVBn}(w&4_y$yE>5#A>U zcNL;sQ5-d=*vgz@L}xdfPTO?twC8PHo*T*eyOAHFB=8Fd{v~9HPwFLdmOs-|+K?#5 zF8F`yKdI!b|3&j4A*1}4mJAu>&s&yB-oMZ~ppuK+Y3tI*MC^+O92n;h+XfR8FfR!h zN!G;o+me|AJUZ|R@F_3{%mbsmIeBd4GR#4NKy_AvsL7bQVZ>NFJTa?YtC^0?77=s> zxC+1SQpc^cqHTI6%ll4pU-aY`4o3+Y=L@MzWPCvK9v)K~%^ZwY8tV(Wh)_zLVe$t*QjKeQ$ z>u+8DD7;NT73c%rSJjAw1#1Y(`>_vRky%L2ka{y=m8o^(c*(3(solw-z0nk={un`! zK8REtFK8^Wdaby;;ZaxW9%yvkqe9eCK9TO~M0rCCOT8;IDj zTD9VNRXT5|?5141mFo_*#c~w~)&vYSPzQ4CL;lY(OUEJR0Vbcx9O)j0Nr94paUiU{ zCG0?3GpnoA4fswbt=~pS2e9rx%Lsi<{&(jiG2zWF&yiDF9(sk-WxnVj>ibXe88OJC3TBjLIl7Z1!Xx*lVp`q03ycmGbv6wjYnBn$qx zC*oM#@98De{;xfYq^*KnjTN`zxSr`)lu@4T?dX&bNX~s*1h6{-uO};iwou<4f2((k zjL5r;BJLW1l*|F@fc%}-VWoi20X)s{N$$r`P48ix?t3T*SmY&wUdfm(Nih85E*vvXL+%w<=uzQjtq zPCe_E%~TxvhCj^?k$e1kHht!S+?|^opPZeSR}L>AWssMW*Tee?;zH$;oD?58_0|8g CgDr^w delta 1389 zcmZ{jO>7%Q6vubg@y7MmG>H{V6Q>_8O|x-QBBi!U1T->`G$~FCN!!#Bao4-!Wa-+D zX4a*313{olm0GD%2U>AKa6%kth4uteIRiq1^Ke4qLM2XIxK!f3S+!{;u(Ut@-}B78 zH}AdqVdcA(l$}Z?HTao77uIv%q#o*IQ<$-Anrv#-xT^sT#co#@Q?c?u>?1PtdpbSdoyDc;CS{*_?!8yPL773JadGQ zlK5%YUNR{j?5dGsSnfHjlUK!NU(S3D*8bUr8)n2;eMgSXqMQR*X|@yf8;CMu0dW#x zB2FRRM7)JqM3h7}y~kKWIVq;o{f8>uPOH(dn=U(x&Sk_ofHXO6@)oPQc3`t&xS9SP zG749pjT15>+{`?g756d+^2c$5N~f2lP|qVyAQFftG7%3m*(nuTrL2-NaLpv*G{B0p z0n}#zGQsSCR-J~+D(EYQi_eYe#1kJ3j6>|Z1DR7Z=vT4LCoa1iy{as2k_O>f9E+xwhDs z+poj;UdshrYBE&t?eW}h7S4q13cLoDaqd&P5zPj+RL1Lmo3C$=yNo-2i_=Fla}3s0 z5-_xGl?RMP9R=Uhbq%i^_>qu#@%q7KaytC%U;>RVheybX@YmsG(uXCINsoI?9@tHX zGFMEEWD9CS)nL7kM{WTgjgETD|JA^&;q{UCNJ(9@gu7M{7=ZbR21317tRTxEK1AS4 zh+fcDRM*4#(L;pX5%))j#LfKfeu3VP0nl>;C!yV7x5fSZF!@yckv~pqVtmYcTlKad zm-Zl3-Y?Xtm8cZDG?5wnNowBUPj* zsVFVtA;d$d1u9w&&>L^@KlVyCO;6l8G2TtWqm{rbk3D10H}*HsSP%rPL`>s0JPF^AjIgy7Sx^upFY;#Pu1VQZdP9hZywh_%rsxz zTwhuZ9xZ?WJR8ivt$$hyo-PN~FO3JQ&DF}<{pI?HTfxlj;O?xN+?i|4ylO7acHA5H zZr8s&{Wf(Yj1Y=}qQ$L3-w?~YoDKAC3KyZQJ)VyIF?M5aDVTp4+?j1GyhD31e*;g@ z#%)1bdCB;ui0yOz6A|yx{CYol@+_G8+(G9|miX8}UyGVHBklDZ64+^qe@radiCr8( zAxVu?pbAx5C3!94z5-?NK(U|s!&y11eo#4|Ls0|1zXl!|#_iAHJQ*b(eF<||4>h{c zTGncWpQ#a#c-k=i+r!f^AY@iZO80faoV>4Fd|3GLtK-qgnJ76jrTMXtNIxE>$k+3w zu^dUAd1fe?Y#!rX6FnKgr64EW09moDb$IV%eIMKg}sRhMVB2tuZ z!GU+9SfRX2&DHx$L1b5<{H_j&+AHEH2*jZ`F?sku0*Ab$v=BB5unqk~EALUWFvj-3 zk<_ykic*s7G5B^IHxxn)ji<1SlPElLg)G1#IZZAfxkSrQrV`(81-KzK4_|bJa>Jtw zx&hl5-D}8A&2>i5ldK7 za=rs2`w79M(y(l_oFn`$rI=$@fn|+wdfjqLEZftfk=bUaULqPI1~9?S#IF;GJ?d)V z&k%a?GoT0fKD6OUGZ?B%frJIZ6;~le;d+FrsQV2)IaqM*lEY4@rx^0Ol^VN#0t4r} A$^ZZW literal 0 HcmV?d00001 diff --git a/Massage/MassageControl/tools/__pycache__/serial_tools.cpython-39.pyc b/Massage/MassageControl/tools/__pycache__/serial_tools.cpython-39.pyc index 990b67d9063d0e74b4de5472c6103e920c01b613..762ad61114b819923d4da2f762cd9cf9364be426 100644 GIT binary patch delta 51 zcmca8d_|Z$k(ZZ?0SNpG%r9PGKO;XkRX?jZEeT9)KFes#&KNbBk@GSDVWkff diff --git a/Massage/tools/__pycache__/log.cpython-39.pyc b/Massage/tools/__pycache__/log.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7b504d16d59c505939f625d00ed5ec1c6b7bd835 GIT binary patch literal 3241 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 PkaOUNkvu-Tw`25w;4&=y literal 0 HcmV?d00001 diff --git a/logs/test.py b/logs/test.py new file mode 100644 index 0000000..1e0aae1 --- /dev/null +++ b/logs/test.py @@ -0,0 +1,7 @@ +from scipy.spatial.transform import Rotation as R +import numpy as np + +arm_orientation_set0 = np.array([-180,-30,0]) +b_rotation_s_set0 = R.from_euler('xyz',arm_orientation_set0,degrees=True).as_matrix() +tcp_offset = b_rotation_s_set0 @ np.array([0,0,154.071]) +print(tcp_offset) \ No newline at end of file