diff --git a/examples/SimpleSineMovement.cpp b/examples/SimpleSineMovement.cpp index 3b00e4d..04a46d5 100644 --- a/examples/SimpleSineMovement.cpp +++ b/examples/SimpleSineMovement.cpp @@ -1,80 +1,148 @@ #include <rsc/misc/langutils.h> #include <rci/dto/JointAngles.h> #include "liboncilla/Oncilla.h" - using namespace std; using namespace boost; using namespace rci; using namespace rci::oncilla; -double hip_position(double phase, double amplitude, double offset) { - return amplitude * std::cos(phase) + offset; +double hip_position(double phase , double amplitude , double offset){ + return amplitude * std::cos(phase) + offset; } -double knee_position(double phase, double phase_lag, double amplitude, - double offset) { - return amplitude * ((phase + phase_lag) > M_PI ? 1.0 : 0.0) + offset; +double knee_position(double phase , double phase_lag , double amplitude , + double offset){ + return amplitude * ((phase + phase_lag) > M_PI ? 1.0 : 0.0) + offset; } -int main() { +int main(){ - // Instantiate the actual robot object - Oncilla oncilla; + // Instantiate the actual robot object + Oncilla oncilla; // Get the synchronizer, so that we can control the actual simulation // stepping from within our code ::rci::oncilla::Synchronizer::Ptr synchronizer = oncilla.getSynchronizer(); // Get all the joints we are interested in - L1 and L2 L1::Ptr left_fore_hip = oncilla.getL1(LEFT_FORE); L2::Ptr left_fore_knee = oncilla.getL2(LEFT_FORE); L1::Ptr right_fore_hip = oncilla.getL1(RIGHT_FORE); L2::Ptr right_fore_knee = oncilla.getL2(RIGHT_FORE); L1::Ptr left_hind_hip = oncilla.getL1(LEFT_HIND); L2::Ptr left_hind_knee = oncilla.getL2(LEFT_HIND); L1::Ptr right_hind_hip = oncilla.getL1(RIGHT_HIND); L2::Ptr right_hind_knee = oncilla.getL2(RIGHT_HIND); - //sets some parameter for the sinewave - double hip_amplitude(30), - fore_hip_offset(0), - hind_hip_offset(0), - fore_knee_amplitude(1), - fore_knee_offset(0), - hind_knee_amplitude(1), - hind_knee_offset(0), - fore_hip_knee_phase_lag(0), - hind_hip_knee_phase_lag(0), - frequency(1); - double time_s, phase, antiphase; - - time_s = 0; - while (true) { - // The simulated time is our phase - time_s += synchronizer->lastProcessTimeStep(); - phase = std::fmod(time_s * frequency * 2 * M_PI, 2 * M_PI); - - antiphase = std::fmod(phase + M_PI, 2 * M_PI); - - left_fore_hip->setJointPosition(JointAngles::fromDeg(hip_position(phase, hip_amplitude, fore_hip_offset))); - left_fore_knee->setJointPosition(JointAngles::fromRad(knee_position(phase, fore_hip_knee_phase_lag,fore_knee_amplitude, fore_knee_offset))); - - right_fore_hip->setJointPosition(JointAngles::fromDeg(hip_position(antiphase, hip_amplitude,fore_hip_offset))); - right_fore_knee->setJointPosition(JointAngles::fromRad(knee_position(antiphase, fore_hip_knee_phase_lag,fore_knee_amplitude, fore_knee_offset))); - - left_hind_hip->setJointPosition(JointAngles::fromDeg(hip_position(antiphase, hip_amplitude,hind_hip_offset))); - left_hind_knee->setJointPosition(JointAngles::fromRad(knee_position(antiphase, hind_hip_knee_phase_lag,hind_knee_amplitude, hind_knee_offset))); - - right_hind_hip->setJointPosition(JointAngles::fromDeg(hip_position(phase, hip_amplitude, hind_hip_offset))); - right_hind_knee->setJointPosition(JointAngles::fromRad(knee_position(phase, hind_hip_knee_phase_lag,hind_knee_amplitude, hind_knee_offset))); - - // Perform a (simulation) processing step - synchronizer->process(); - } - - return EXIT_SUCCESS; + //sets some parameter for the sinewave + double hip_amplitude(10) , fore_hip_offset(0) , hind_hip_offset(0) , + fore_knee_amplitude(.1) , fore_knee_offset(.2) , + hind_knee_amplitude(.1) , hind_knee_offset(.2) , + fore_hip_knee_phase_lag(0) , hind_hip_knee_phase_lag(0) , frequency( + 1.6); + double time_s , phase , antiphase; + + printf("*** Note:\n"); + printf("*** This is a dummy walking example to show the basic usage of the\n"); + printf("*** simulator with API Level 0! Adapt the example to your own needs.\n"); + + time_s = 0; + while (time_s < 10) { + // The simulated time is our phase + time_s += synchronizer->lastProcessTimeStep(); + phase = std::fmod(time_s * frequency * 2 * M_PI, 2 * M_PI); + + antiphase = std::fmod(phase + M_PI, 2 * M_PI); + + left_fore_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(phase, hip_amplitude, fore_hip_offset))); + left_fore_knee->setJointPosition( + JointAngles::fromRad( + knee_position(phase, fore_hip_knee_phase_lag, + fore_knee_amplitude, fore_knee_offset))); + + right_fore_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(antiphase, hip_amplitude, + fore_hip_offset))); + right_fore_knee->setJointPosition( + JointAngles::fromRad( + knee_position(antiphase, fore_hip_knee_phase_lag, + fore_knee_amplitude, fore_knee_offset))); + + left_hind_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(antiphase, hip_amplitude, + hind_hip_offset))); + left_hind_knee->setJointPosition( + JointAngles::fromRad( + knee_position(antiphase, hind_hip_knee_phase_lag, + hind_knee_amplitude, hind_knee_offset))); + + right_hind_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(phase, hip_amplitude, hind_hip_offset))); + right_hind_knee->setJointPosition( + JointAngles::fromRad( + knee_position(phase, hind_hip_knee_phase_lag, + hind_knee_amplitude, hind_knee_offset))); + + // Perform a (simulation) processing step + synchronizer->process(); + } + + printf("*** RESET!\n"); + oncilla.getSupervisor()->getWorld()->reset(); + + while (true) { + // The simulated time is our phase + time_s += synchronizer->lastProcessTimeStep(); + phase = std::fmod(time_s * frequency * 2 * M_PI, 2 * M_PI); + + antiphase = std::fmod(phase + M_PI, 2 * M_PI); + + left_fore_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(phase, hip_amplitude, fore_hip_offset))); + left_fore_knee->setJointPosition( + JointAngles::fromRad( + knee_position(phase, fore_hip_knee_phase_lag, + fore_knee_amplitude, fore_knee_offset))); + + right_fore_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(antiphase, hip_amplitude, + fore_hip_offset))); + right_fore_knee->setJointPosition( + JointAngles::fromRad( + knee_position(antiphase, fore_hip_knee_phase_lag, + fore_knee_amplitude, fore_knee_offset))); + + left_hind_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(antiphase, hip_amplitude, + hind_hip_offset))); + left_hind_knee->setJointPosition( + JointAngles::fromRad( + knee_position(antiphase, hind_hip_knee_phase_lag, + hind_knee_amplitude, hind_knee_offset))); + + right_hind_hip->setJointPosition( + JointAngles::fromDeg( + hip_position(phase, hip_amplitude, hind_hip_offset))); + right_hind_knee->setJointPosition( + JointAngles::fromRad( + knee_position(phase, hind_hip_knee_phase_lag, + hind_knee_amplitude, hind_knee_offset))); + + // Perform a (simulation) processing step + synchronizer->process(); + } + + return EXIT_SUCCESS; }