36 #include <boost/algorithm/string/predicate.hpp>  
   42 #undef PAUSE_BEFORE_EXIT 
   62 static const auto DEFAULT_ROUTINE = OptimizationRoutine::RefTracker;
 
   64 static const auto RECOGNIZED_ROUTINES = {
 
   65     OptimizationRoutine::RefTracker, OptimizationRoutine::ParamViaRansac,
 
   66     OptimizationRoutine::ParamViaRefTracker};
 
   70     case OptimizationRoutine::RefTracker:
 
   73     case OptimizationRoutine::ParamViaRansac:
 
   74         return "ParamViaRansac";
 
   76     case OptimizationRoutine::ParamViaRefTracker:
 
   77         return "ParamViaRefTracker";
 
   79     case OptimizationRoutine::Unrecognized:
 
   81         return "ERROR - UNRECOGNIZED";
 
   87     for (
auto &routine : RECOGNIZED_ROUTINES) {
 
   88         if (boost::iequals(routineToString(routine), routineName)) {
 
   92     return OptimizationRoutine::Unrecognized;
 
   96     template <
typename T> 
void operator()(T 
const &) {
 
  104 int usage(
const char *argv0) {
 
  105     std::cerr << 
"Usage: " << argv0 << 
" [<routine> [<paramset> [--cost]]]\n" 
  108         << 
"where <routine> is one of the following (case insensitive): \n";
 
  109     for (
auto &routine : RECOGNIZED_ROUTINES) {
 
  110         std::cerr << 
"   " << routineToString(routine) << 
"\n";
 
  113         << 
"\nThe various ParamViaX routines take an optional additional " 
  114            "argument specifying the parameter set that they optimize, one " 
  118     std::cerr << 
"as well as an additional optional switch, --cost, if you'd " 
  119                  "like to just run the current parameters through and compute " 
  120                  "the cost, rather than optimize.\n\n";
 
  122         << 
"\nIf no routine is explicitly specified, the default routine is " 
  123         << routineToString(DEFAULT_ROUTINE) << 
"\n";
 
  124     std::cerr << 
"Too many arguments, or an unrecognized routine parameter " 
  125                  "(including anything vaguely 'help-ish') will trigger this " 
  134                             std::string ¶mSetName)
 
  135         : outFunc_(outFunc), paramSetName_(paramSetName) {}
 
  136     template <
typename T> 
void operator()(T 
const &, 
const char *arg) {
 
  140             outFunc_ = &osvr::vbtracker::runOptimizer<RefSource, T>;
 
  146     osvr::vbtracker::ParamOptimizerFunc &outFunc_;
 
  147     std::string ¶mSetName_;
 
  150 template <
typename RefSource>
 
  151 int parseParamSetForParamOptimizer(osvr::vbtracker::ParamOptimizerFunc &func,
 
  152                                    bool &costOnly, 
int argc, 
char *argv[]) {
 
  154         std::cerr << 
"Too many command line arguments!" << std::endl;
 
  155         return usage(argv[0]);
 
  158         if (boost::iequals(argv[3], 
"--cost")) {
 
  159             std::cout << 
"Will run for just cost-only." << std::endl;
 
  162             std::cerr << 
"Too many command line arguments - didn't recognize " 
  165             return usage(argv[0]);
 
  170         std::cout << 
"Will process default parameter set " 
  172                          ps::DefaultParamSet>::get()
 
  174         func = &osvr::vbtracker::runOptimizer<RefSource, ps::DefaultParamSet>;
 
  179     osvr::vbtracker::ParamOptimizerFunc result;
 
  180     std::string paramSetName;
 
  182     osvr::typepack::for_each_type<ps::ParamSets>(functor, argv[2]);
 
  184         std::cout << 
"Will process parameter set " << paramSetName
 
  185                   << 
" as specified on the command line.\n";
 
  190     std::cerr << 
"Did not recognize " << argv[2]
 
  191               << 
" as one of the known parameter sets to optimize!" 
  194     return usage(argv[0]);
 
  197 int main(
int argc, 
char *argv[]) {
 
  199     static const auto DATAFILE = 
"augmented-blobs.csv";
 
  201     auto withUsage = [&] { 
return usage(argv[0]); };
 
  202     auto tooManyArguments = [&] {
 
  203         std::cerr << 
"Too many command line arguments!" << std::endl;
 
  208         routine = stringToRoutine(argv[1]);
 
  209         if (OptimizationRoutine::Unrecognized == routine) {
 
  210             std::cerr << 
"Didn't recognize '" << argv[1]
 
  211                       << 
"' as an optimization routine.\n" 
  217         std::cout << 
"Will execute optimization routine " 
  218                   << routineToString(routine)
 
  219                   << 
" as specified on the command line." << std::endl;
 
  221         std::cout << 
"No optimization routine specified on the command line, " 
  223                   << routineToString(routine) << 
" by default." << std::endl;
 
  226     bool costOnly = 
false;
 
  227     osvr::vbtracker::ParamOptimizerFunc paramOptFunc;
 
  231         case OptimizationRoutine::ParamViaRansac:
 
  233                 parseParamSetForParamOptimizer<osvr::vbtracker::RansacOneEuro>(
 
  234                     paramOptFunc, costOnly, argc, argv);
 
  242         case OptimizationRoutine::ParamViaRefTracker:
 
  244             ret = parseParamSetForParamOptimizer<
 
  254         case OptimizationRoutine::RefTracker:
 
  259                 std::cerr << 
"Too many command line arguments!" << std::endl;
 
  265     std::cout << 
"Loading and parsing data from " << DATAFILE << 
"    ";
 
  266     auto data = osvr::vbtracker::loadData(DATAFILE);
 
  269     const auto camParams =
 
  275     params.
debug = 
false;
 
  279     params.
imu.path = 
"";
 
  283     std::cout << 
"Starting optimization routine " << routineToString(routine)
 
  286     case OptimizationRoutine::RefTracker:
 
  290         osvr::vbtracker::computeRefTrackerTransform(
 
  294     case OptimizationRoutine::ParamViaRansac:
 
  296         paramOptFunc(data, costOnly,
 
  300     case OptimizationRoutine::ParamViaRefTracker:
 
  302         paramOptFunc(data, costOnly,
 
  307         assert(
false && 
"Should not happen - only recognized routines should " 
  308                         "make it this far!");
 
  311 #ifdef PAUSE_BEFORE_EXIT 
  312     std::cout << 
"Press enter to exit." << std::endl;
 
bool silent
For optimization usage. 
bool performingOptimization
int main(int argc, char *argv[])
typename detail::split_list_< List...>::head head
Get the first element of a list. 
A wrapper for a template parameter pack of types. 
IMUInputParams imu
IMU input-related parameters. 
General configuration parameters. 
bool debug
Whether to show the debug windows and debug messages. 
Input from main to the optimization routine (wrapper) 
Trait for param set name. 
Define to add a "press enter to exit" thing at the end. 
CameraParameters createUndistortedVariant() const 
Copy-constructs, with zero distortion parameters.