From 5467b75323b870d01a10254948bb3411159e5297 Mon Sep 17 00:00:00 2001 From: Simon Ottenhaus <simon.ottenhaus@kit.edu> Date: Mon, 8 Jun 2020 15:33:01 +0200 Subject: [PATCH] NaturalIKTest --- .../components/NaturalIKTest/NaturalIKTest.cpp | 13 +++++++++++++ .../RobotAPI/libraries/diffik/CompositeDiffIK.cpp | 7 ++++++- source/RobotAPI/libraries/diffik/CompositeDiffIK.h | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp index 2daf4424e..f230c8305 100644 --- a/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp +++ b/source/RobotAPI/components/NaturalIKTest/NaturalIKTest.cpp @@ -582,6 +582,7 @@ namespace armarx ik_L.setLowerArmLength(lower_arm_length); + NaturalIK::ArmJoints arm_R; arm_R.rns = rns_R; arm_R.elbow = elb_R; @@ -664,6 +665,7 @@ namespace armarx Eigen::Matrix4f target_R = math::Helpers::Pose(p.target + offset, targetOri); + NaturalDiffIK::Result ikResult; if (p.setOri) { @@ -686,6 +688,17 @@ namespace armarx } //ARMARX_IMPORTANT << ss.str(); + CompositeDiffIK cik_R(rns_R); + cik_R.addTarget(arm_R.tcp, target_R, VirtualRobot::IKSolver::CartesianSelection::All); + CompositeDiffIK::NullspaceJointTargetPtr nsjt(new CompositeDiffIK::NullspaceJointTarget(rns_R)); + nsjt->set(2, 0.2, 1); + cik_R.addNullspaceGradient(nsjt); + CompositeDiffIK::NullspaceJointLimitAvoidancePtr nsjla(new CompositeDiffIK::NullspaceJointLimitAvoidance(rns_R)); + nsjla->set(2, 0); + cik_R.addNullspaceGradient(nsjla); + CompositeDiffIK::Paramaters cp; + CompositeDiffIK cikResult = cik_R.solve(cp); + vizrobot.joints(arm_R.rns->getJointValueMap()); diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp index daefa367e..0e72540bd 100644 --- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp +++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.cpp @@ -34,11 +34,16 @@ CompositeDiffIK::CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns) ik.reset(new VirtualRobot::DifferentialIK(rns, rns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped)); } -void CompositeDiffIK::addTarget(const CompositeDiffIK::TargetPtr& target) +void CompositeDiffIK::addTarget(const TargetPtr& target) { targets.emplace_back(target); } +void CompositeDiffIK::addTarget(const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode) +{ + addTarget(std::make_shared<Target>(rns, tcp, target, mode)); +} + void CompositeDiffIK::addNullspaceGradient(const CompositeDiffIK::NullspaceGradientPtr& gradient) { nullspaceGradients.emplace_back(gradient); diff --git a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h index f306fb6ed..5bf5f383b 100644 --- a/source/RobotAPI/libraries/diffik/CompositeDiffIK.h +++ b/source/RobotAPI/libraries/diffik/CompositeDiffIK.h @@ -153,6 +153,7 @@ namespace armarx CompositeDiffIK(const VirtualRobot::RobotNodeSetPtr& rns); void addTarget(const TargetPtr& target); + void addTarget(const VirtualRobot::RobotNodePtr& tcp, const Eigen::Matrix4f& target, VirtualRobot::IKSolver::CartesianSelection mode); void addNullspaceGradient(const NullspaceGradientPtr& gradient); Result solve(Parameters params); -- GitLab