BowlerKernel
PidNamespaceImp.java
Go to the documentation of this file.
1 package com.neuronrobotics.sdk.namespace.bcs.pid;
2 
3 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
4 import com.neuronrobotics.sdk.common.BowlerDatagram;
5 import com.neuronrobotics.sdk.common.BowlerMethod;
6 import com.neuronrobotics.sdk.common.ByteList;
7 import com.neuronrobotics.sdk.common.DeviceConnectionException;
8 import com.neuronrobotics.sdk.pid.PDVelocityConfiguration;
9 import com.neuronrobotics.sdk.pid.PIDCommandException;
10 import com.neuronrobotics.sdk.pid.PIDConfiguration;
11 import com.neuronrobotics.sdk.pid.PIDEvent;
12 import com.neuronrobotics.sdk.pid.PIDLimitEvent;
13 
14 // TODO: Auto-generated Javadoc
19 
21  private final String ns = "bcs.pid.*";
22 
23 
24 
31  super(device);
32  }
33 
42  private Object[] send(BowlerMethod method, String rpcString, Object[] arguments){
43  return getDevice().send(ns,method,rpcString,arguments,2);
44  }
45 
46  /* (non-Javadoc)
47  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#ResetPIDChannel(int, int)
48  */
49  @Override
50  public boolean ResetPIDChannel(int group, float valueToSetCurrentTo) throws DeviceConnectionException {
51  Object[] args = new Object[]{group,valueToSetCurrentTo};
53  "rpid",
54  args);
55  return true;
56  }
57 
58  /* (non-Javadoc)
59  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#ConfigurePIDController(com.neuronrobotics.sdk.pid.PIDConfiguration)
60  */
61  @Override
62  public boolean ConfigurePIDController(PIDConfiguration config) {
64  "cpid",
65  config.getArgs());
66  return true;
67  }
68 
69  /* (non-Javadoc)
70  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#getPIDConfiguration(int)
71  */
72  @Override
74 
76  "cpid",
77  new Object[]{group}));
78  }
79 
80  /* (non-Javadoc)
81  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#ConfigurePDVelovityController(com.neuronrobotics.sdk.pid.PDVelocityConfiguration)
82  */
83  @Override
86  "cpdv",
87  config.getArgs());
88  return true;
89  }
90 
91  /* (non-Javadoc)
92  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#getPDVelocityConfiguration(int)
93  */
94  @Override
96  Object [] args = send(BowlerMethod.GET,
97  "cpdv",
98  new Object[]{group});
99  return new PDVelocityConfiguration(args);
100  }
101 
103  private Integer channelCount =null;
104 
105  /* (non-Javadoc)
106  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#getPIDChannelCount()
107  */
108  @Override
109  public int getPIDChannelCount() {
110  if(channelCount == null){
111  Object [] args = send(BowlerMethod.GET,
112  "gpdc",
113  new Object[]{});
114  channelCount = (Integer)args[0];
115  }
116  return channelCount.intValue();
117  }
118 
119  /* (non-Javadoc)
120  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#SetPIDSetPoint(int, int, double)
121  */
122  @Override
123  public boolean SetPIDSetPoint(int group, float setpoint, double seconds) {
125  "_pid",
126  new Object[]{ group,
127  setpoint,
128  (int)(seconds*1000)});
129  return true;
130  }
131 
132  /* (non-Javadoc)
133  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#SetAllPIDSetPoint(int[], double)
134  */
135  @Override
136  public boolean SetAllPIDSetPoint(float[] setpoints, double seconds) {
138  "apid",
139  new Object[]{ new Integer((int) (seconds*1000)),
140  setpoints});
141  return true;
142  }
143 
144  /* (non-Javadoc)
145  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#GetPIDPosition(int)
146  */
147  @Override
148  public float GetPIDPosition(int group) {
149  Object [] args = send(BowlerMethod.GET,
150  "_pid",
151  new Object[]{group});
152  if((Integer)args[0] != group){
153  throw new RuntimeException("Channel ID did not match");
154  }
155  return (Integer)args[1];
156  }
157 
158  /* (non-Javadoc)
159  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#GetAllPIDPosition()
160  */
161  @Override
162  public float[] GetAllPIDPosition() {
163  Object [] args = send(BowlerMethod.GET,
164  "apid",
165  new Object[]{});
166  float[] data=new float[((Integer[])args[0]).length];
167  for(int i=0;i<data.length;i++){
168  data[i] = ((Integer[])args[0])[i];
169  }
170 
171  return data;
172  }
173 
174  /* (non-Javadoc)
175  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#SetPDVelocity(int, int, double)
176  */
177  @Override
178  public boolean SetPDVelocity(int group, int unitsPerSecond, double seconds)throws PIDCommandException {
180  "_vpd",
181  new Object[]{ group,
182  unitsPerSecond,
183  (int)(seconds*1000)});
184  return true;
185  }
186 
187  /* (non-Javadoc)
188  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IPidControlNamespace#killAllPidGroups()
189  */
190  @Override
191  public boolean killAllPidGroups() {
193  "kpid",
194  new Object[]{});
195  return true;
196  }
197 
198  /* (non-Javadoc)
199  * @see com.neuronrobotics.sdk.namespace.bcs.pid.AbstractPidNamespaceImp#onAsyncResponse(com.neuronrobotics.sdk.common.BowlerDatagram)
200  */
201  @Override
202  public void onAsyncResponse(BowlerDatagram data) {
203  //Log.debug("\nPID ASYNC<<"+data);
204  if(data.getRPC().contains("_pid")){
205 
206  PIDEvent e =new PIDEvent(data);
207 
208  firePIDEvent(e);
209  }
210  if(data.getRPC().contains("apid")){
211  int [] pos = new int[getNumberOfChannels()];
212  for(int i=0;i<getNumberOfChannels();i++) {
213  pos[i] = ByteList.convertToInt( data.getData().getBytes(i*4, 4),true);
214  PIDEvent e =new PIDEvent(i,pos[i],System.currentTimeMillis(),0);
215  firePIDEvent(e);
216  }
217  }
218  if(data.getRPC().contains("pidl")){
219  firePIDLimitEvent(new PIDLimitEvent(data));
220  }
221  }
222 
223  /* (non-Javadoc)
224  * @see com.neuronrobotics.sdk.namespace.bcs.pid.IExtendedPIDControl#runOutputHysteresisCalibration(int)
225  */
226  @Override
227  public boolean runOutputHysteresisCalibration(int group) {
229  "hist",
230  new Object[]{group});
231  return true;
232  }
233 
234 }
BowlerDatagram send(BowlerAbstractCommand command)
static final int convertToInt(byte[] b)
Definition: ByteList.java:911
boolean ResetPIDChannel(int group, float valueToSetCurrentTo)
boolean ConfigurePDVelovityController(PDVelocityConfiguration config)
PDVelocityConfiguration getPDVelocityConfiguration(int group)
boolean SetPIDSetPoint(int group, float setpoint, double seconds)
Object[] send(BowlerMethod method, String rpcString, Object[] arguments)
boolean SetPDVelocity(int group, int unitsPerSecond, double seconds)
boolean SetAllPIDSetPoint(float[] setpoints, double seconds)