6 #include <gtest/gtest.h>
8 namespace etrobocon2018_test {
9 TEST(CoordinateTest, updateTest)
12 coordinate.
update(10.0f, 5.0f);
13 ASSERT_FLOAT_EQ(5.0f / 2.0f, coordinate.
arg);
14 ASSERT_FLOAT_EQ(10.0f, coordinate.
radius);
15 ASSERT_FLOAT_EQ(10.0f * std::cos(5.0f / 2.0f), coordinate.
x);
16 ASSERT_FLOAT_EQ(10.0f * std::sin(5.0f / 2.0f), coordinate.
y);
19 TEST(CoordinateTest, updateTest2)
22 coordinate.
update(10.0f, 5.0f);
23 float radius = 10.0f + 5.0f;
24 float arg = 5.0f / 2.0f + 10.0f / 2.0f;
25 float x = 10.0f * std::cos(5.0f / 2.0f);
26 float y = 10.0f * std::sin(5.0f / 2.0f);
27 ASSERT_FLOAT_EQ(x, coordinate.
x);
28 ASSERT_FLOAT_EQ(y, coordinate.
y);
30 coordinate.
update(5.0f, 10.0f);
31 ASSERT_FLOAT_EQ(arg, coordinate.
arg);
32 ASSERT_FLOAT_EQ(radius, coordinate.
radius);
33 ASSERT_FLOAT_EQ(5.0f * std::cos(arg) + x, coordinate.
x);
34 ASSERT_FLOAT_EQ(5.0f * std::sin(arg) + y, coordinate.
y);
37 TEST(CoordinateTest, resetTest)
40 coordinate.
update(10.0, 5.0);
42 ASSERT_FLOAT_EQ(0.0, coordinate.
arg);
43 ASSERT_FLOAT_EQ(0.0, coordinate.
radius);
44 ASSERT_FLOAT_EQ(0.0, coordinate.
x);
45 ASSERT_FLOAT_EQ(0.0, coordinate.
y);
48 TEST(WheelOdometryTest, velocityTest)
51 float transform = 3.14f * 99.0f / 2.0f / 180.0f / 0.04f;
55 ASSERT_FLOAT_EQ(transform * angle, odometry.
velocity(5, 5));
58 TEST(WheelOdometryTest, velocityTestHuge)
61 float transform = 3.14f * 99.0f / 2.0f / 180.0f / 0.04f;
65 ASSERT_FLOAT_EQ(transform * angle, odometry.
velocity(140, 140));
69 TEST(WheelOdometryTest, angularVelocityTest)
72 float transform = 99.0f / 2.0f / 147.5f / 0.04f;
79 TEST(WheelOdometryTest, resetTest)
82 odometry.
update(10.0f, 5.0f);
84 ASSERT_FLOAT_EQ(0.0f, coordinate.
radius);
85 ASSERT_FLOAT_EQ(0.0f, coordinate.
arg);
86 ASSERT_FLOAT_EQ(0.0f, coordinate.
x);
87 ASSERT_FLOAT_EQ(0.0f, coordinate.
y);
90 TEST(WheelOdometryTest, updateTest)
93 float transform = 3.14f * 99.0f / 2.0f / 180.0f;
95 float expected_distance = transform * angle;
97 transform = 99.0f / 2.0f / 147.5f;
99 float expected_angle = transform * angle;
103 ASSERT_FLOAT_EQ(expected_distance, coordinate.
radius);
104 ASSERT_FLOAT_EQ(expected_angle / 2.0f, coordinate.
arg);
105 ASSERT_FLOAT_EQ(expected_distance * std::cos(expected_angle / 2.0f), coordinate.
x);
106 ASSERT_FLOAT_EQ(expected_distance * std::sin(expected_angle / 2.0f), coordinate.
y);
109 TEST(WheelOdometryTest, updateCoordinateTest)
116 float transform = 3.14f * 99.0f / 2.0f / 180.0f;
118 float expected_distance = transform * angle;
128 TEST(WheelOdometryTest, getRotationAngleTest)
131 float transform = 99.0f / 147.5f;
132 float angle = (5.0f + 5.0f) / 2.0f;
136 float angle2 = (2.0f + 2.0f) / 2.0f;
141 TEST(WheelOdometryTest, getCoordinateTest)
146 ASSERT_FLOAT_EQ(0.0f, coordinate.
radius);
147 ASSERT_FLOAT_EQ(0.0f, coordinate.
arg);
148 ASSERT_FLOAT_EQ(0.0f, coordinate.
x);
149 ASSERT_FLOAT_EQ(0.0f, coordinate.
y);
152 TEST(WheelOdometryTest, getPointXTest)
157 ASSERT_FLOAT_EQ(coordinate.
x, odometry.
getPointX());
160 TEST(WheelOdometryTest, getPointYTest)
165 ASSERT_FLOAT_EQ(coordinate.
y, odometry.
getPointY());
float relativeAngleMean(std::int32_t current_left_motor, std::int32_t current_right_motor)
左右モータの相対角度の平均値を計算する
float getPointX()
走行体の位置x座標を返す
float angularVelocity(std::int32_t left_motor, std::int32_t right_motor)
走行体の旋回角速度を求める
const Coordinate & getCoordinate()
走行体の位置情報を返す
float getRotationAngle(std::int32_t left_motor, std::int32_t right_motor)
走行体の回転角度を返す
float angularDifference(std::int32_t left_motor, std::int32_t right_motor)
左右モータ角度の差を計算する(右手系/反時計回りが正)
TEST(AIAnswerArrayTest, construct)
void reset()
走行体の位置情報を初期化する
const Coordinate & update(std::int32_t left_motor, std::int32_t right_motor)
走行体の位置情報を更新する
float velocity(std::int32_t left_motor, std::int32_t right_motor)
走行体の旋回速度を求める
const Coordinate & reset()
走行体の位置情報を初期化する
void update(float distance, float angle)
走行体の位置情報を更新する
float getPointY()
走行体の位置y座標を返す
オドメトリ(Wheel odometry)手法を用いた速度/角度/自己位置推定