NTRT Simulator  Version: Master
 All Classes Namespaces Files Functions Variables Typedefs Friends Pages
AppJSONSpine.cpp
1 /*
2  * Copyright © 2012, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The NASA Tensegrity Robotics Toolkit (NTRT) v1 platform is licensed
7  * under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * http://www.apache.org/licenses/LICENSE-2.0.
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
15  * either express or implied. See the License for the specific language
16  * governing permissions and limitations under the License.
17 */
18 
27 // This application
29 // This library
31 #include "core/tgModel.h"
32 #include "core/tgSimView.h"
33 #include "core/tgSimViewGraphics.h"
34 #include "core/tgSimulation.h"
35 #include "core/tgWorld.h"
36 // The C++ Standard Library
37 #include <iostream>
38 
46 int main(int argc, char** argv)
47 {
48  std::cout << "AppNestedStructureTest" << std::endl;
49 
50  // First create the world
51  const tgWorld::Config config(981); // gravity, cm/sec^2
52  tgWorld world(config);
53 
54  // Second create the view
55  const double stepSize = 1.0/1000.0; // Seconds
56  const double renderRate = 1.0/60.0; // Seconds
57  tgSimView view(world, stepSize, renderRate);
58 
59  // Third create the simulation
60  tgSimulation simulation(view);
61 
62  // Fourth create the models with their controllers and add the models to the
63  // simulation
64  const int segments = 12;
66  new FlemonsSpineModelLearningCL(segments);
67 
68  /* Required for setting up learning file input/output. */
69  const std::string suffix((argc > 1) ? argv[1] : "default");
70 
71  const int segmentSpan = 3;
72  const int numMuscles = 4;
73  const int numParams = 2;
74  const int segNumber = 0;
75 
76  const double controlTime = 0.1;
77  const double lowPhase = -1 * M_PI;
78  const double highPhase = M_PI;
79  const double lowAmplitude = 0.0;
80  const double highAmplitude = 30.0;
81 
82  const double tension = 0.0;
83  const double kPosition = 400.0;
84  const double kVelocity = 40.0;
85 
86  JSONCPGControl::Config control_config(segmentSpan, numMuscles, numMuscles, numParams, segNumber, controlTime,
87  lowAmplitude, highAmplitude, lowPhase, highPhase,
88  tension, kPosition, kVelocity);
89  JSONCPGControl* const myControl =
90  new JSONCPGControl(control_config, suffix, "learningSpines/OctahedralComplex/");
91  myModel->attach(myControl);
92 
93  simulation.addModel(myModel);
94 
95  int i = 0;
96  while (i < 20000)
97  {
98  simulation.run(60000);
99  simulation.reset();
100  std::cout << "Dist:" << myControl->getScore() << std::endl;
101  i++;
102  }
103 
105 
109  #if (0)
110  delete myControl;
111  #endif
112  //Teardown is handled by delete, so that should be automatic
113  return 0;
114 }
int main(int argc, char **argv)
Implementing the cross-linked octahedral complex spine inspired by Tom Flemons.
An adaptation of JSONCPGControl that utilizes JSON for parameters.
Contains the definition of class tgSimulation.
Contains the definition of class tgModel.
Contains the definition of class tgSimViewGraphics.
Contains the definition of class tgWorld $Id$.
Contains the definition of class tgSimView.
void attach(tgObserver< T > *pObserver)
Definition: tgSubject.h:91