27 #include "AppMultiTerrain.h"
29 AppMultiTerrain::AppMultiTerrain(
int argc,
char** argv)
33 add_controller =
true;
37 timestep_physics = 1.0f/1000.0f;
38 timestep_graphics = 1.0f/60.0f;
51 handleOptions(argc, argv);
57 world = createWorld();
61 view = createGraphicsView(world);
63 view = createView(world);
78 const int segmentSpan = 3;
79 const int numMuscles = 8;
80 const int numParams = 2;
81 const int segNumber = 0;
82 const double controlTime = .01;
83 const double lowPhase = -1 * M_PI;
84 const double highPhase = M_PI;
85 const double lowAmplitude = 0.0;
86 const double highAmplitude = 300.0;
87 const double kt = 0.0;
88 const double kp = 1000.0;
89 const double kv = 200.0;
90 const bool def =
true;
93 const double cl = 10.0;
94 const double lf = 0.0;
95 const double hf = 30.0;
98 const double ffMin = -0.5;
99 const double ffMax = 10.0;
100 const double afMin = 0.0;
101 const double afMax = 200.0;
102 const double pfMin = -0.5;
103 const double pfMax = 6.28;
133 const int segmentSpan = 3;
134 const int numMuscles = 8;
135 const int numParams = 2;
136 const int segNumber = 6;
137 const double controlTime = .001;
138 const double lowPhase = -1 * M_PI;
139 const double highPhase = M_PI;
140 const double lowAmplitude = -30.0;
141 const double highAmplitude = 30.0;
142 const double kt = 0.0;
143 const double kp = 1000.0;
144 const double kv = 210.0;
145 const bool def =
true;
148 const double cl = 10.0;
149 const double lf = -30.0;
150 const double hf = 30.0;
175 myModel->
attach(myControl);
183 tgModel* blockField = getBlocks();
191 void AppMultiTerrain::handleOptions(
int argc,
char **argv)
194 po::options_description desc(
"Allowed options");
196 (
"help,h",
"produce help message")
197 (
"graphics,G", po::value<bool>(&use_graphics),
"Test using graphical view")
198 (
"controller,c", po::value<bool>(&add_controller),
"Attach the controller to the model.")
199 (
"blocks,b", po::value<bool>(&add_blocks)->implicit_value(
false),
"Add a block field as obstacles.")
200 (
"hills,H", po::value<bool>(&add_hills)->implicit_value(
false),
"Use hilly terrain.")
201 (
"all_terrain,A", po::value<bool>(&all_terrain)->implicit_value(
false),
"Alternate through terrain types. Only works with graphics off")
202 (
"phys_time,p", po::value<double>(),
"Physics timestep value (Hz). Default=1000")
203 (
"graph_time,g", po::value<double>(),
"Graphics timestep value a.k.a. render rate (Hz). Default = 60")
204 (
"episodes,e", po::value<int>(&nEpisodes),
"Number of episodes to run. Default=1")
205 (
"steps,s", po::value<int>(&nSteps),
"Number of steps per episode to run. Default=60K (60 seconds)")
206 (
"segments,S", po::value<int>(&nSegments),
"Number of segments in the tensegrity spine. Default=6")
207 (
"start_x,x", po::value<double>(&startX),
"X Coordinate of starting position for robot. Default = 0")
208 (
"start_y,y", po::value<double>(&startY),
"Y Coordinate of starting position for robot. Default = 20")
209 (
"start_z,z", po::value<double>(&startZ),
"Z Coordinate of starting position for robot. Default = 0")
210 (
"angle,a", po::value<double>(&startAngle),
"Angle of starting rotation for robot. Degrees. Default = 0")
211 (
"learning_controller,l", po::value<std::string>(&suffix),
"Which learned controller to write to or use. Default = default")
214 po::variables_map vm;
215 po::store(po::parse_command_line(argc, argv, desc), vm);
217 if (vm.count(
"help"))
219 std::cout << desc <<
"\n";
225 if (vm.count(
"phys_time"))
227 timestep_physics = 1/vm[
"phys_time"].as<
double>();
228 std::cout <<
"Physics timestep set to: " << timestep_physics <<
" seconds.\n";
231 if (vm.count(
"graph_time"))
233 timestep_graphics = 1/vm[
"graph_time"].as<
double>();
234 std::cout <<
"Graphics timestep set to: " << timestep_graphics <<
" seconds.\n";
240 btVector3 eulerAngles = btVector3(0.0, 0.0, 0.0);
241 btScalar friction = 0.5;
242 btScalar restitution = 0.0;
244 btVector3 size = btVector3(0.0, 0.1, 0.0);
245 btVector3 origin = btVector3(0.0, 0.0, 0.0);
249 double triangleSize = 4.0;
250 double waveHeight = 2.0;
253 size, origin, nx, ny, margin, triangleSize,
255 return hillGroundConfig;
260 const double yaw = 0.0;
261 const double pitch = 0.0;
262 const double roll = 0.0;
268 tgModel* AppMultiTerrain::getBlocks()
275 tgWorld* AppMultiTerrain::createWorld()
294 return new tgWorld(config, ground);
304 return new tgSimView(*world, timestep_physics, timestep_graphics);
322 simulate(simulation);
333 void AppMultiTerrain::simulate(
tgSimulation *simulation)
335 for (
int i=0; i<nEpisodes; i++) {
336 fprintf(stderr,
"Episode %d\n", i);
339 simulation->
run(nSteps);
341 catch (std::runtime_error e)
347 if (all_terrain && i != nEpisodes - 1)
355 simulation->
reset(ground);
358 else if (i % nTypes == 1)
362 simulation->
reset(ground);
365 else if (i % nTypes == 2)
368 tgModel* obstacle = getBlocks();
375 tgModel* obstacle = getBlocks();
391 int main(
int argc,
char** argv)
393 std::cout <<
"AppMultiTerrain" << std::endl;
void addObstacle(tgModel *pObstacle)
void attach(tgObserver< T > *pObserver)
int main(int argc, char **argv)