1 package com.neuronrobotics.sdk.addons.kinematics.parallel;
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.function.Consumer;
7 import com.neuronrobotics.sdk.addons.kinematics.AbstractLink;
8 import com.neuronrobotics.sdk.addons.kinematics.DHParameterKinematics;
9 import com.neuronrobotics.sdk.addons.kinematics.LinkConfiguration;
10 import com.neuronrobotics.sdk.addons.kinematics.LinkFactory;
11 import com.neuronrobotics.sdk.addons.kinematics.math.TransformNR;
16 private ArrayList<DHParameterKinematics>
constituantLimbs =
new ArrayList<DHParameterKinematics>();
17 private HashMap<DHParameterKinematics, TransformNR>
tipOffset =
new HashMap<DHParameterKinematics, TransformNR>();
21 private String[]
toolEngine =
new String[] {
"https://gist.github.com/33f2c10ab3adc5bd91f0a58ea7f24d14.git",
22 "parallelTool.groovy" };
29 if(refName.contentEquals(
name)) {
41 throw new RuntimeException();
57 throw new RuntimeException(
"FK lim must be possible, one limb must not have a reference to another");
72 if (d.getScriptingName().contentEquals(
name)) {
77 throw new RuntimeException(
"Limb named: " +
name +
" does not exist");
155 double[] jointSpaceVect = ldh.inverseKinematics(ldh.inverseOffset(taskSpaceTransform));
162 if (referencedLimb ==
null)
163 throw new RuntimeException(
"Referenced limb missing, IK for " + ldh.getScriptingName()
164 +
" Failed looking for " + refLimbName);
165 double[] jointSpaceVectReferenced =
compute(referencedLimb, IKvalues, taskSpaceTransform);
169 double[] jointSpaceVect = ldh.inverseKinematics(ldh.inverseOffset(transformTOLinksTip));
179 if (lm.getScriptingName().toLowerCase().contentEquals(refLimbName.toLowerCase())) {
186 return referencedLimb;
208 int numBerOfLinks = 0;
210 numBerOfLinks += l.getNumberOfLinks();
212 double[] linkValues =
new double[numBerOfLinks];
214 HashMap<String, double[]> IKvalues =
new HashMap<>();
218 double[] jointSpaceVect =
compute(l, IKvalues, taskSpaceTransform);
220 for (
int i = 0; i < jointSpaceVect.length; i++) {
221 linkValues[limbOffset + i] = jointSpaceVect[i];
223 limbOffset += jointSpaceVect.length;
230 System.out.println(t);
234 int numBerOfLinks = 0;
236 numBerOfLinks += l.getNumberOfLinks();
238 double[] linkValues =
new double[numBerOfLinks];
240 HashMap<String, double[]> IKvalues =
new HashMap<>();
244 double[] jointSpaceVect =
compute(l, IKvalues, taskSpaceTransform);
246 for (
int i = 0; i < jointSpaceVect.length; i++) {
247 linkValues[limbOffset + i] = jointSpaceVect[i];
248 AbstractLink link = l.getFactory().getLink(l.getLinkConfiguration(i));
250 Double double1 =
new Double(val);
251 if (double1.isNaN() || double1.isInfinite()) {
252 printer.accept(
"Fault on link " + i +
" attempted to set " + double1);
255 printer.accept(
"Fault on link " + i +
" attempted to set " + jointSpaceVect[i]);
258 printer.accept(
"Fault on link " + i +
" attempted to set " + jointSpaceVect[i]);
261 limbOffset += jointSpaceVect.length;
270 return l.getCurrentTaskSpaceTransform();
273 throw new RuntimeException(
"FK limb is missing!");
static boolean checkTaskSpaceTransform(AbstractKinematicsNR dev, TransformNR taskSpaceTransform, double seconds)
TransformNR currentPoseTarget
void setFactory(LinkFactory factory)
double toLinkUnits(double euValue)
ArrayList< TransformNR > getChain(double[] jointSpaceVector)
ArrayList< LinkConfiguration > getLinkConfigurations()
AbstractLink getLink(String name)
void addLink(AbstractLink link)
TransformNR forwardKinematics(double[] jointSpaceVector)
HashMap< DHParameterKinematics, TransformNR > getTipOffset()
HashMap< DHParameterKinematics, TransformNR > tipOffset
String getTipOffsetRelativeName(DHParameterKinematics l)
String[] getGitCadToolEngine()
double[] getCurrentJointSpaceVector(DHParameterKinematics k)
DHParameterKinematics findReferencedLimb(String refLimbName)
int getTipOffsetRelativeIndex(DHParameterKinematics l)
HashMap< DHParameterKinematics, Integer > tipOffsetRelativeIndex
void removeLimb(DHParameterKinematics limb)
void printError(TransformNR taskSpaceTransform, Consumer< String > printer)
void clearReferencedLimb(DHParameterKinematics limb)
void setTipOffset(DHParameterKinematics l, TransformNR n)
ParallelGroup(String name)
TransformNR getTipOffset(DHParameterKinematics l)
void setCurrentPoseTarget(TransformNR currentPoseTarget)
double[] inverseKinematics(TransformNR taskSpaceTransform)
void setTipOffset(HashMap< DHParameterKinematics, TransformNR > tipOffset)
TransformNR getTipOffsetFromThisLinkInLimb(DHParameterKinematics control, int index)
void setGitCadToolEngine(String[] cadEngine)
DHParameterKinematics getFKLimb()
String getNameOfParallelGroup()
void setupReferencedLimb(DHParameterKinematics limb, TransformNR tip, String name, int index)
ArrayList< DHParameterKinematics > constituantLimbs
void addLimb(DHParameterKinematics limb, TransformNR tip, String name, int index)
HashMap< DHParameterKinematics, String > tipOffsetRelativeToName
double[] compute(DHParameterKinematics ldh, HashMap< String, double[]> IKvalues, TransformNR taskSpaceTransform)
void setupReferencedLimbStartup(DHParameterKinematics limb, TransformNR tip, String name, int index)
void printError(TransformNR taskSpaceTransform)
ArrayList< DHParameterKinematics > getConstituantLimbs()
String getScriptingName()