Im Moment versuche ich eine inverse kinematische Lösung zu implementieren, die alle möglichen Q-Zustände eines Roboters finden kann, die die Position des Werkzeugs x, y, z haben ..Programmierung der inversen kinematischen Lösung nur mit x, y, z des Werkzeugs
Ich bin gewählt, um es mit der kleinsten quadratischen Ansatz zu tun, aber etwas sagt mir, dass es nicht alle mögliche Lösung, sondern nur die mit dem kleinsten Fehler, die in diesem Fall mich interessiert alle möglichen Q bieten wird - Zustände, die die Position des Werkzeugs erfüllen.
Meine Implementierung sieht so aus.
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.
zunächst das inverse kin scheint nicht rechts, wie der Q-Zustand nicht, um den Roboter in die gewünschte Position bewegen. Ich kann nicht sehen, wo meine Implementierung falsch ist?
Warum es nicht analytisch lösen? –
Ich bin mir nicht sicher, wie es geht. – Lamda
Analytische Lösung wird Ihnen die gesamte Lösung ohne irgendwelche Epsilon-Fehler bieten. Wenn Sie einen bekannten Roboter verwenden, sollten Sie ein fertiges Modell im Internet oder sogar im Handbuch des Roboters finden. –