GrxPathPlanningAlgorithmItem.java
Go to the documentation of this file.
1 /*
2  * GrxPathPlanningAlgorithmItem.java
3  *
4  * Copyright (C) 2007 s-cubed, Inc.
5  * All Rights Reserved
6  *
7  * @author keisuke kobayashi (s-cubed, Inc.)
8  */
9 
10 package com.generalrobotix.ui.item;
11 
12 import java.io.File;
13 import java.lang.reflect.InvocationTargetException;
14 import java.util.Collection;
15 import java.util.List;
16 import java.util.Vector;
17 
18 import org.eclipse.core.runtime.IProgressMonitor;
19 import org.eclipse.jface.dialogs.MessageDialog;
20 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
21 import org.eclipse.jface.operation.IRunnableWithProgress;
22 import org.eclipse.swt.widgets.Display;
23 
24 import jp.go.aist.hrp.simulator.BodyInfo;
25 import jp.go.aist.hrp.simulator.DynamicsSimulator;
28 import jp.go.aist.hrp.simulator.StringSequenceHolder;
29 import jp.go.aist.hrp.simulator.WorldStateHolder;
30 import jp.go.aist.hrp.simulator.DynamicsSimulatorPackage.LinkDataType;
31 import jp.go.aist.hrp.simulator.PathPlannerPackage.PointArrayHolder;
32 import jp.go.aist.hrp.simulator.PathPlannerPackage.RoadmapHolder;
33 import jp.go.aist.hrp.simulator.PathPlannerPackage.RoadmapNode;
34 import jp.go.aist.rtm.RTC.Manager;
35 
43 
44 @SuppressWarnings("serial")
49 
50  public static final String TITLE = "PPAlgorithm";
51  public static final String FILE_EXTENSION = "ppa";
52 
53  // 経路計画コンポーネント
54  private PathPlanner planner_ = null;
55  private static PathConsumerComp ppcomp_ = null;
56  private boolean connectChange_ = false;
57 
59  super(name, manager);
60 
61  setExclusive(true);
62 
63  setProperty("rebuildRoadmap", "true");
64  setProperty("carpetZ", "0.01");
65  setProperty("tolerance", "0.0");
66 
67  _pathConsumer();
68 
69  Runnable run = new Runnable(){
70  public void run() {
71  if(connectChange_){
72  notifyObservers("connected");
73  connectChange_ = false;
74  }
75  Display display = Display.getCurrent();
76  if ( display!=null && !display.isDisposed()){
77  display.timerExec(100, this);
78  }
79  }
80  };
81  Display display = Display.getCurrent();
82  if ( display!=null && !display.isDisposed()){
83  display.timerExec(100, run);
84  }
85  }
86 
87  public boolean create() {
88  return true;
89  }
90 
91  @SuppressWarnings("unchecked")
92  public void delete(){
93  Collection<GrxPathPlanningAlgorithmItem> col=(Collection<GrxPathPlanningAlgorithmItem>) manager_.getItemMap(GrxPathPlanningAlgorithmItem.class).values();
94  if(col.size()==1 && col.contains(this))
95  Manager.instance().deleteComponent(ppcomp_.getInstanceName());
96  ppcomp_ = null;
97  super.delete();
98  }
99 
100  public boolean propertyChanged(String key, String value){
101  if (super.propertyChanged(key, value)){
102 
103  }else{
104  setProperty(key, value);
105  return true;
106  }
107  return false;
108  }
109 
110  public PathPlanner getPlanner(){
111  return _pathConsumer().getImpl();
112  }
113 
115  if (ppcomp_ == null){
116  execPathPlannerConsumer();
117  }
118  return ppcomp_;
119  }
120 
124  private void execPathPlannerConsumer(){
125  String [] args = {"-f", getConfigFilePath()};
126  if( args[1].isEmpty() ){
127  args[0] = "";
128  }
129  GrxDebugUtil.println("[GrxPathPlanner] RTC SERVICE CONSUMER THREAD START"); //$NON-NLS-1$
130 
131  // Initialize manager
132  final Manager manager = Manager.init(args);
133 
134  // Set module initialization procedure
135  // This procedure will be invoked in activateManager() function.
136  ppcomp_ = new PathConsumerComp();
137  manager.setModuleInitProc(ppcomp_);
138 
139  // Activate manager and register to naming service
140  manager.activateManager();
141 
142  // run the manager in blocking mode
143  // runManager(false) is the default.
144  //manager.runManager();
145 
146  // If you want to run the manager in non-blocking mode, do like this
147  manager.runManager(true);
148 
149  ppcomp_.setConnectedCallback(this);
150  }
151 
156  private String getConfigFilePath(){
157  String confPath=""; //$NON-NLS-1$
158  File defualtRtcFile = new File(Activator.getDefault().getTempDir() + File.separator + "rtc.conf");
159  if( defualtRtcFile.isFile() ){
160  confPath = defualtRtcFile.getPath();
161  }
162  GrxDebugUtil.println("[GrxPathPlanner] default Config File path="+confPath); //$NON-NLS-1$
163  // From Property ( if exist )
164  String confPathFromProperty = System.getProperty("com.generalrobotix.grxui.rtcpath"); //$NON-NLS-1$
165  if( confPathFromProperty != null ) {
166  confPath = confPathFromProperty;
167  GrxDebugUtil.println("[GrxPathPlanner] Config File path from Property="+confPath); //$NON-NLS-1$
168  }
169 
170  return confPath;
171  }
172 
176  public void propertyUpdate(){
177  planner_ = _pathConsumer().getImpl();
178  if( planner_ == null ){
179  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.messasge.notConnect")); //$NON-NLS-1$ //$NON-NLS-2$
180  return;
181  }
182 
183  StringSequenceHolder propertyNames_ = new StringSequenceHolder();
184  StringSequenceHolder propertyDefaults_ = new StringSequenceHolder();
185  planner_.getProperties( getProperty("algorithm"), propertyNames_, propertyDefaults_ );
186  String[] props = propertyNames_.value;
187  String[] defaults = propertyDefaults_.value;
188 
189  //ppa.clear(); // プロパティを全て破棄
190  for( int i=0; i<props.length; i++ )
191  setProperty( props[i], defaults[i] );
192  }
193 
198  private boolean initPathPlanner(){
199  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner" ); //$NON-NLS-1$
200  planner_ = _pathConsumer().getImpl();
201  if( planner_ == null ){
202  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.notConnect")); //$NON-NLS-1$ //$NON-NLS-2$
203  return false;
204  }
205 
206  //初期化
207  planner_.initPlanner();
208 
209  //アルゴリズムを指定
210  planner_.setAlgorithmName( getProperty("algorithm") );
211 
212  // 全ての有効なモデルを登録
213  GrxDebugUtil.println("[GrxPathPlanner]@initPathPlanner register character" ); //$NON-NLS-1$
214  List<GrxBaseItem> models = manager_.getSelectedItemList( GrxModelItem.class );
215  for( GrxBaseItem model: models ){
216  GrxModelItem m = (GrxModelItem) model;
217  BodyInfo binfo = m.getBodyInfo();
218  if (binfo != null) {
219  GrxDebugUtil.println("register "+m.getName() ); //$NON-NLS-1$
220  planner_.registerCharacter( m.getName(), binfo );
221  }else{
222  GrxDebugUtil.println("not register "+m.getName() ); //$NON-NLS-1$
223  }
224  }
225 
226  //全てのコリジョンペアを登録する
227  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner register collision pair" ); //$NON-NLS-1$
228  double t = getDbl("tolerance", 0.0);
229  List<GrxBaseItem> collisionPair = manager_.getSelectedItemList(GrxCollisionPairItem.class);
230  for(GrxBaseItem i : collisionPair) {
232  planner_.registerIntersectionCheckPair(
233  item.getStr("objectName1", ""), item.getStr("jointName1", ""), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
234  item.getStr("objectName2", ""), item.getStr("jointName2", ""), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
235  t);
236  }
237 
238  //移動ロボットとして使用するmodelとrobotを指定
239  String modelName = getProperty("model");
240  if( modelName == null || modelName.equals("") ){ //$NON-NLS-1$
241  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.model")); //$NON-NLS-1$ //$NON-NLS-2$
242  return false;
243  }
244  String mobilityName = getProperty("mobility");
245  if( mobilityName == null || mobilityName.equals("") ){ //$NON-NLS-1$
246  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.mobility")); //$NON-NLS-1$ //$NON-NLS-2$
247  return false;
248  }
249  planner_.setMobilityName(mobilityName);
250  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner set robot name" ); //$NON-NLS-1$
251  planner_.setRobotName(modelName);
252 
253 
254  // Algorithm Property
255  String[][]p = getAlgoProperty();
256  if( p == null )
257  return false;
258  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner set property" ); //$NON-NLS-1$
259  planner_.setProperties( p );
260 
261  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner initialize simulation" ); //$NON-NLS-1$
262  planner_.initSimulation();
263 
264  for( GrxBaseItem model: models ){
265  GrxModelItem m = (GrxModelItem) model;
266  BodyInfo binfo = m.getBodyInfo();
267  if (binfo != null) {
268  double v[] = m.getTransformArray(m.rootLink());
269  GrxDebugUtil.println(m.getName()+":"+v[0]+" "+v[1]+" "+v[2]); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
270  planner_.setCharacterPosition(m.getName(), v);
271  }
272  }
273 
274  GrxDebugUtil.println("[GrxPathPlanningView] Planner initialize Succeed"); //$NON-NLS-1$
275  return true;
276  }
277 
278  private String[][] getAlgoProperty(){
279  // 値の入っているパラメータを取得
280  Vector<String[]> tmp = new Vector<String[]>();
281  for( Object s : keySet() ){
282  if( ! getStr( s.toString() ).equals("") ){ //$NON-NLS-1$
283  String []tmp2 = { s.toString(), getStr( s.toString() ) };
284  tmp.add( tmp2 );
285  }
286  }
287  String [][]params = new String[tmp.size()+1][2];
288  for( int i=0; i<tmp.size(); i++ )
289  params[i] = tmp.get(i);
290 
291  // Z position from input
292  Double z = getZPosition();
293  if( z == null ){
294  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.invalidRobot")); //$NON-NLS-1$ //$NON-NLS-2$
295  return null;
296  }
297 
298  params[ params.length-1 ][0] = "z-pos"; //$NON-NLS-1$
299  params[ params.length-1 ][1] = String.valueOf( getZPosition() );
300 
301  return params;
302  }
303 
308  Double getZPosition(){
309  String modelName = getProperty("model");
310  GrxModelItem robot = (GrxModelItem)(manager_.getItem( GrxModelItem.class, modelName ));
311  if (robot == null){
312  return 0d;
313  }else{
314  double [] tr = robot.getDblAry(getRobotBaseLink(robot)+".translation",null); //$NON-NLS-1$
315  return tr[2];
316  }
317  }
318 
319  private String getRobotBaseLink(String name ) {
320  GrxModelItem model = (GrxModelItem) manager_.getItem( GrxModelItem.class, name );
321  return model.rootLink().getName();
322  }
323 
324  private String getRobotBaseLink( GrxModelItem model ) {
325  return model.rootLink().getName();
326  }
327 
332  private boolean _setStartPosition(){
333  // Start POSITION
334  double sx = 0,sy = 0,st = 0;
335  try{
336  sx = getDbl("startX", 0.0);
337  sy = getDbl("startY", 0.0);
338  st = getDbl("startTheta", 0.0)/ 360f * (2*Math.PI);
339  while (st < 0) st += 2*Math.PI;
340  while (st > 2*Math.PI) st -= 2*Math.PI;
341  }catch(Exception e){
342  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.invalidStart")); //$NON-NLS-1$ //$NON-NLS-2$
343  return false;
344  }
345  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner set start" ); //$NON-NLS-1$
346  planner_.setStartPosition( sx,sy,st );
347  return true;
348  }
349 
350 
355  private boolean _setGoalPosition(){
356  // GOAL Position
357  double ex = 0,ey = 0,et = 0;
358  try{
359  ex = getDbl("goalX", 0.0);
360  ey = getDbl("goalY", 0.0);
361  et = getDbl("goalTheta", 0.0) / 360f * (2*Math.PI);
362  while (et < 0) et += 2*Math.PI;
363  while (et > 2*Math.PI) et -= 2*Math.PI;
364  }catch(Exception e){
365  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.InvalidEnd")); //$NON-NLS-1$ //$NON-NLS-2$
366  return false;
367  }
368  GrxDebugUtil.println("[GrxPathPlanningView]@initPathPlanner set end" ); //$NON-NLS-1$
369  planner_.setGoalPosition( ex,ey,et);
370  return true;
371  }
372 
373  public void setStartPoint(){
374  double sx = 0,sy = 0,st = 0;
375 
376  try{
377  sx = getDbl("startX", 0.0);
378  sy = getDbl("startY", 0.0);
379  st = getDbl("startTheta", 0.0)/ 360f * (2*Math.PI);
380  }catch(Exception e){
381  return;
382  }
383 
384  String modelName = getProperty("model");
385  GrxModelItem robot = (GrxModelItem)(manager_.getItem( GrxModelItem.class, modelName ));
386  if( robot == null )
387  return;
388  robot.propertyChanged(getRobotBaseLink(robot)+".translation", ""+sx+" "+sy+" "+getZPosition()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
389  robot.propertyChanged(getRobotBaseLink(robot)+".rotation", "0.0 0.0 1.0 "+st); //$NON-NLS-1$ //$NON-NLS-2$
390  }
391 
392  public void setEndPoint(){
393  double ex = 0,ey = 0,et = 0;
394 
395  try{
396  ex = getDbl("goalX", 0.0);
397  ey = getDbl("goalY", 0.0);
398  et = getDbl("goalTheta", 0.0) / 360f * (2*Math.PI);
399  }catch(Exception e){
400  return;
401  }
402 
403  String modelName = getProperty("model");
404  GrxModelItem robot = (GrxModelItem)(manager_.getItem( GrxModelItem.class, modelName ));
405  robot.propertyChanged(getRobotBaseLink(robot)+".translation", ""+ex+" "+ey+" "+getZPosition() ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
406  robot.propertyChanged(getRobotBaseLink(robot)+".rotation", "0.0 0.0 1.0 "+et); //$NON-NLS-1$ //$NON-NLS-2$
407  }
408 
409  public void startCalc(){
410  planner_ = _pathConsumer().getImpl();
411  if( planner_ == null ){
412  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.notConnect")); //$NON-NLS-1$ //$NON-NLS-2$
413  return;
414  }
415 
416  if ( getProperty("rebuildRoadmap").equals("true")){
417  if (!initPathPlanner()){
418  return;
419  }
420  }
421  _setStartPosition();
422  _setGoalPosition();
423 
424  //ロボットをスタート位置に移動
425  setStartPoint();
426  calc();
427  }
428 
429  private boolean calcSucceed=false;
430  private void calc(){
431  GrxDebugUtil.println("[GrxPathPlanner]@calc" ); //$NON-NLS-1$
432  calcSucceed = false;
433  IRunnableWithProgress runnableProgress = new IRunnableWithProgress() {
434  public void run(IProgressMonitor monitor) throws InterruptedException {
435  Thread calcThread = new Thread( new Runnable(){
436  public void run(){
437  calcSucceed = planner_.calcPath();
438  }
439  });
440  GrxDebugUtil.println("[GrxPathPlanner]@calc Thread Start" ); //$NON-NLS-1$
441  calcThread.start();
442  monitor.beginTask("Planning a path. Please Wait.", IProgressMonitor.UNKNOWN ); //$NON-NLS-1$
443  while( calcThread.isAlive() ){
444  Thread.sleep(200);
445  GrxDebugUtil.print("." ); //$NON-NLS-1$
446  if( monitor.isCanceled() ){
447  GrxDebugUtil.println("[GrxPathPlanner]@calc Cancel" ); //$NON-NLS-1$
448  planner_.stopPlanning();
449  break;
450  }
451  }
452  monitor.done();
453  }
454  };
455  ProgressMonitorDialog progressMonitorDlg = new ProgressMonitorDialog( GrxUIPerspectiveFactory.getCurrentShell() );
456  try {
457  progressMonitorDlg.run(true,true, runnableProgress);
458  } catch (InvocationTargetException e) {
459  e.printStackTrace();
460  return;
461  } catch (InterruptedException e) {
462  e.printStackTrace();
463  return;
464  }
465 
466  if( calcSucceed == false ){
467  MessageDialog.openInformation( GrxUIPerspectiveFactory.getCurrentShell(), MessageBundle.get("GrxPathPlanningView.dialog.message.cancel0"), MessageBundle.get("GrxPathPlanningView.dialog.message.cancel1")); //$NON-NLS-1$ //$NON-NLS-2$
468  }
469 
470  displayPath();
471  }
472 
476  public void optimize() {
477  planner_ = _pathConsumer().getImpl();
478  if( planner_ == null ){
479  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.notConnect")); //$NON-NLS-1$ //$NON-NLS-2$
480  return;
481  }
482 
483  String optimizer = getProperty("optimizer");
484  if( optimizer == null || optimizer.equals("") ){ //$NON-NLS-1$
485  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.mesage.notSelect")); //$NON-NLS-1$ //$NON-NLS-2$
486  return;
487  }
488 
489  planner_.optimize(optimizer);
490  displayPath();
491  }
492 
493  private void displayPath() {
494  PointArrayHolder path = new PointArrayHolder();
495  planner_.getPath( path );
496  GrxDebugUtil.println("[GrxPathPlanningView] Path length="+path.value.length ); //$NON-NLS-1$
497 
498  // TODO:DynamicsSimulatorのdefault simulation time 20sec オーバすると落ちる
499  double dt = 10.0 / path.value.length, nowTime = 0;
500  GrxWorldStateItem currentWorld_ = (GrxWorldStateItem)manager_.getItem( GrxWorldStateItem.class, null );
501  if( currentWorld_ == null ) {
502  GrxDebugUtil.printErr("[GrxPathPlanningView] There is no World."); //$NON-NLS-1$
503  return;
504  }
505  currentWorld_.clearLog();
506  currentWorld_.setDbl("logTimeStep", dt); //$NON-NLS-1$
507  DynamicsSimulator dynSim = getDynamicsSimulator();
508  if( dynSim == null ){
509  GrxDebugUtil.printErr("[GrxPathPlanningView] Faild to get DynamicsSimulator."); //$NON-NLS-1$
510  return;
511  }
512 
513  // register robot
514  String model = getProperty("model");
515  String base = getRobotBaseLink(model);
516  WorldStateHolder stateH_ = new WorldStateHolder();
517  for( double p[] : path.value ) {
518  //System.out.println("[GrxPathPlanner] x="+p[0]+" y="+p[1]+" theta="+p[2] );
519  double newPos[] = new double[12];
520  newPos[0] = p[0]; newPos[1] = p[1]; newPos[2] = getZPosition();
521  newPos[0 + 3] = Math.cos( p[2] ); newPos[1 + 3] = -Math.sin( p[2] ); newPos[2 + 3] = 0.0;
522  newPos[3 + 3] = Math.sin( p[2] ); newPos[4 + 3] = Math.cos( p[2] ); newPos[5 + 3] = 0.0;
523  newPos[6 + 3] = 0.0; newPos[7 + 3] = 0.0; newPos[8 + 3] = 1.0;
524 
525  dynSim.setCharacterLinkData( model, base, LinkDataType.ABS_TRANSFORM, newPos);
526 
527  dynSim.calcWorldForwardKinematics();
528 
529  // 結果を得る
530  dynSim.getWorldState(stateH_);
531  WorldStateEx wsx = new WorldStateEx(stateH_.value);
532 
533  wsx.time = nowTime;
534  currentWorld_.addValue(nowTime, wsx);
535  nowTime += dt;
536  }
537  System.out.println("worldstate.getLogSize() = "+currentWorld_.getLogSize()); //$NON-NLS-1$
538  currentWorld_.setPosition(currentWorld_.getLogSize()-1);
539  }
540 
541  // 経路計画サーバへ渡すためDynamicsSimulatorを取得
542  DynamicsSimulator getDynamicsSimulator(){
543  GrxSimulationItem simItem = manager_.<GrxSimulationItem>getSelectedItem(GrxSimulationItem.class, null);
544  if(simItem==null){
545  simItem = (GrxSimulationItem)manager_.createItem(GrxSimulationItem.class, null);
546  manager_.itemChange(simItem, GrxPluginManager.ADD_ITEM);
547  manager_.setSelectedItem(simItem, true);
548  }
549  if( ! simItem.initDynamicsSimulator() ){
550  MessageDialog.openInformation(GrxUIPerspectiveFactory.getCurrentShell(),"", MessageBundle.get("GrxPathPlanningView.dialog.message.Dynamics")); //$NON-NLS-1$ //$NON-NLS-2$
551  return null;
552  }
553  return simItem.getDynamicsSimulator(false);
554  }
555 
556  public String[] getAlgorithms(){
557  if(planner_==null)
558  return new String[0];
559  StringSequenceHolder names = new StringSequenceHolder();
560  // planning algorithms
561  planner_.getAlgorithmNames( names );
562  return names.value;
563  }
564 
565  public String[] getMobilityNames(){
566  if(planner_==null)
567  return new String[0];
568  StringSequenceHolder names = new StringSequenceHolder();
569  planner_.getMobilityNames( names );
570  return names.value;
571  }
572 
573  public String[] getOptimizerNames(){
574  if(planner_==null)
575  return new String[0];
576  StringSequenceHolder names = new StringSequenceHolder();
577  planner_.getOptimizerNames( names );
578  return names.value;
579  }
580 
581  public RoadmapNode[] getRoadmap(){
582  if(planner_==null)
583  return new RoadmapNode[0];
584  RoadmapHolder h = new RoadmapHolder();
585  planner_.getRoadmap(h);
586  return (RoadmapNode[])h.value;
587  }
588 
589  public double[][] getPath(){
590  if(planner_==null)
591  return new double[0][0];
592  PointArrayHolder path = new PointArrayHolder();
593  planner_.getPath( path );
594  return path.value;
595  }
596 
597  public void connectedCallback(boolean b) {
598  if(b)
599  planner_ = _pathConsumer().getImpl();
600  else
601  planner_ = null;
602  connectChange_ = true;
603  }
604 }
static final String get(String key)
final double[] getDblAry(String key, double[] defaultVal)
get double array associated to key
#define null
our own NULL pointer
Definition: IceTypes.h:57
DynamicsSimulator getDynamicsSimulator(boolean update)
png_infop png_charpp name
Definition: png.h:2382
png_voidp int value
Definition: png.h:2113
png_infop png_charp png_int_32 png_int_32 int int png_charp png_charpp * params
Definition: png.h:2332
item corresponds to a robot model
manager
png_uint_32 i
Definition: png.h:2735
long b
Definition: jpegint.h:371
final void setDbl(String key, double value)
associate double value to key
double[] getTransformArray(GrxLinkItem link)
get transform of link in array form
boolean _setGoalPosition()
set goal position of planning to planner
GrxLinkItem rootLink()
get root link
def run(tree, args)
t
path
final String getStr(String key)
get value associated to keyword
プラグイン管理クラス GrxUIの核になるクラス。プラグインのロード等の、初期化を実行する。 プラグインとそ...
void propertyUpdate()
移動動作設計コンポーネントから現在選択している経路計画アルゴリズムに対するプロパティを取得し、選択し...
org
boolean propertyChanged(String property, String value)
check validity of new value of property and update if valid
void execPathPlannerConsumer()
経路計画コンポーネントのコンシューマを立ち上げ
boolean _setStartPosition()
set start position of planning to planner


openhrp3
Author(s): AIST, General Robotix Inc., Nakamura Lab of Dept. of Mechano Informatics at University of Tokyo
autogenerated on Sat May 8 2021 02:42:38