SimpleGridReachability.cpp
Go to the documentation of this file.
2
4
5namespace armarx
6{
8 SimpleGridReachability::calculateDiffIK(const Eigen::Matrix4f targetPose,
9 const Parameters& params)
10 {
11 VirtualRobot::RobotNodePtr rns = params.nodeSet;
12 VirtualRobot::RobotNodeSetPtr tcp = params.tcp ? params.tcp : rns->getTCP();
13 CartesianVelocityController velocityController(rns);
14 CartesianPositionController positionController(tcp);
15
16 Eigen::VectorXf initialJV = rns->getJointValuesEigen();
17 for (size_t i = 0; i <= params.stepsInitial + params.stepsFineTune; i++)
18 {
19 Eigen::Vector3f posDiff = positionController.getPositionDiff(targetPose);
20 Eigen::Vector3f oriDiff = positionController.getOrientationDiff(targetPose);
21
22 //ARMARX_IMPORTANT << VAROUT(posDiff) << VAROUT(oriDiff);
23
24 Eigen::VectorXf cartesialVel(6);
25 cartesialVel << posDiff(0), posDiff(1), posDiff(2), oriDiff(0), oriDiff(1), oriDiff(2);
26 Eigen::VectorXf jnv =
27 params.jointLimitAvoidanceKp * velocityController.calculateJointLimitAvoidance();
28 Eigen::VectorXf jv =
29 velocityController.calculate(cartesialVel, jnv, VirtualRobot::IKSolver::All);
30
31
32 float stepLength =
33 i < params.stepsInitial ? params.ikStepLengthInitial : params.ikStepLengthFineTune;
34 jv = jv * stepLength;
35
36 for (size_t n = 0; n < rns->getSize(); n++)
37 {
38 rns->getNode(n)->setJointValue(rns->getNode(n)->getJointValue() + jv(n));
39 }
40 }
41
42 Result result;
43 result.jointValues = rns->getJointValuesEigen();
44 result.posError = positionController.getPositionDiff(targetPose);
45 result.oriError = positionController.getOrientationError(targetPose);
46 result.reached =
47 result.posError < params.maxPosError && result.oriError < params.maxOriError;
48
49 return result;
50 }
51} // namespace armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
constexpr auto n() noexcept