00001 #include <iostream>
00002 #include <gtest/gtest.h>
00003 #include "robodyn_utilities/MultiLoopController.h"
00004 #include <ros/package.h>
00005 #include <stdexcept>
00006
00007 class MultiLoopControllerTest : public ::testing::Test
00008 {
00009 protected:
00010 virtual void SetUp()
00011 {
00012 mlc.setLoopRate(100);
00013 mlc.setTorqueLoopParameters(0, 0, 0, 0, true);
00014 mlc.setPositionLoopParameters(0, 10, 100);
00015 mlc.setVelocityLoopParameters(-10, 10, 10, 10, 5);
00016 mlc.setCurrentLoopParameters(-10, 10, 10);
00017 mlc.setHardwareParameters(0, 0, 1, 20, 0.1, 0, 1, 50000, 0.000002, 0.0000002);
00018 }
00019
00020 virtual void TearDown()
00021 {
00022 }
00023
00024 MultiLoopController mlc;
00025 };
00026
00027 TEST_F(MultiLoopControllerTest, setBadParams)
00028 {
00029 EXPECT_THROW(mlc.setLoopRate(0), std::runtime_error);
00030 EXPECT_THROW(mlc.setPositionLoopParameters(10, 0, 100), std::runtime_error);
00031 EXPECT_THROW(mlc.setTorqueLoopParameters(10, 0, 100, 0), std::runtime_error);
00032 EXPECT_THROW(mlc.setVelocityLoopParameters(10, -10, 10, 10, 5), std::runtime_error);
00033 EXPECT_THROW(mlc.setVelocityLoopParameters(-10, 10, 10, 10, -5), std::runtime_error);
00034 EXPECT_THROW(mlc.setCurrentLoopParameters(10, -10, 10), std::runtime_error);
00035 EXPECT_THROW(mlc.setCurrentLoopParameters(-10, 10, -10), std::runtime_error);
00036 EXPECT_THROW(mlc.setHardwareParameters(0, 0, 0, 1, 1, 0, 1, 200, .01, .01), std::runtime_error);
00037 EXPECT_THROW(mlc.setHardwareParameters(0, 0, 1, 1, 1, 0, 0, 200, .01, .01), std::runtime_error);
00038 EXPECT_THROW(mlc.setHardwareParameters(0, 0, 1, 1, 1, 0, 1, .5, 1, .01), std::runtime_error);
00039 }
00040
00041 TEST_F(MultiLoopControllerTest, badInput)
00042 {
00043 EXPECT_THROW(mlc.currentLoop(1, 1, 0), std::runtime_error);
00044 }
00045
00046 TEST_F(MultiLoopControllerTest, currentLoop)
00047 {
00048 mlc.setCurrentLoopParameters(0, 0, 0);
00049 EXPECT_EQ(0, mlc.currentLoop(0, 0, 48));
00050
00051
00052 mlc.setCurrentLoopParameters(-1000., 1000., 200.);
00053 EXPECT_EQ(200, mlc.currentLoop(1000, 1000, 48));
00054
00055
00056 mlc.reset();
00057 mlc.setCurrentLoopParameters(-1., 1., 200.);
00058 EXPECT_EQ(102, mlc.currentLoop(1000, 0, 50));
00059 }
00060
00061 TEST_F(MultiLoopControllerTest, zeros)
00062 {
00063 mlc.setPositionLoopParameters(0, 100, 0);
00064 mlc.setVelocityLoopParameters(0, 0, 0, 0, 0);
00065 mlc.setCurrentLoopParameters(0, 0, 0);
00066
00067 double vel;
00068 EXPECT_EQ(0, mlc.update(0, 50, 0, 48, vel));
00069
00070 mlc.setPositionLoopParameters(5, 70, 0);
00071 mlc.setVelocityLoopParameters(0, 0, 0, 0, 0);
00072 mlc.setCurrentLoopParameters(-.25, .25, 200);
00073
00074 EXPECT_EQ(0, mlc.update(0, 50, 0, 48, vel));
00075 }
00076
00077 int main(int argc, char** argv)
00078 {
00079 testing::InitGoogleTest(&argc, argv);
00080 return RUN_ALL_TESTS();
00081 }