BowlerKernel
GenericKinematicsModelNR.java
Go to the documentation of this file.
1 package com.neuronrobotics.sdk.addons.kinematics;
2 
3 import java.io.InputStream;
4 
5 import Jama.Matrix;
6 
7 import com.neuronrobotics.sdk.addons.kinematics.math.RotationNR;
8 import com.neuronrobotics.sdk.addons.kinematics.math.TransformNR;
9 import com.neuronrobotics.sdk.addons.kinematics.xml.XmlFactory;
10 import com.neuronrobotics.sdk.common.BowlerDatagram;
11 import com.neuronrobotics.sdk.namespace.bcs.pid.IExtendedPIDControl;
12 import com.neuronrobotics.sdk.pid.GenericPIDDevice;
13 import com.neuronrobotics.sdk.pid.VirtualGenericPIDDevice;
14 // TODO: Auto-generated Javadoc
15 //import com.neuronrobotics.sdk.pid.IPIDControl;
16 
21 
23  double deg2rad=Math.PI/180;
24 
31  public GenericKinematicsModelNR(InputStream configFile,GenericPIDDevice device ){
32  super(configFile,new LinkFactory( device));
33  }
34 // public GenericKinematicsModelNR(IExtendedPIDControl dev){
35 // super(XmlFactory.getDefaultConfigurationStream("GenericKinematics.xml"),new LinkFactory( dev));
36 // }
37 
42  super(XmlFactory.getDefaultConfigurationStream("GenericKinematics.xml"),new LinkFactory( new VirtualGenericPIDDevice(1000000,"GenericKinematicsDevice")));
43  }
44 
45  /* (non-Javadoc)
46  * @see com.neuronrobotics.sdk.addons.kinematics.AbstractKinematicsNR#forwardKinematics(double[])
47  */
48  @Override
49  public TransformNR forwardKinematics(double[] jointSpaceVector) {
50  double x = jointSpaceVector[0];
51  double y = jointSpaceVector[1];
52  double z = jointSpaceVector[2];
53 
54  Matrix rotX= new Matrix(RotationNR.getRotationX(jointSpaceVector[3]).getRotationMatrix());
55  Matrix rotY= new Matrix(RotationNR.getRotationY(jointSpaceVector[4]).getRotationMatrix());
56  Matrix rotZ= new Matrix(RotationNR.getRotationZ(jointSpaceVector[5]).getRotationMatrix());
57 
58  Matrix rotAll = rotX.times(rotY).times(rotZ);
59 
60  TransformNR back =new TransformNR( x,
61  y,
62  z,
63  new RotationNR(rotAll)
64  );
65  return back;
66  }
67 
68  /* (non-Javadoc)
69  * @see com.neuronrobotics.sdk.addons.kinematics.AbstractKinematicsNR#inverseKinematics(com.neuronrobotics.sdk.addons.kinematics.math.TransformNR)
70  */
71  @Override
72  public double[] inverseKinematics(TransformNR cartesianSpaceVector)throws Exception {
73  double [] inv = new double[getNumberOfLinks()];
74  //Dump from cartesian to joint space, used as an example
75  inv[0]= cartesianSpaceVector.getX();
76  inv[1]= cartesianSpaceVector.getY();
77  inv[2]= cartesianSpaceVector.getZ();
78 
79  Matrix rotationMatrixArray = new Matrix(cartesianSpaceVector.getRotation().getRotationMatrix());
80 
81  //X rotation
82  inv[3]=Math.atan2(-rotationMatrixArray.get(1, 2), rotationMatrixArray.get(2, 2))*180/Math.PI;
83  //Y rotation
84  inv[4]=Math.asin(rotationMatrixArray.get(0, 2))*180/Math.PI;
85  //Z rotation
86  inv[5]=Math.atan2(-rotationMatrixArray.get(0, 1), rotationMatrixArray.get(0, 0))*180/Math.PI;
87  return inv;
88  }
89 
90  /* (non-Javadoc)
91  * @see com.neuronrobotics.sdk.addons.kinematics.AbstractKinematicsNR#disconnectDevice()
92  */
93  @Override
94  public void disconnectDevice() {
95  // TODO Auto-generated method stub
96 
97  }
98 
99  /* (non-Javadoc)
100  * @see com.neuronrobotics.sdk.addons.kinematics.AbstractKinematicsNR#connectDevice()
101  */
102  @Override
103  public boolean connectDevice() {
104  // TODO Auto-generated method stub
105  return false;
106  }
107 
108 }
GenericKinematicsModelNR(InputStream configFile, GenericPIDDevice device)
static RotationNR getRotationY(double rotationAngleDegrees)
static RotationNR getRotationZ(double rotationAngleDegrees)
static RotationNR getRotationX(double rotationAngleDegrees)
static InputStream getDefaultConfigurationStream(String file)
Definition: XmlFactory.java:27