26 #include <SimoxUtility/math/convert/deg_to_rad.h>
27 #include <SimoxUtility/math/convert/rad_to_deg.h>
29 #include <VirtualRobot/math/Helpers.h>
34 : side(side), shoulderPos(shoulderPos), scale(scale)
41 Eigen::Vector3f vtgt = targetPos;
45 for (
int i = 1; i < soechtingIterations; i++)
47 Eigen::Vector3f err = targetPos - fwd.
wrist;
56 if (minElbowHeight.has_value() && minElbowHeight.value() > fwd.
elbow.z())
58 float mEH = minElbowHeight.value();
61 Eigen::Vector3f wri_n = (fwd.
wrist - shoulderPos).normalized();
62 Eigen::Vector3f elb = fwd.
elbow;
63 for (
int i = 0; i < 20; i++)
65 float a = (
lo +
hi) / 2;
66 Eigen::AngleAxisf aa(
a, wri_n);
67 elb = shoulderPos + aa * (fwd.
elbow - shoulderPos);
119 else if (side ==
"Left")
126 throw LocalException(
"Unsupported side: ") << side <<
". supported are Left|Right.";
135 float Chi = simox::math::rad_to_deg(std::atan2(x, y));
136 float Psi = simox::math::rad_to_deg(std::atan2(z,
std::sqrt(x * x + y * y)));
149 sa.
SE = -4.0 + 1.10 * R + 0.90 * Psi;
150 sa.
EE = 39.4 + 0.54 * R - 1.06 * Psi;
151 sa.
SY = 13.2 + 0.86 * Chi + 0.11 * Psi;
152 sa.
EY = -10.0 + 1.08 * Chi - 0.35 * Psi;
154 sa.
SE = simox::math::deg_to_rad(sa.
SE);
155 sa.
SY = simox::math::deg_to_rad(sa.
SY);
156 sa.
EE = simox::math::deg_to_rad(sa.
EE);
157 sa.
EY = simox::math::deg_to_rad(sa.
EY);
170 Eigen::AngleAxisf aaSE(sa.
SE, Eigen::Vector3f::UnitX());
171 Eigen::AngleAxisf aaSY(-sa.
SY, Eigen::Vector3f::UnitZ());
172 Eigen::AngleAxisf aaEE(-sa.
EE, Eigen::Vector3f::UnitX());
173 Eigen::AngleAxisf aaEY(-sa.
EY, Eigen::Vector3f::UnitZ());
174 Eigen::Vector3f elb = -Eigen::Vector3f::UnitZ() * upperArmLength;
175 elb = aaSY * aaSE * elb;
176 Eigen::Vector3f wri = Eigen::Vector3f::UnitZ() * lowerArmLength;
177 wri = aaEY * aaEE * wri;
182 res.
elbow = shoulderPos + elb;
183 res.
wrist = shoulderPos + elb + wri;
201 return upperArmLength;
206 upperArmLength =
value;
211 return lowerArmLength;
216 lowerArmLength =
value;
220 :
natik(
natik), arm(arm), setOri(setOri), params(params)
239 arm.
rns->setJointValues(startJointValues);