diff options
-rw-r--r-- | LocomotorPrimitives.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/LocomotorPrimitives.cpp b/LocomotorPrimitives.cpp index 868726c..0a0ebcc 100644 --- a/LocomotorPrimitives.cpp +++ b/LocomotorPrimitives.cpp @@ -8,6 +8,7 @@ */ #include <OpenSim/OpenSim.h> +#include <OpenSim/Common/IO.h> #include "LocomotorPrimitivesManager.h" #include "LocomotorPrimitivesController.h" @@ -56,13 +57,20 @@ static void constructModel(OpenSim::Model &model, OpenSim::Storage actData) } void simulateModel(OpenSim::Model &model, const double initial_time, - const double final_time, double fixed_step_size) + const double final_time, double fixed_step_size, + std::string output_dir) { if (NO_SIM) { logger.log("Skipping simulation as per NO_SIM=%d\n", NO_SIM); return; } + std::string cwd = OpenSim::IO::getCwd(); + if (OpenSim::IO::chDir(output_dir) != 0) { + logger.err("Failed to change to ouput directory %s", output_dir.c_str()); + return; + } + logger.log("Simulating model %s\n", MODEL_NAME.c_str()); logger.log("+ Initializing system\n"); @@ -105,6 +113,7 @@ static void usage() std::cout << "usage: " << MODEL_NAME << " [OPTION...]" << std::endl << std::endl << " -d FILE specify .sto datafile to use for muscle activation data" << std::endl << " -m FILE specify .osim to use as model" << std::endl + << " -o DIR set output directory to DIR (default: current directory)" << std::endl << " -s N set fixed step size for integrator to N (default: dynamic)" << std::endl << " -h show this help and exit" << std::endl; } @@ -113,18 +122,21 @@ int main(int argc, char **argv) { clock_t ts_start = clock(); double fixed_step_size = 0.0; - /* set default values (to work on windows) */ - std::string modelFile = FIXED_IN_SPACE ? "../../locomotor-primitives-fixed.osim" : "../../locomotor-primitives.osim"; - std::string dataFile = "../../data/adults.sto"; + std::string model_file = FIXED_IN_SPACE ? "../../locomotor-primitives-fixed.osim" : "../../locomotor-primitives.osim"; + std::string data_file = "../../data/adults.sto"; + std::string output_dir = "."; for (int i = 1; (i < argc) && (argv[i][0] == '-'); i++) { switch (argv[i][1]) { case 'd': - dataFile = argv[++i]; + data_file = argv[++i]; break; case 'm': - modelFile = argv[++i]; + model_file = argv[++i]; + break; + case 'o': + output_dir = argv[++i]; break; case 's': fixed_step_size = strtod(argv[++i], NULL); @@ -139,7 +151,7 @@ int main(int argc, char **argv) } } - OpenSim::Storage actData(dataFile); + OpenSim::Storage actData(data_file); const double initial_time = actData.getFirstTime(); const double final_time = actData.getLastTime(); @@ -148,17 +160,17 @@ int main(int argc, char **argv) exit(-1); } - logger.log("Starting simulation %s with model file %s, actuation data file %s\n, fixed step size: %f", MODEL_NAME.c_str(), modelFile.c_str(), dataFile.c_str(), fixed_step_size); + logger.log("Starting simulation %s with model file %s, actuation data file %s\n, fixed step size: %f", MODEL_NAME.c_str(), model_file.c_str(), data_file.c_str(), fixed_step_size); try { // Create an OpenSim model and set its name - OpenSim::Model osimModel(modelFile); + OpenSim::Model osimModel(model_file); osimModel.setName(MODEL_NAME); osimModel.setUseVisualizer(false); constructModel(osimModel, actData); - simulateModel(osimModel, initial_time, final_time, fixed_step_size); + simulateModel(osimModel, initial_time, final_time, fixed_step_size, output_dir); } catch (OpenSim::Exception ex) { logger.err("Exception: %s. Press ENTER to quit", ex.getMessage()); std::cin.get(); |