From 5eddb69aa0f2f65fbe3e1d2cb02bd79fa0fafd8a Mon Sep 17 00:00:00 2001 From: thomasclark Date: Wed, 23 Jul 2014 09:36:27 -0400 Subject: [PATCH] Updated the C++ TiltPanCameraTest The gyro sensitivity is fixed, the Accelerometer interface is now used, and some tolerances are adjusted. Change-Id: Iac1f3c4fbae3be923bd97692684ff72cd2f623f9 --- .../src/TiltPanCameraTest.cpp | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/wpilibc/wpilibC++IntegrationTests/src/TiltPanCameraTest.cpp b/wpilibc/wpilibC++IntegrationTests/src/TiltPanCameraTest.cpp index 67c39d31ee..27d4d82560 100644 --- a/wpilibc/wpilibC++IntegrationTests/src/TiltPanCameraTest.cpp +++ b/wpilibc/wpilibC++IntegrationTests/src/TiltPanCameraTest.cpp @@ -16,8 +16,8 @@ static constexpr double kTestAngle = 180.0; static constexpr double kTiltSetpoint0 = 0.16; static constexpr double kTiltSetpoint45 = 0.385; static constexpr double kTiltSetpoint90 = 0.61; -static constexpr double kTiltTime = 0.5; -static constexpr double kAccelerometerTolerance = 0.1; +static constexpr double kTiltTime = 1.0; +static constexpr double kAccelerometerTolerance = 0.2; /** * A fixture for the camera with two servos and a gyro @@ -27,24 +27,25 @@ class TiltPanCameraTest : public testing::Test { protected: static Gyro *m_gyro; Servo *m_tilt, *m_pan; - ADXL345_SPI *m_spiAccel; - + Accelerometer *m_spiAccel; + static void SetUpTestCase() { // The gyro object blocks for 5 seconds in the constructor, so only // construct it once for the whole test case m_gyro = new Gyro(TestBench::kCameraGyroChannel); + m_gyro->SetSensitivity(0.0134897058674); } - + static void TearDownTestCase() { delete m_gyro; } - + virtual void SetUp() { m_tilt = new Servo(TestBench::kCameraTiltChannel); m_pan = new Servo(TestBench::kCameraPanChannel); m_spiAccel = new ADXL345_SPI(SPI::kOnboardCS0); } - + virtual void TearDown() { delete m_tilt; delete m_pan; @@ -58,17 +59,21 @@ Gyro *TiltPanCameraTest::m_gyro = 0; * Test if the servo turns 180 degrees and the gyroscope measures this angle */ TEST_F(TiltPanCameraTest, GyroAngle) { + m_pan->Set(0.0f); Wait(kServoResetTime); - - for(int i = 0; i < 100; i++) { - m_pan->Set(i / 100.0); + + m_gyro->Reset(); + + for(int i = 0; i < 180; i++) { + m_pan->SetAngle(i); + Wait(0.05); } - + double gyroAngle = m_gyro->GetAngle(); - + EXPECT_NEAR(gyroAngle, kTestAngle, 20.0) << "Gyro measured " << gyroAngle - << " degrees, servo should have turned " << kTestAngle << " degrees"; + << " degrees, servo should have turned " << kTestAngle << " degrees"; } /** @@ -78,19 +83,19 @@ TEST_F(TiltPanCameraTest, GyroAngle) { TEST_F(TiltPanCameraTest, SPIAccelerometer) { m_tilt->Set(kTiltSetpoint0); Wait(kTiltTime); - EXPECT_NEAR(-1.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_X), kAccelerometerTolerance); - EXPECT_NEAR(0.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Y), kAccelerometerTolerance); - EXPECT_NEAR(0.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Z), kAccelerometerTolerance); - + EXPECT_NEAR(-1.0, m_spiAccel->GetX(), kAccelerometerTolerance); + EXPECT_NEAR(0.0, m_spiAccel->GetY(), kAccelerometerTolerance); + EXPECT_NEAR(0.0, m_spiAccel->GetZ(), kAccelerometerTolerance); + m_tilt->Set(kTiltSetpoint45); Wait(kTiltTime); - EXPECT_NEAR(-std::sqrt(0.5), m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_X), kAccelerometerTolerance); - EXPECT_NEAR(0.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Y), kAccelerometerTolerance); - EXPECT_NEAR(std::sqrt(0.5), m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Z), kAccelerometerTolerance); - + EXPECT_NEAR(-std::sqrt(0.5), m_spiAccel->GetX(), kAccelerometerTolerance); + EXPECT_NEAR(0.0, m_spiAccel->GetY(), kAccelerometerTolerance); + EXPECT_NEAR(std::sqrt(0.5), m_spiAccel->GetZ(), kAccelerometerTolerance); + m_tilt->Set(kTiltSetpoint90); Wait(kTiltTime); - EXPECT_NEAR(0.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_X), kAccelerometerTolerance); - EXPECT_NEAR(0.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Y), kAccelerometerTolerance); - EXPECT_NEAR(1.0, m_spiAccel->GetAcceleration(ADXL345_SPI::kAxis_Z), kAccelerometerTolerance); + EXPECT_NEAR(0.0, m_spiAccel->GetX(), kAccelerometerTolerance); + EXPECT_NEAR(0.0, m_spiAccel->GetY(), kAccelerometerTolerance); + EXPECT_NEAR(1.0, m_spiAccel->GetZ(), kAccelerometerTolerance); }