Я в момент попытки реализовать обратное кинематическое решение, способное находить все возможные Q-состояния, которые робот мог задавать положением инструмента: x, y, z ..Программирование обратного кинематического решения при условии, что только x, y, z инструмента
Я решил сделать это с использованием метода наименьшего квадрата, но что-то подсказывает мне, что оно не будет предлагать все возможные решения, а только ту, с наименьшей ошибкой, которая в этом случае меня интересует все возможные Q - состояния, которые соответствуют положению инструмента.
Моя реализация выглядит как таковая.
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-состояние не перемещает робота в нужное положение. Кажется, я не вижу, где моя реализация неверна?
Почему бы не решить ее аналитически? –
Я не уверен, как это сделать. – Lamda
Аналитическое решение предоставит вам все решения без какой-либо ошибки epsilon. Если вы используете хорошо известного робота, вы должны найти готовую модель в Интернете или даже в руководстве робота. –