编程逆运动学解决方案仅提供工具的x,y,z

时间:2016-04-20 09:06:00

标签: c++ robot inverse-kinematics

我正试图实现一个反向运动学解决方案,能够找到机器人可以给出的所有可能的Q状态,给定工具的位置是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状态不会将机器人移动到所需位置。我似乎无法看到我的实现错误在哪里?

1 个答案:

答案 0 :(得分:0)

用数值解法求解逆运动学问题不是最好的选择。如果您找不到分析解决方案,您应该选择该选项。顺便提一下,精心设计的机器人应该有一个清晰的反向运动学模型。

对于您的机器人,这里是反向运动学模型:https://smartech.gatech.edu/bitstream/handle/1853/50782/ur_kin_tech_report_1.pdf