Page MenuHomec4science

walkOneLeg.cpp
No OneTemporary

File Metadata

Created
Fri, Nov 15, 09:56

walkOneLeg.cpp

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <math.h>
#include <ctime>
#include <rsc/logging/LoggerFactory.h>
#include <boost/thread/recursive_mutex.hpp>
#include <boost/thread/condition.hpp>
#include <boost/timer.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/program_options.hpp>
#include <rsb/Informer.h>
#include <rsb/Handler.h>
#include <rsb/Factory.h>
#include <rsb/converter/Repository.h>
#include <rsb/converter/ProtocolBufferConverter.h>
#include <cca/Beat.h>
#include <rci/nodes/SimpleOscillator.h>
#include <rci/dto/JointAngles.h>
#include <rci/dto/converter/JointAnglesConverter.h>
using namespace std;
using namespace boost;
using namespace boost::program_options;
using namespace rsc;
using namespace rsc::logging;
using namespace rsb;
using namespace rsb::converter;
using namespace rst::converter::rci;
using namespace cca;
using namespace cca::rci;
using namespace cca::rci::driver;
int main(int ac, char **av) {
unsigned int cycleTimeMs = 50;
double amplitude = 1.0;
double offset = 0.0;
double frequency = 1;
LoggerFactory::getInstance().reconfigure(Logger::LEVEL_ERROR);
/**
* Handle command line options
*/
options_description desc("Allowed options");
desc.add_options()("help", "Produce help message")("frequency",
value<double> (), "Frequency of oscillation in Hertz")("amplitude",
value<double> (), "Amplitude of the sine")("offset",
value<double> (), "Offset to the output value");
variables_map vm;
store(parse_command_line(ac, av, desc), vm);
notify(vm);
if (vm.count("help")) {
cout << desc << "\n";
return 1;
}
if (vm.count("frequency")) {
frequency = vm["frequency"].as<double> ();
}
cout << "Frequency set to " << frequency << " Hertz.\n";
if (vm.count("amplitude")) {
amplitude = vm["amplitude"].as<double> ();
}
cout << "Amplitude set to " << amplitude << ".\n";
if (vm.count("offset")) {
offset = vm["offset"].as<double> ();
}
cout << "Offset set to " << offset << ".\n";
/**
* Register converters for Joint Angles
*/
boost::shared_ptr<JointAnglesConverter> converter(
new JointAnglesConverter());
stringConverterRepository()->registerConverter(converter);
/**
* Create Oscillator Node
*/
CCANodePtr oscillator = SimpleOscillator<JointAngles>::create(
"Knee Oscillator", frequency, amplitude, offset);
oscillator->configureOutputPort(0,
PortConfiguration::REMOTE("/oncilla/command/nodes/angles/lhknee"));
/**
* Setup and run the main beat
*/
GlobalBeatPtr heartbeat;
heartbeat = GlobalBeat::create(cycleTimeMs);
heartbeat->registerReceiver(oscillator);
std::cout << "Oscillating between " << (offset - amplitude) << " and "
<< (offset + amplitude) << " with " << frequency << " Hertz ..."
<< std::endl;
heartbeat->run();
return EXIT_SUCCESS;
}

Event Timeline