私は、ロボットがツールの位置を与えたときに可能なすべてのQ状態を見つけることができる逆運動学的解を瞬時に試行しようとしたとき、x、y、z ..工具のx、y、zのみを提供する逆運動学的解法
私は最小二乗アプローチを使用して選択しましたが、すべての可能な解決策を提供するものではなく、最小のエラーを持つものだけを提供するものがあります。このケースでは、ツールの位置を満たすステート。
私の実装はそのように見えます。
Eigen::MatrixXd jq(device_.get()->baseJend(state).e().cols(),device_.get()->baseJend(state).e().rows());
jq = device_.get()->baseJend(state).e(); //Extract J(q) directly from robot
//Least square solver - [AtA]⁻1AtB
Eigen::MatrixXd A (6,6);
A = jq.transpose()*(jq*jq.transpose()).inverse();
Eigen::VectorXd du(6);
du(0) = 0.1 - t_tool_base.P().e()[0];
du(1) = 0 - t_tool_base.P().e()[1];
du(2) = 0 - t_tool_base.P().e()[2];
du(3) = 0; // Should these be set to something if i don't want the tool position to rotate?
du(4) = 0;
du(5) = 0;
ROS_ERROR("What you want!");
Eigen::VectorXd q(6);
q = A*du;
cout << q << endl; // Least square solution - want a vector of solutions.
Q-stateがロボットを所望の位置に移動させないので、最初は逆の親が正しいようには見えない。私の実装がどこに間違っているのか分かりません。
はなぜ解析的にそれを解決しませんか? –
私はそうする方法がわかりません。 – Lamda
分析ソリューションは、イプシロンエラーなしですべてのソリューションを提供します。よく知られているロボットを使用している場合は、インターネットまたはロボットのマニュアルで準備ができたモデルを見つける必要があります。 –