1 package com.neuronrobotics.sdk.addons.kinematics;
4 import java.io.FileInputStream;
5 import java.io.FileNotFoundException;
6 import java.io.InputStream;
7 import java.util.ArrayList;
9 import org.w3c.dom.Element;
12 import javafx.scene.transform.Affine;
14 import com.neuronrobotics.sdk.addons.kinematics.math.TransformNR;
15 import com.neuronrobotics.sdk.addons.kinematics.xml.XmlFactory;
16 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
17 import com.neuronrobotics.sdk.common.IDeviceConnectionEventListener;
36 boolean disconnecting =
false;
50 public void onConnect(BowlerAbstractDevice source) {
54 private ArrayList<LinkConfiguration>
configs;
121 this(bad, linkStream);
157 this(bad,
new FileInputStream(configFile));
164 this(
null,(InputStream)
null);
184 this(
null, linkStream);
196 this(
null,
new FileInputStream(configFile));
218 if (jointSpaceVector ==
null ||
getDhChain() ==
null)
231 double [] xProd =
new double [3];
233 xProd[0]=a[1]*b[2]-a[2]*b[1];
234 xProd[1]=a[2]*b[0]-a[0]*b[2];
235 xProd[2]=a[0]*b[1]-a[1]*b[0];
247 double [][] data =
new double[6][size];
249 for(
int i=0;i<size;i++){
250 if(i>index)
continue;
252 for(
int j=i;j<size && j<=index;j++) {
255 value=Math.toRadians(jointSpaceVector[j]);
257 value=jointSpaceVector[j];
261 rotationComponent = rotationComponent.times(step);
263 double [] zVect =
new double [3];
264 double [] zVectEnd =
new double [3];
266 zVectEnd[0]=rotation[2][2];
267 zVectEnd[1]=rotation[2][1];
268 zVectEnd[2]=rotation[2][0];
269 if(i==0 && index ==0 ){
276 zVect[0]=zVectEnd[0];
277 zVect[1]=zVectEnd[1];
278 zVect[2]=zVectEnd[2];
295 double []rVect =
new double [3];
297 for(
int j=0;j<i ;j++) {
300 value=Math.toRadians(jointSpaceVector[j]);
302 value=jointSpaceVector[j];
306 rComponentmx = rComponentmx.times(step);
310 for(
int j=0;j<size && j<=index;j++) {
313 value=Math.toRadians(jointSpaceVector[j]);
315 value=jointSpaceVector[j];
319 tipOffsetmx = tipOffsetmx.times(step);
321 double []tipOffset =
new double [3];
322 double []rComponent =
new double [3];
324 tipOffset[0]=tipOffsetnr.
getX();
325 tipOffset[1]=tipOffsetnr.
getY();
326 tipOffset[2]=tipOffsetnr.
getZ();
328 rComponent[0]=rComponentnr.
getX();
329 rComponent[1]=rComponentnr.
getY();
330 rComponent[2]=rComponentnr.
getZ();
332 rVect[x]=(tipOffset[x]-rComponent[x]);
340 return new Matrix(data);
419 for (
int i = 0; i < dhLinks.size(); i++) {
446 String xml =
"<root>\n";
465 xml +=
"\t<cadEngine>\n";
468 xml +=
"\t</cadEngine>\n";
470 xml +=
"\t<kinematics>\n";
473 xml +=
"\t</kinematics>\n";
476 for (
int i = 0; i < dhLinks.size(); i++) {
479 xml += dhLinks.get(i).getXml();
480 xml +=
"\n</link>\n";
482 xml +=
"\n<ZframeToRAS\n>";
484 xml +=
"\n</ZframeToRAS>\n";
486 xml +=
"\n<baseToZframe>\n";
488 xml +=
"\n</baseToZframe>\n";
586 throw new RuntimeException(
"FAIL the link listner must be set to dhLink.setListener(new Affine());");
631 }
catch (Exception ex) {
649 for(
int i=0;i<joints.length;i++) {
664 super.setGlobalToFiducialTransform(frameToBase);
669 }
catch(Exception e) {
707 vectortail[linkIndex] = linkAngleToClaculate;
771 public void setDH_D(
int index,
double value) {
782 public void setDH_R(
int index,
double value) {
808 super.setRobotToFiducialTransform(newTrans);
AbstractLink getAbstractLink(int index)
TransformNR getFiducialToGlobalTransform()
ArrayList< LinkConfiguration > getLinkConfigurations()
LinkConfiguration getLinkConfiguration(int linkIndex)
void addJointSpaceListener(IJointSpaceUpdateListenerNR l)
void removePoseUpdateListener(ITaskSpaceUpdateListenerNR l)
double[] getCurrentJointSpaceVector()
TransformNR getRobotToFiducialTransform()
String[] getGitDhEngine()
DHChain getDhParametersChain()
void removeJointSpaceUpdateListener(IJointSpaceUpdateListenerNR l)
String[] getGitCadEngine()
TransformNR forwardOffset(TransformNR t)
void addPoseUpdateListener(ITaskSpaceUpdateListenerNR l)
void setUseLimits(boolean useLimits)
void setGlobalPositionListener(Object Object)
ArrayList< TransformNR > getCachedChain()
void setChain(ArrayList< TransformNR > chain)
TransformNR forwardKinematics(double[] jointSpaceVector)
double[] inverseKinematics(TransformNR target, double[] jointSpaceVector)
DhInverseSolver getInverseSolver()
ArrayList< TransformNR > getChain(double[] jointSpaceVector)
void setInverseSolver(DhInverseSolver is)
ArrayList< DHLink > getLinks()
void setFactory(LinkFactory factory)
void addLink(DHLink link)
void setLinkType(DhLinkType type)
void fireOnLinkGlobalPositionChange(TransformNR newPose)
MobileBase getSlaveMobileBase()
Matrix getJacobian(DHChain chain, double[] jointSpaceVector, int index)
void setRobotToFiducialTransform(TransformNR newTrans)
DHParameterKinematics(BowlerAbstractDevice bad, InputStream linkStream)
DHParameterKinematics(BowlerAbstractDevice bad, Element linkStream)
DHParameterKinematics(BowlerAbstractDevice bad)
void setChain(DHChain chain)
DHParameterKinematics(BowlerAbstractDevice bad, InputStream linkStream, InputStream depricated)
void onJointSpaceTargetUpdate(AbstractKinematicsNR source, double[] joints)
void onTargetTaskSpaceUpdate(AbstractKinematicsNR source, TransformNR pose)
void onJointSpaceUpdate(final AbstractKinematicsNR source, final double[] joints)
void setDH_Alpha(int index, double value)
void setDH_Theta(int index, double value)
Object getCurrentTargetObject()
double getDH_D(int index)
void setDH_D(int index, double value)
void throwExceptionOnJointLimit(boolean b)
double getDH_Theta(int index)
TransformNR forwardKinematics(double[] jointSpaceVector)
DHParameterKinematics(BowlerAbstractDevice bad, String file)
void setInverseSolver(DhInverseSolver inverseSolver)
void addNewLink(LinkConfiguration newLink, DHLink dhLink)
Matrix getJacobian(double[] jointSpaceVector, int index)
Object getLinkObjectManipulator(int index)
ArrayList< Object > linksListeners
double getDH_R(int index)
ArrayList< TransformNR > getChainTransformations()
double[] crossProduct(double[] a, double[] b)
void setDH_R(int index, double value)
void removeLink(int index)
double getDH_Alpha(int index)
void onTaskSpaceUpdate(AbstractKinematicsNR source, TransformNR pose)
DHParameterKinematics(String file)
DhInverseSolver getInverseSolver()
MobileBase getSlaveMobileBase(int index)
DHParameterKinematics(File configFile)
ArrayList< LinkConfiguration > configs
void onJointSpaceLimit(AbstractKinematicsNR source, int axis, JointLimit event)
TransformNR linkCoM(double linkAngleToClaculate, int linkIndex)
TransformNR linkCoM(int linkIndex)
DHParameterKinematics(Element linkStream)
TransformNR getLinkTip(int linkIndex)
Matrix getJacobian(int index)
double[] inverseKinematics(TransformNR taskSpaceTransform)
void setGlobalToFiducialTransform(TransformNR frameToBase)
void setDhChain(DHChain chain)
ArrayList< TransformNR > updateCadLocations()
Object getListener(int i)
DHParameterKinematics(BowlerAbstractDevice bad, File configFile)
ArrayList< LinkConfiguration > getLinkConfigurations()
AbstractLink getLink(String name)
DyIO getDyio(LinkConfiguration c)
void addLinkListener(ILinkListener l)
void removeLinkListener(AbstractKinematicsNR l)
double[][] getRotationMatrix()
static InputStream getDefaultConfigurationStream(String file)
String getScriptingName()
void addConnectionEventListener(final IDeviceConnectionEventListener l)