1
$\begingroup$

I am new to this toolbox and DH parameters in general but I noticed that the Peter Corke Robotics Toolbox for Matlab originally contains a model of the Franka Emika Panda robot. This model was made using the m-file script from the following link:

https://github.com/petercorke/robotics-toolbox-matlab/blob/master/models/mdl_panda.m

This script, shown below, states that the model was made using standard DH conventions. But when you check the model using isdh(panda) and ismdh(panda) it says that the Panda model is defined using modified DH convention and not standard DH. Snippets of these checks are shown at the bottom.

%MDL_PANDA Create model of Franka-Emika PANDA robot
%
% MDL_PANDA is a script that creates the workspace variable panda which
% describes the kinematic characteristics of a Franka-Emika PANDA manipulator
% using standard DH conventions.
%
% Also define the workspace vectors:
%   qz         zero joint angle configuration
%   qr         arm along +ve x-axis configuration
%
% Reference::
% - http://www.diag.uniroma1.it/~deluca/rob1_en/WrittenExamsRob1/Robotics1_18.01.11.pdf
% - "Dynamic Identification of the Franka Emika Panda Robot With Retrieval of Feasible Parameters Using Penalty-Based Optimization"
%   C. Gaz, M. Cognetti, A. Oliva, P. Robuffo Giordano and A. De Luca
%   IEEE Robotics and Automation Letters 4(4), pp. 4147-4154, Oct. 2019, doi: 10.1109/LRA.2019.2931248
%
% Notes::
% - SI units of metres are used.
% - Unlike most other mdl_xxx scripts this one is actually a function that
%   behaves like a script and writes to the global workspace.
%
% See also mdl_sawyer, SerialLink.

% MODEL: Franka-Emika, PANDA, 7DOF, standard_DH

% Copyright (C) 1993-2018, by Peter I. Corke
%
% This file is part of The Robotics Toolbox for MATLAB (RTB).
% 
% RTB is free software: you can redistribute it and/or modify
% it under the terms of the GNU Lesser General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
% 
% RTB is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU Lesser General Public License for more details.
% 
% You should have received a copy of the GNU Leser General Public License
% along with RTB.  If not, see <http://www.gnu.org/licenses/>.
%
% http://www.petercorke.com

function r = mdl_panda()
    
    deg = pi/180;
    mm = 1e-3;
    
    
    %% Define links (thanks Alex Smith for this code)
    L1 = RevoluteMDH('a',     0.0, 'd', 0.333, 'alpha',   0.0, 'qlim', [-2.8973 2.8973], ...
    'm', 4.970684, 'r', [3.875e-03 2.081e-03 0], 'I', [7.03370e-01  7.06610e-01  9.11700e-03 -1.39000e-04  1.91690e-02  6.77200e-03], 'G', 1);
    L2 = RevoluteMDH('a',     0.0, 'd',   0.0, 'alpha', -pi/2, 'qlim', [-1.7628 1.7628], ...
        'm', 0.646926, 'r', [-3.141e-03 -2.872e-02 3.495e-03], 'I', [7.96200e-03  2.81100e-02  2.59950e-02 -3.92500e-03  7.04000e-04  1.02540e-02], 'G', 1);
    L3 = RevoluteMDH('a',     0.0, 'd', 0.316, 'alpha',  pi/2, 'qlim', [-2.8973 2.8973], ...
        'm', 3.228604, 'r', [ 2.7518e-02 3.9252e-02 -6.6502e-02], 'I', [3.72420e-02  3.61550e-02  1.08300e-02 -4.76100e-03 -1.28050e-02 -1.13960e-02], 'G', 1);
    L4 = RevoluteMDH('a',  0.0825, 'd',   0.0, 'alpha',  pi/2, 'qlim', [-3.0718 -0.0698], ...
        'm', 3.587895, 'r', [-5.317e-02 1.04419e-01 2.7454e-02], 'I', [2.58530e-02  1.95520e-02  2.83230e-02  7.79600e-03  8.64100e-03 -1.33200e-03], 'G', 1);
    L5 = RevoluteMDH('a', -0.0825, 'd', 0.384, 'alpha', -pi/2, 'qlim', [-2.8973 2.8973], ...
        'm', 1.225946, 'r', [-1.1953e-02 4.1065e-02 -3.8437e-02], 'I', [3.55490e-02  2.94740e-02  8.62700e-03 -2.11700e-03  2.29000e-04 -4.03700e-03], 'G', 1);
    L6 = RevoluteMDH('a',     0.0, 'd',   0.0, 'alpha',  pi/2, 'qlim', [-0.0175 3.7525], ...
        'm', 1.666555, 'r', [6.0149e-02 -1.4117e-02 -1.0517e-02], 'I', [1.96400e-03  4.35400e-03  5.43300e-03  1.09000e-04  3.41000e-04 -1.15800e-03], 'G', 1);
    L7 = RevoluteMDH('a',   0.088, 'd',   0.107, 'alpha',  pi/2, 'qlim', [-2.8973 2.8973], ...
        'm', 7.35522e-01, 'r', [1.0517e-02 -4.252e-03 6.1597e-02 ], 'I', [1.25160e-02  1.00270e-02  4.81500e-03 -4.28000e-04 -7.41000e-04 -1.19600e-03], 'G', 1);

    %% Create SerialLink object
    robot = SerialLink([L1 L2 L3 L4 L5 L6 L7], 'name', 'PANDA', 'manufacturer', 'Franka-Emika', 'tool', transl([0 0 110*mm]));

    qv = [0 0 0 -4 0 0 0]*deg;
    qr = [0 -90 -90 90 0 -90 90]*deg;
        
    % place the variables into the global workspace
    if nargin == 1
        r = robot;
    elseif nargin == 0
        assignin('caller', 'panda', robot);
        assignin('caller', 'qv', qv); % zero angles
        assignin('caller', 'qr', qr); 
    end
end

Model is not DH.

Model is MDH

So I am confused regarding these results and would like to know if the Panda model generated by the script above is defined using standard DH parameters or modified DH parameters.

Thanks.

$\endgroup$
6
  • 1
    $\begingroup$ This script, shown below, states that the model was made using standard DH conventions. Where do you see that? When I look at the code I'm seeing all of the links are defined with L1 = RevoluteMDH, etc., and I'm assuming the MDH suffix there is for modified DH. $\endgroup$
    – Chuck
    Sep 28 at 15:23
  • $\begingroup$ %MDL_PANDA Create model of Franka-Emika PANDA robot % % MDL_PANDA is a script that creates the workspace variable panda which % describes the kinematic characteristics of a Franka-Emika PANDA manipulator % using standard DH conventions. $\endgroup$
    – user463102
    Sep 29 at 12:15
  • 1
    $\begingroup$ Ah yup see it now. Not sure what to tell you, though - the commands are using the MDH suffixes. $\endgroup$
    – Chuck
    Sep 29 at 12:33
  • $\begingroup$ Is there a big difference in simulation? $\endgroup$
    – user463102
    Sep 29 at 13:25
  • 2
    $\begingroup$ @user463102 what do you mean about differences in simulation? Whether you use DH, MDH, POE, URDF, etc, if the formulation is correct, they are all equivalent ways to describe the robot. $\endgroup$ Sep 29 at 14:58
3
$\begingroup$

The Panda robot uses a different convention than Spong's convention, which is what most students in American institutes learn DH from. DH, however, is just a convention, not a rule, so there are many ways DH can be interpreted. In this case, Peter is probably referring to Spong when referring to "standard" convention. Spong uses this 4x4 matrix multiplication order (from left to right):

rotZ * translateZ * translateX * rotX

Panda uses this order:

rotX * translateX * translateZ * rotZ

Do note, however, that the translation matrices in the middle don't need to follow a particular order. Both of those translations can be done in a single matrix call. I recommend building the required matrices manually as the Spong convention is what Peter's library uses.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.