Commit 0b2d7b2a authored by Jun Cai's avatar Jun Cai Committed by Commit Bot

Move radian and degree conversion constants to generic_sensor_consts.h

Currently there are radian and degree conversion constants in both
generic_sensor_consts.h and orientation_util.h. This CL moves them to
generic_sensor_consts.h.

Bug: None
Change-Id: I7de69b7e9536bb003158ab9d3611ec9a621211fc
Reviewed-on: https://chromium-review.googlesource.com/661077
Commit-Queue: Jun Cai <juncai@chromium.org>
Reviewed-by: default avatarReilly Grant <reillyg@chromium.org>
Cr-Commit-Position: refs/heads/master@{#501311}
parent 2780167e
......@@ -9,7 +9,7 @@
#include "services/device/device_service_test_base.h"
#include "services/device/generic_sensor/absolute_orientation_euler_angles_fusion_algorithm_using_accelerometer_and_magnetometer.h"
#include "services/device/generic_sensor/fake_platform_sensor_fusion.h"
#include "services/device/generic_sensor/orientation_util.h"
#include "services/device/generic_sensor/generic_sensor_consts.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace device {
......@@ -191,8 +191,8 @@ TEST_F(
AbsoluteOrientationEulerAnglesFusionAlgorithmUsingAccelerometerAndMagnetometerTest,
BetaIs45Degrees) {
double gravity_x = 0.0;
double gravity_y = std::sin(kDegToRad * 45.0);
double gravity_z = std::cos(kDegToRad * 45.0);
double gravity_y = std::sin(kDegreesToRadians * 45.0);
double gravity_z = std::cos(kDegreesToRadians * 45.0);
double geomagnetic_x = 0.0;
double geomagnetic_y = 1.0;
double geomagnetic_z = 0.0;
......@@ -210,9 +210,9 @@ TEST_F(
TEST_F(
AbsoluteOrientationEulerAnglesFusionAlgorithmUsingAccelerometerAndMagnetometerTest,
GammaIs45Degrees) {
double gravity_x = -std::sin(kDegToRad * 45.0);
double gravity_x = -std::sin(kDegreesToRadians * 45.0);
double gravity_y = 0.0;
double gravity_z = std::cos(kDegToRad * 45.0);
double gravity_z = std::cos(kDegreesToRadians * 45.0);
double geomagnetic_x = 0.0;
double geomagnetic_y = 1.0;
double geomagnetic_z = 0.0;
......@@ -233,8 +233,8 @@ TEST_F(
double gravity_x = 0.0;
double gravity_y = 0.0;
double gravity_z = 1.0;
double geomagnetic_x = std::sin(kDegToRad * 45.0);
double geomagnetic_y = std::cos(kDegToRad * 45.0);
double geomagnetic_x = std::sin(kDegreesToRadians * 45.0);
double geomagnetic_y = std::cos(kDegreesToRadians * 45.0);
double geomagnetic_z = 0.0;
double expected_alpha_in_degrees = 45.0;
......@@ -253,9 +253,9 @@ TEST_F(
double gravity_x = 0.0;
double gravity_y = 1.0;
double gravity_z = 0.0;
double geomagnetic_x = std::sin(kDegToRad * 45.0);
double geomagnetic_x = std::sin(kDegreesToRadians * 45.0);
double geomagnetic_y = 0.0;
double geomagnetic_z = -std::cos(kDegToRad * 45.0);
double geomagnetic_z = -std::cos(kDegreesToRadians * 45.0);
// Favor Alpha instead of Gamma.
double expected_alpha_in_degrees = 45.0;
......@@ -272,8 +272,8 @@ TEST_F(
AbsoluteOrientationEulerAnglesFusionAlgorithmUsingAccelerometerAndMagnetometerTest,
BetaIsGreaterThan90Degrees) {
double gravity_x = 0.0;
double gravity_y = std::cos(kDegToRad * 45.0);
double gravity_z = -std::sin(kDegToRad * 45.0);
double gravity_y = std::cos(kDegreesToRadians * 45.0);
double gravity_z = -std::sin(kDegreesToRadians * 45.0);
double geomagnetic_x = 0.0;
double geomagnetic_y = 0.0;
double geomagnetic_z = -1.0;
......
......@@ -6,6 +6,7 @@
#define SERVICES_DEVICE_GENERIC_SENSOR_GENERIC_SENSOR_CONSTS_H_
#define _USE_MATH_DEFINES
#include <math.h>
namespace device {
......@@ -13,8 +14,11 @@ namespace device {
// Required for conversion from G/s^2 to m/s^2
constexpr double kMeanGravity = 9.80665;
// Required for conversion from deg to rad
constexpr double kRadiansInDegrees = M_PI / 180.0;
// Conversion ratio from radians to degrees.
constexpr double kRadiansToDegrees = 180.0 / M_PI;
// Conversion ratio from degrees to radians.
constexpr double kDegreesToRadians = M_PI / 180.0;
// Required for conversion from Gauss to uT.
constexpr double kMicroteslaInGauss = 100.0;
......
......@@ -115,7 +115,7 @@ void InitGyroscopeSensorData(SensorPathsLinux* data) {
data->sensor_frequency_file_name = "in_anglvel_base_frequency";
data->apply_scaling_func = base::Bind(
[](double scaling_value, double offset, SensorReading& reading) {
double scaling = kMeanGravity * kRadiansInDegrees / scaling_value;
double scaling = kMeanGravity * kDegreesToRadians / scaling_value;
// Adapt CrOS reading values to generic sensor api specs.
reading.gyro.x = -scaling * (reading.gyro.x + offset);
reading.gyro.y = -scaling * (reading.gyro.y + offset);
......
......@@ -7,7 +7,7 @@
#include <cmath>
#include "base/logging.h"
#include "services/device/generic_sensor/orientation_util.h"
#include "services/device/generic_sensor/generic_sensor_consts.h"
#include "services/device/generic_sensor/platform_sensor_fusion.h"
namespace device {
......@@ -21,9 +21,9 @@ void ComputeQuaternionFromEulerAngles(double alpha_in_degrees,
double* y,
double* z,
double* w) {
double alpha_in_radians = device::kDegToRad * alpha_in_degrees;
double beta_in_radians = device::kDegToRad * beta_in_degrees;
double gamma_in_radians = device::kDegToRad * gamma_in_degrees;
double alpha_in_radians = device::kDegreesToRadians * alpha_in_degrees;
double beta_in_radians = device::kDegreesToRadians * beta_in_degrees;
double gamma_in_radians = device::kDegreesToRadians * gamma_in_degrees;
double cx = std::cos(beta_in_radians / 2);
double cy = std::cos(gamma_in_radians / 2);
......
......@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#define _USE_MATH_DEFINES // For VC++ to get M_PI. This has to be first.
#include "services/device/generic_sensor/orientation_util.h"
#include <cmath>
#include "base/logging.h"
#include "services/device/generic_sensor/generic_sensor_consts.h"
namespace {
......@@ -94,10 +93,6 @@ void ComputeOrientationEulerAnglesInRadiansFromRotationMatrix(
namespace device {
const double kRadToDeg = 180.0 / M_PI;
const double kDegToRad = M_PI / 180.0;
void ComputeOrientationEulerAnglesFromRotationMatrix(
const std::vector<double>& r,
double* alpha_in_degrees,
......@@ -106,9 +101,9 @@ void ComputeOrientationEulerAnglesFromRotationMatrix(
double alpha_in_radians, beta_in_radians, gamma_in_radians;
ComputeOrientationEulerAnglesInRadiansFromRotationMatrix(
r, &alpha_in_radians, &beta_in_radians, &gamma_in_radians);
*alpha_in_degrees = kRadToDeg * alpha_in_radians;
*beta_in_degrees = kRadToDeg * beta_in_radians;
*gamma_in_degrees = kRadToDeg * gamma_in_radians;
*alpha_in_degrees = kRadiansToDegrees * alpha_in_radians;
*beta_in_degrees = kRadiansToDegrees * beta_in_radians;
*gamma_in_degrees = kRadiansToDegrees * gamma_in_radians;
}
} // namespace device
......@@ -9,12 +9,6 @@
namespace device {
// Conversion ratio from radians to degrees.
extern const double kRadToDeg;
// Conversion ratio from degrees to radians.
extern const double kDegToRad;
void ComputeOrientationEulerAnglesFromRotationMatrix(
const std::vector<double>& r,
double* alpha_in_degrees,
......
......@@ -638,7 +638,7 @@ TEST_F(PlatformSensorAndProviderLinuxTest, CheckGyroscopeReadingConversion) {
SensorReadingSharedBuffer* buffer =
static_cast<SensorReadingSharedBuffer*>(mapping.get());
#if defined(OS_CHROMEOS)
double scaling = kMeanGravity * kRadiansInDegrees / kGyroscopeScalingValue;
double scaling = kMeanGravity * kDegreesToRadians / kGyroscopeScalingValue;
EXPECT_THAT(buffer->reading.gyro.x, -scaling * sensor_values[0]);
EXPECT_THAT(buffer->reading.gyro.y, -scaling * sensor_values[1]);
EXPECT_THAT(buffer->reading.gyro.z, -scaling * sensor_values[2]);
......
......@@ -625,9 +625,9 @@ TEST_F(PlatformSensorAndProviderTestWin, CheckGyroscopeReadingConversion) {
base::RunLoop().RunUntilIdle();
SensorReadingSharedBuffer* buffer =
static_cast<SensorReadingSharedBuffer*>(mapping.get());
EXPECT_THAT(buffer->reading.gyro.x, -x_ang_accel * kRadiansInDegrees);
EXPECT_THAT(buffer->reading.gyro.y, -y_ang_accel * kRadiansInDegrees);
EXPECT_THAT(buffer->reading.gyro.z, -z_ang_accel * kRadiansInDegrees);
EXPECT_THAT(buffer->reading.gyro.x, -x_ang_accel * kDegreesToRadians);
EXPECT_THAT(buffer->reading.gyro.y, -y_ang_accel * kDegreesToRadians);
EXPECT_THAT(buffer->reading.gyro.z, -z_ang_accel * kDegreesToRadians);
EXPECT_TRUE(sensor->StopListening(client.get(), configuration));
}
......
......@@ -124,9 +124,9 @@ std::unique_ptr<ReaderInitParams> CreateGyroscopeReaderInitParams() {
// Windows uses coordinate system where Z axis points down from device
// screen, therefore, using right hand notation, we have to reverse
// sign for each axis. Values are converted from deg to rad.
reading->gyro.x = -x * kRadiansInDegrees;
reading->gyro.y = -y * kRadiansInDegrees;
reading->gyro.z = -z * kRadiansInDegrees;
reading->gyro.x = -x * kDegreesToRadians;
reading->gyro.y = -y * kDegreesToRadians;
reading->gyro.z = -z * kDegreesToRadians;
return S_OK;
};
return params;
......
......@@ -8,7 +8,6 @@
#include "base/logging.h"
#include "services/device/generic_sensor/generic_sensor_consts.h"
#include "services/device/generic_sensor/orientation_util.h"
#include "services/device/generic_sensor/platform_sensor_fusion.h"
namespace device {
......@@ -41,8 +40,10 @@ void ComputeRelativeOrientationFromAccelerometer(double acceleration_x,
// This is necessary in order to provide enough information to solve
// the equations.
*alpha_in_degrees = 0.0;
*beta_in_degrees = kRadToDeg * std::atan2(-acceleration_y, acceleration_z);
*gamma_in_degrees = kRadToDeg * std::asin(acceleration_x / kMeanGravity);
*beta_in_degrees =
kRadiansToDegrees * std::atan2(-acceleration_y, acceleration_z);
*gamma_in_degrees =
kRadiansToDegrees * std::asin(acceleration_x / kMeanGravity);
// Convert beta and gamma to fit the intervals in the specification. Beta is
// [-180, 180) and gamma is [-90, 90).
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment