1 package com.neuronrobotics.sdk.addons.kinematics;
3 import java.util.ArrayList;
4 import java.util.HashMap;
6 import com.neuronrobotics.sdk.addons.kinematics.gcodebridge.GcodeDevice;
7 import com.neuronrobotics.sdk.addons.kinematics.gcodebridge.GcodePrismatic;
8 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
9 import com.neuronrobotics.sdk.common.DeviceManager;
10 import com.neuronrobotics.sdk.common.IFlushable;
11 import com.neuronrobotics.sdk.common.Log;
12 import com.neuronrobotics.sdk.common.TickToc;
13 import com.neuronrobotics.sdk.dyio.DyIO;
14 import com.neuronrobotics.sdk.dyio.peripherals.AnalogInputChannel;
15 import com.neuronrobotics.sdk.dyio.peripherals.CounterOutputChannel;
16 import com.neuronrobotics.sdk.dyio.peripherals.ServoChannel;
17 import com.neuronrobotics.sdk.namespace.bcs.pid.IExtendedPIDControl;
18 import com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace;
19 import com.neuronrobotics.sdk.pid.GenericPIDDevice;
20 import com.neuronrobotics.sdk.pid.ILinkFactoryProvider;
21 import com.neuronrobotics.sdk.pid.VirtualGenericPIDDevice;
28 private static HashMap<String, INewLinkProvider>
userLinkProviders =
new HashMap<String, INewLinkProvider>();
31 private ArrayList<AbstractLink>
links =
new ArrayList<AbstractLink>();
105 if (l.getLinkConfiguration().getName().equalsIgnoreCase(name))
108 String data =
"No link of name '" + name +
"' exists";
112 throw new RuntimeException(data);
123 if (l.getLinkConfiguration() == c)
137 links.remove(oldLink);
158 switch (c.getTypeEnum()) {
160 case ANALOG_PRISMATIC:
189 case GCODE_HEATER_TOOL:
194 case GCODE_STEPPER_PRISMATIC:
195 case GCODE_STEPPER_ROTORY:
196 case GCODE_STEPPER_TOOL:
214 }
catch (Throwable t) {
247 double[] up =
new double[
links.size()];
248 for (
int i = 0; i < up.length; i++) {
249 up[i] =
links.get(i).getMinEngineeringUnits();
260 double[] up =
new double[
links.size()];
261 for (
int i = 0; i < up.length; i++) {
262 up[i] =
links.get(i).getMaxEngineeringUnits();
274 lin.addLinkListener(l);
283 public void flush(
final double seconds) {
284 HashMap<String, Boolean> flushed =
new HashMap<String, Boolean>();
286 String name = c.getDeviceScriptingName();
291 if (specificDevice ==
null) {
294 if (flushed.get(name) ==
null) {
295 flushed.put(name,
true);
298 flushDevice.
flush(seconds);
348 if (jointSpaceVect.length !=
links.size())
349 throw new IndexOutOfBoundsException(
"Expected " +
links.size() +
" links, got " + jointSpaceVect.length);
354 lin.setTargetEngineeringUnits(jointSpaceVect[i]);
355 }
catch (Exception ee) {
356 throw new RuntimeException(
"Joint " + i +
" failed\n" + ee.getMessage());
398 lin.removeLinkListener(l);
421 return virtualGenericPIDDevice;
void setLinkConfiguration(LinkConfiguration conf)
void setUseLimits(boolean useLimits)
ArrayList< ILinkListener > getLinks()
void removeAllLinkListener()
void addLinkListener(ILinkListener l)
LinkConfiguration getLinkConfiguration()
void setPidConfiguration(IPidControlNamespace pid)
String getDeviceScriptingName()
int getTotlaNumberOfLinks()
VirtualGenericPIDDevice getVirtual(String myVirtualDevName)
ArrayList< LinkConfiguration > getLinkConfigurations()
LinkFactory(BowlerAbstractDevice bad)
AbstractLink getLink(String name)
DyIO getDyio(LinkConfiguration c)
AbstractLink getLinkLocal(LinkConfiguration c)
double[] getLowerLimits()
static HashMap< String, INewLinkProvider > userLinkProviders
ArrayList< AbstractLink > links
GcodeDevice getGCODE(LinkConfiguration c)
void addLink(AbstractLink link)
LinkFactory(ILinkFactoryProvider connection, IExtendedPIDControl d)
void flush(final double seconds)
void refreshHardwareLayer(LinkConfiguration c)
double[] getUpperLimits()
static void addLinkProvider(String typeTag, INewLinkProvider provider)
IPidControlNamespace getPid(LinkConfiguration c)
void setCachedTargets(double[] jointSpaceVect)
static boolean linkProviderExists(String typeTag)
ArrayList< LinkConfiguration > linkConfigurations
void addLinkListener(ILinkListener l)
void removeLinkListener(AbstractKinematicsNR l)
AbstractLink getLink(LinkConfiguration c)
AbstractLink getHeater(LinkConfiguration axis)
AbstractLink getLink(LinkConfiguration axis)
String getScriptingName()
static void addConnection(final Object newDevice, String name)
static Object getSpecificDevice(String name, IDeviceProvider provider)
static void addType(String type)
default void addIHardwareSyncPulseReciver(IHardwareSyncPulseReciver r)
AbstractLink generate(LinkConfiguration conf)
void flush(double seconds)
LinkConfiguration requestLinkConfiguration(int index)