Calculations Method
I am from Poznan University of Technology in Poland.
We normally work with robots. In Mathematica we solved a general robotic problems. In our package we have implemented kinematical and dynamical algorithms.
Package is called Robo. We use it to teach and research.
To solve robotic problem we use Newton-Euler method for forward dynamics and Step-Descent for inverse kinematics. For other problem we don't use special methods.
All algorithms use a spatial algebra proposed by Rodriguez.
For description a robot we use a list structures proposed by Authors.
We put all robot parameters in lists with special rules.
Links ={Link[1], ..., Link[N]} and
Motors ={Motor[1], ..., Motor[N]}.
Each link (and motor) is characterised by several kinematics and dynamics parameters and, in addition, by other links, which are connected to the links. Generally speaking it is necessary to distinguish between the links and motors from conceptual point of view. Also engineering practice decides to treat these items separately.
Therefore i-th link is characterised by the following structure.
Link[i]= {no., kind, joints connected to it, prev joint, mass, inertia matrix, l vector, p vector, a, motors on the link}.
First item "no." denotes the number of the link. Next item "kind" specifies type of the joint which is associated with the i-th link. This falls in two categories: rotational and translational. Next item in the list is called "joint connected to it". It is a list of links, which are connected with the i-th link via joints. By making use of this list we are able to define the tree structure robots. In case of the last link in the linkage this field has value {0}. Here 0 denotes an external environment. Next field "prev. joint" locates the link itself in the topological structure because it defines which is the predecessor to the i-th link. "Mass" denotes the mass of the i-th link. "Inertia matrix" is inertia tensor of the i-th link. Next field "l vector" is a vector of the length of the link, which is a list of the three coordinates of this distance. This vector is used to build appropriate skew-symmetric transition matrix. Next vector, "p vector", is a distance to the centre of mass of the i-th link. Next field describes an offset angle or offset distance both of them result from the modified Denavit-Hartenberg notation. This parameter comes from the geometrical description of the robot. Finally, last field, "motors on the link", is a list of motors which are mounted on the i-th link. Recall that on i-th link an arbitrary number of motors can be attached.
A similar kind of list can be proposed for the i-th motor, namely.
Motor[i] ={no., link number, driven joint, mass, inertia matrix, l vector, p vector, a, G},
The items, which describe the i-th motor, are similar to those defining the i-th link. Here "link number" denotes link number to which the motor is mounted. Recall that, in general, motor's number is not the same as the link's number. Next item "driven joint" denotes a link number driven by the motor. Finally, "G", denotes the gear ratio between driven link and motor which does the job.
As an example we tested algorithms using robot Puma 560 parameters. It is an industrial robot with six degrees of freedom. Below an example show to define links and motors of this robot:
(* Link definitions in lists *)
Link1={1,Rotationalz,{0},2,ml[1],LinkInertia1,
{Lxl1,Lyl1,Lzl1},{pxl1,pyl1,pzl1},alfal1,{}};
Link2={2,Rotationalz,{1},3,ml[2],LinkInertia2,
{Lxl2,Lyl2,Lzl2},{pxl2,pyl2,pzl2},alfal2,{1,2}};
Link3={3,Rotationalz,{2},BaseLink,ml[3],LinkInertia3,
{Lxl3,Lyl3,Lzl3},{pxl3,pyl3,pzl3},alfal3,{}};
LinkBase={4,Rotationalz,{3},BaseLink,0,IdentityMatrix[3],
{0,0,0},{0,0,0},0,{}};
(* Motor definitions in lists *)
Motor1={1,Rotationalz,2,1,mm[1],MotorInertia1,
{Lxm1,Lym1,Lzm1},{pxm1,pym1,pzm1},alfam1,gear1};
Motor2={2,Rotationalz,2,2,mm[2],MotorInertia2,
{Lxm2,Lym2,Lzm2},{pxm2,pym2,pzm2},alfam2,gear2};
Motor3={3,Rotationalz,BaseMotor,3,mm[3],MotorInertia3,
{Lxm3,Lym3,Lzm3},{pxm3,pym3,pzm3},alfam3,gear3};
(* Set of definition for all manipulator in two lists *)
Links={Link1,Link2,Link3,LinkBase};
Motors={Motor1,Motor2,Motor3};
Here we have a big problem. Because equations are stored dynamically in memory during calculations we don't know how much memory will be needed. So we have a problem with space. It is possible to solve the corresponding problem for four degrees of freedoms. A robot has six. If we try more than four we get out of memory from kernel.
`Out of memory. Exiting.`
| |