if (m_enable_gaming_rv == GAMING_RV_ENABLED) {
m_enable_gaming_rv = 0;
- quaternion_gaming_rv = m_orientation_filter.get_gaming_quaternion(m_accel, m_gyro);
+ quaternion_gaming_rv = m_orientation_filter.get_gaming_quaternion(&m_accel, &m_gyro);
m_time = get_timestamp();
rv_event.sensor_id = get_id();
accel.m_time_stamp = accel_data.timestamp;
gyro.m_time_stamp = gyro_data.timestamp;
- quaternion_gaming_rv = m_orientation_filter_poll.get_gaming_quaternion(m_accel, m_gyro);
+ quaternion_gaming_rv = m_orientation_filter_poll.get_gaming_quaternion(&m_accel, &m_gyro);
data.accuracy = SENSOR_ACCURACY_GOOD;
data.timestamp = get_timestamp();
}
template <typename TYPE>
-inline void orientation_filter<TYPE>::init_accel_gyro_data(const sensor_data<TYPE> accel,
- const sensor_data<TYPE> gyro)
-{
- unsigned long long sample_interval_gyro = SAMPLE_INTV;
-
- m_accel.m_data = accel.m_data;
-
- if (m_gyro.m_time_stamp != 0 && gyro.m_time_stamp != 0)
- sample_interval_gyro = gyro.m_time_stamp - m_gyro.m_time_stamp;
-
- m_gyro_dt = sample_interval_gyro * US2S;
-
- m_accel.m_time_stamp = accel.m_time_stamp;
- m_gyro.m_time_stamp = gyro.m_time_stamp;
-
- m_gyro.m_data = gyro.m_data - m_bias_correction;
-}
-
-template <typename TYPE>
inline void orientation_filter<TYPE>::orientation_triad_algorithm()
{
TYPE arr_acc_e[V1x3S] = {0.0, 0.0, 1.0};
if (magnetic != NULL)
orientation_triad_algorithm();
+ else if(gyro != NULL)
+ compute_accel_orientation();
if (gyro != NULL) {
compute_covariance();
}
template <typename TYPE>
-quaternion<TYPE> orientation_filter<TYPE>::get_gaming_quaternion(const sensor_data<TYPE> accel,
- const sensor_data<TYPE> gyro)
+quaternion<TYPE> orientation_filter<TYPE>::get_gaming_quaternion(const sensor_data<TYPE> *accel,
+ const sensor_data<TYPE> *gyro)
{
- euler_angles<TYPE> cor_euler_ang;
-
- init_accel_gyro_data(accel, gyro);
-
- normalize(m_accel);
- m_gyro.m_data = m_gyro.m_data * (TYPE) PI;
-
- compute_accel_orientation();
-
- compute_covariance();
-
- time_update_gaming_rv();
-
- measurement_update();
+ get_device_rotation(accel, gyro, NULL);
return m_quat_gaming_rv;
}
inline void initialize_sensor_data(const sensor_data<TYPE> *accel,
const sensor_data<TYPE> *gyro, const sensor_data<TYPE> *magnetic);
- inline void init_accel_gyro_data(const sensor_data<TYPE> accel,
- const sensor_data<TYPE> gyro);
inline void orientation_triad_algorithm();
inline void compute_accel_orientation();
inline void compute_covariance();
const sensor_data<TYPE> *gyro, const sensor_data<TYPE> *magnetic);
quaternion<TYPE> get_geomagnetic_quaternion(const sensor_data<TYPE> *accel,
const sensor_data<TYPE> *magnetic);
- quaternion<TYPE> get_gaming_quaternion(const sensor_data<TYPE> accel,
- const sensor_data<TYPE> gyro);
+ quaternion<TYPE> get_gaming_quaternion(const sensor_data<TYPE> *accel,
+ const sensor_data<TYPE> *gyro);
euler_angles<TYPE> get_device_rotation(const sensor_data<TYPE> *accel,
const sensor_data<TYPE> *gyro, const sensor_data<TYPE> *magnetic);
};
}
-quaternion<float> orientation_sensor::get_gaming_quaternion(sensor_data<float> accel_data,
- sensor_data<float> gyro_data)
+quaternion<float> orientation_sensor::get_gaming_quaternion(sensor_data<float> *accel_data,
+ sensor_data<float> *gyro_data)
{
- pre_process_data(&accel_data, &accel_data, bias_accel, sign_accel, scale_accel);
- normalize(accel_data);
- pre_process_data(&gyro_data, &gyro_data, bias_gyro, sign_gyro, scale_gyro);
+ pre_process_data(accel_data, accel_data, bias_accel, sign_accel, scale_accel);
+ normalize(*accel_data);
+ pre_process_data(gyro_data, gyro_data, bias_gyro, sign_gyro, scale_gyro);
return orien_filter.get_gaming_quaternion(accel_data, gyro_data);
}
sensor_data<float> *gyro, sensor_data<float> *magnetic);
quaternion<float> get_geomagnetic_quaternion(sensor_data<float> *accel,
sensor_data<float> *magnetic);
- quaternion<float> get_gaming_quaternion(sensor_data<float> accel,
- sensor_data<float> gyro);
+ quaternion<float> get_gaming_quaternion(sensor_data<float> *accel,
+ sensor_data<float> *gyro);
};
#include "orientation_sensor.cpp"
cout << "Orientation geomagnetic quaternion\t" << orientation_geomagnetic_quat.m_quat << "\n\n";
- orientation_gaming_quat = orien_sensor5.get_gaming_quaternion(accel_data, gyro_data);
+ orientation_gaming_quat = orien_sensor5.get_gaming_quaternion(&accel_data, &gyro_data);
cout << "Orientation gaming quaternion\t" << orientation_gaming_quat.m_quat << "\n\n";
}