From 6c761b0a4f0955c3651bc47faacc00484fbdcc52 Mon Sep 17 00:00:00 2001 From: m-guberina <gubi.guberina@gmail.com> Date: Tue, 10 Dec 2024 16:06:51 +0100 Subject: [PATCH] cm --- python/examples/.cart_pulling.py.swp | Bin 0 -> 28672 bytes .../.crocoddyl_optimal_control.py.swp | Bin 53248 -> 69632 bytes .../crocoddyl_optimal_control.py | 75 +++++++++++++----- 3 files changed, 56 insertions(+), 19 deletions(-) create mode 100644 python/examples/.cart_pulling.py.swp diff --git a/python/examples/.cart_pulling.py.swp b/python/examples/.cart_pulling.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..e874c004798a168923f4377f425b22573deb4629 GIT binary patch literal 28672 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 b;Qj@oegY5lCMpyd6@W^e#FEtXN<9VuPLnkQ literal 0 HcmV?d00001 diff --git a/python/ur_simple_control/optimal_control/.crocoddyl_optimal_control.py.swp b/python/ur_simple_control/optimal_control/.crocoddyl_optimal_control.py.swp index b627567f5f7baa20c97ef87c749e9283073497e2..d737650ae8977398706a53b075ca34bd36a1186a 100644 GIT binary patch delta 2417 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 delta 621 zcmZozz|ydQSv1KY%+puFLeGeSfq_AQfniTrMEdfLqHp>6xf$vi7#Ns9;tUK7UXuj{ z#5q}^JpaiP1;jU>5U}8%#Mm%NfrVFzfq@~75n_bbWI+Y{`b)eF46At=81i@-7`%8H z80>f%7;f+|FwEv*U?|{WU@+uiVEE6?!0>>ZfnhN>149}&1A`<t1H*GJ28K;s3=F|s z3=HyI3=DEy3=E$+85p*4GB7l9GB9{^GB7A{GB7;iU|?9v!N8Eu!N8!)!NBl=oq^#H zI|IX9b_Rw3c7}QeA$A6avuq3uoooyYWo!%#x@-&#A6OX}4zn^atYT$gn8M1y;Ka(n z@R@~yVFn8WLl_GKgEI>QgBS|~!$)QYhSSUp43*3b3_i>Z44lji3|E*K80IrEFvKu1 zFeouGFx+EgU|7k>z>v-e@p>xA`_S-VV3-`|C^I?Yb;aa<Md`@_Z@DLbxFWZiL+LR0 z<h%EkH}mNIP~_!iU|>iFX%b*y@SiLg&|a_0$-p4a$-uzK$-uzC$-uCdgMncJ)Q=_{ z3=A*X85riUGce3%XJBw*XJBAqXJ9zW#=vldje((uje)_1je$Xije+3~)Qc-w85p`* z85m+&85sCk85pjzFfi<6VPIIq!oZNn!oXn1!ocv0nStQ|GXuj)W(IqPUS<Y{3T6g| zWM&2id1eL%Ic5e1Sx{IoF);KqF)&0iF)&y%F);jLWMJ6G$iUFe$iPs;2=PV|<K%n4 dB`4?XmE2q#Xv{u&{!P}&+-?^)PmIhj0|2p6YJLC! diff --git a/python/ur_simple_control/optimal_control/crocoddyl_optimal_control.py b/python/ur_simple_control/optimal_control/crocoddyl_optimal_control.py index 5b61558..3be6cc0 100644 --- a/python/ur_simple_control/optimal_control/crocoddyl_optimal_control.py +++ b/python/ur_simple_control/optimal_control/crocoddyl_optimal_control.py @@ -12,6 +12,8 @@ if importlib.util.find_spec('mim_solvers'): import mim_solvers def createCrocoIKOCP(args, robot : RobotManager, x0, goal : pin.SE3): + if robot.robot_name == "yumi": + goal_l, goal_r = goal # create torque bounds which correspond to percentage # of maximum allowed acceleration # NOTE: idk if this makes any sense, but let's go for it @@ -46,29 +48,64 @@ def createCrocoIKOCP(args, robot : RobotManager, x0, goal : pin.SE3): # to do so, you need to implement a residualmodel for that in crocoddyl. # there's an example of exending crocoddyl in colmpc repo # (look at that to see how to compile, make python bindings etc) - framePlacementResidual = crocoddyl.ResidualModelFramePlacement( - state, - # TODO: check if this is the frame we actually want (ee tip) - # the id is an integer and that's what api wants - robot.model.getFrameId("tool0"), - goal.copy(), - state.nv) - goalTrackingCost = crocoddyl.CostModelResidual(state, framePlacementResidual) - # cost 4) final ee velocity is 0 (can't directly formulate joint velocity, - # because that's a part of the state, and we don't know final joint positions) - frameVelocityResidual = crocoddyl.ResidualModelFrameVelocity( - state, - robot.model.getFrameId("tool0"), - pin.Motion(np.zeros(6)), - pin.ReferenceFrame.WORLD) - frameVelocityCost = crocoddyl.CostModelResidual(state, frameVelocityResidual) + if robot.robot_name != "yumi": + framePlacementResidual = crocoddyl.ResidualModelFramePlacement( + state, + # TODO: check if this is the frame we actually want (ee tip) + # the id is an integer and that's what api wants + robot.model.getFrameId("tool0"), + goal.copy(), + state.nv) + goalTrackingCost = crocoddyl.CostModelResidual(state, framePlacementResidual) + # cost 4) final ee velocity is 0 (can't directly formulate joint velocity, + # because that's a part of the state, and we don't know final joint positions) + frameVelocityResidual = crocoddyl.ResidualModelFrameVelocity( + state, + robot.model.getFrameId("tool0"), + pin.Motion(np.zeros(6)), + pin.ReferenceFrame.WORLD) + frameVelocityCost = crocoddyl.CostModelResidual(state, frameVelocityResidual) + runningCostModel.addCost("gripperPose", goalTrackingCost, 1e2) + terminalCostModel.addCost("gripperPose", goalTrackingCost, 1e2) + else: + framePlacementResidual_l = crocoddyl.ResidualModelFramePlacement( + state, + # TODO: check if this is the frame we actually want (ee tip) + # the id is an integer and that's what api wants + robot.model.getFrameId("robl_joint_7"), + goal_l.copy(), + state.nv) + framePlacementResidual_r = crocoddyl.ResidualModelFramePlacement( + state, + # TODO: check if this is the frame we actually want (ee tip) + # the id is an integer and that's what api wants + robot.model.getFrameId("robr_joint_7"), + goal_r.copy(), + state.nv) + goalTrackingCost_l = crocoddyl.CostModelResidual(state, framePlacementResidual_l) + goalTrackingCost_r = crocoddyl.CostModelResidual(state, framePlacementResidual_r) + frameVelocityResidual_l = crocoddyl.ResidualModelFrameVelocity( + state, + robot.model.getFrameId("robl_joint_7"), + pin.Motion(np.zeros(6)), + pin.ReferenceFrame.WORLD) + frameVelocityResidual_r = crocoddyl.ResidualModelFrameVelocity( + state, + robot.model.getFrameId("robr_joint_7"), + pin.Motion(np.zeros(6)), + pin.ReferenceFrame.WORLD) + frameVelocityCost_l = crocoddyl.CostModelResidual(state, frameVelocityResidual_l) + frameVelocityCost_r = crocoddyl.CostModelResidual(state, frameVelocityResidual_r) + runningCostModel.addCost("gripperPose_l", goalTrackingCost_l, 1e2) + runningCostModel.addCost("gripperPose_r", goalTrackingCost_r, 1e2) + terminalCostModel.addCost("gripperPose_l", goalTrackingCost_l, 1e2) + terminalCostModel.addCost("gripperPose_r", goalTrackingCost_r, 1e2) + # put these costs into the running costs - runningCostModel.addCost("gripperPose", goalTrackingCost, 1e2) runningCostModel.addCost("xReg", xRegCost, 1e-3) runningCostModel.addCost("uReg", uRegCost, 1e-3) # and add the terminal cost, which is the distance to the goal # NOTE: shouldn't there be a final velocity = 0 here? - terminalCostModel.addCost("gripperPose", goalTrackingCost, 1e2) terminalCostModel.addCost("uReg", uRegCost, 1e3) terminalCostModel.addCost("velFinal", frameVelocityCost, 1e3) @@ -104,7 +141,7 @@ def createCrocoIKOCP(args, robot : RobotManager, x0, goal : pin.SE3): # and this should be 2 * model.nv the way things are defined here. - if robot.robot_name == "heron" or robot.robot_name == "heronros" or robot.robot_name == "mirros": + if robot.robot_name == "heron" or robot.robot_name == "heronros" or robot.robot_name == "mirros" or robot.robot_name == "yumi": xlb = xlb[1:] xub = xub[1:] -- GitLab