BowlerKernel
MobileBaseLoader.java
Go to the documentation of this file.
1 package com.neuronrobotics.bowlerstudio.creature;
2 
3 import java.io.File;
4 import java.io.IOException;
5 import java.nio.file.WatchEvent;
6 import java.util.HashMap;
7 import org.apache.commons.io.IOUtils;
8 import org.eclipse.jgit.api.errors.GitAPIException;
9 import org.eclipse.jgit.api.errors.JGitInternalException;
10 
11 import com.neuronrobotics.bowlerstudio.scripting.ScriptingEngine;
12 import com.neuronrobotics.bowlerstudio.util.FileWatchDeviceWrapper;
13 import com.neuronrobotics.bowlerstudio.util.IFileChangeListener;
14 import com.neuronrobotics.sdk.addons.kinematics.DHLink;
15 import com.neuronrobotics.sdk.addons.kinematics.DHParameterKinematics;
16 import com.neuronrobotics.sdk.addons.kinematics.DhInverseSolver;
17 import com.neuronrobotics.sdk.addons.kinematics.IDriveEngine;
18 import com.neuronrobotics.sdk.addons.kinematics.MobileBase;
19 import com.neuronrobotics.sdk.addons.kinematics.parallel.ParallelGroup;
20 
21 public class MobileBaseLoader {
22  private static HashMap<MobileBase, MobileBaseLoader> map = new HashMap<>();
23  private MobileBase base;
25 
27  this.setBase(base);
28 
31  }
32 
33  public void setGitDhEngine(String gitsId, String file, DHParameterKinematics dh) {
34  dh.setGitDhEngine(new String[] { gitsId, file });
35 
37 
38  }
39 
41  File code = null;
42  try {
43  code = ScriptingEngine.fileFromGit(device.getGitDhEngine()[0], device.getGitDhEngine()[1]);
45 
46  File c = code;
48 
49  @Override
50  public void onFileDelete(File fileThatIsDeleted) {
51  // TODO Auto-generated method stub
52 
53  }
54 
55  @Override
56  public void onFileChange(File fileThatChanged, WatchEvent event) {
57 
58  try {
59  System.out.println("D-H Solver changed, updating " + device.getScriptingName());
61  device.setInverseSolver(d);
62  } catch (Exception ex) {
64  }
65  }
66  });
67 
68  device.setInverseSolver(defaultDHSolver);
69  return code;
70  } catch (Exception e1) {
72  }
73  return null;
74 
75  }
76 
77  public void setDefaultWalkingEngine(MobileBase device) {
78  if (defaultDriveEngine == null) {
79  setGitWalkingEngine(device.getGitWalkingEngine()[0], device.getGitWalkingEngine()[1], device);
80  }
81  for (DHParameterKinematics dh : device.getAllDHChains()) {
83  }
84  }
85 
86  public void setGitWalkingEngine(String git, String file, MobileBase device) {
87 
88  device.setGitWalkingEngine(new String[] { git, file });
89  File code = null;
90  try {
91  code = ScriptingEngine.fileFromGit(git, file);
92  } catch (Exception ex) {
93  ex.printStackTrace();
95  try {
96  code = ScriptingEngine.fileFromGit(git, file);
97  } catch (GitAPIException | IOException e) {
99  throw new RuntimeException(e);
100  }
101  }
102 
103  File c = code;
104  FileWatchDeviceWrapper.watch(device, code, new IFileChangeListener() {
105 
106  @Override
107  public void onFileDelete(File fileThatIsDeleted) {
108  // TODO Auto-generated method stub
109 
110  }
111 
112  @Override
113  public void onFileChange(File fileThatChanged, WatchEvent event){
114 
115  try {
116  System.out.println("Walking Gait Script changed, updating " + device.getScriptingName());
119  } catch (Exception ex) {
121  }
122  }
123  });
124 
125  try {
128  } catch (Exception ex) {
130  }
131  }
132 
134  if (map.get(base) == null) {
135 
136  if (map.get(base) == null)
137  map.put(base, new MobileBaseLoader(base));
138 // for (DHParameterKinematics kin : base.getAllDHChains()) {
139 // for (int i = 0; i < kin.getNumberOfLinks(); i++) {
140 // MobileBase m = kin.getDhLink(i).getSlaveMobileBase();
141 // if (m != null) {
142 // m.setGitSelfSource(base.getGitSelfSource());
143 // if (map.get(m) == null)
144 // map.put(m, new MobileBaseLoader(m));
145 // }
146 // }
147 // }
148 
149  }
150  return base;
151  }
152 
153  public static MobileBase fromGit(String id, String file) throws Exception {
154  String xmlContent = ScriptingEngine.codeFromGit(id, file)[0];
155  MobileBase mb = new MobileBase(IOUtils.toInputStream(xmlContent, "UTF-8"));
156 
157  mb.setGitSelfSource(new String[] { id, file });
158  return initializeScripts(mb);
159  }
160 
161  public static MobileBaseLoader get(MobileBase base) {
163 
164  return map.get(base);
165  }
166 
167  public MobileBase getBase() {
168  return base;
169  }
170 
171  public void setBase(MobileBase base) {
172  this.base = base;
173  }
174 
175 }
static MobileBaseCadManager get(MobileBase device, IMobileBaseUI ui)
static HashMap< MobileBase, MobileBaseLoader > map
File setDefaultDhParameterKinematics(DHParameterKinematics device)
static MobileBase fromGit(String id, String file)
void setGitDhEngine(String gitsId, String file, DHParameterKinematics dh)
void setGitWalkingEngine(String git, String file, MobileBase device)
static String[] codeFromGit(String id, String FileName)
static Object inlineFileScriptRun(File f, ArrayList< Object > args)
static File fileFromGit(String remoteURI, String fileInRepo)
static FileChangeWatcher watch(BowlerAbstractDevice device, File code, IFileChangeListener cadWatcher)
void setWalkingDriveEngine(IDriveEngine walkingDriveEngine)
void setGitWalkingEngine(String[] walkingEngine)
ArrayList< DHParameterKinematics > getAllDHChains()
void highlightException(File fileEngineRunByName, Throwable ex)