2016-04-20 15 views
0

私は、ロボットがツールの位置を与えたときに可能なすべての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がロボットを所望の位置に移動させないので、最初は逆の親が正しいようには見えない。私の実装がどこに間違っているのか分かりません。

+0

はなぜ解析的にそれを解決しませんか? –

+0

私はそうする方法がわかりません。 – Lamda

+0

分析ソリューションは、イプシロンエラーなしですべてのソリューションを提供します。よく知られているロボットを使用している場合は、インターネットまたはロボットのマニュアルで準備ができたモデルを見つける必要があります。 –

答えて

0

数値解で逆運動学の問題を解くことは最良の選択肢ではありません。分析ソリューションを見つけることができない場合に備えて、そのオプションを選択する必要があります。ところで、うまく設計されたロボットには、明確な逆運動学モデルが必要です。あなたのロボットのために

は、ここでは逆運動学モデルである:https://smartech.gatech.edu/bitstream/handle/1853/50782/ur_kin_tech_report_1.pdf

+0

正直言って私はそれをどのように実装すべきかについてはあまりよく分かりません。 私は現在の位置のt_tool_baseを抽出することができます。 しかし、希望の位置のx、y、zのみを持ちます。 – Lamda

関連する問題