# Internal Debugging Options
#add_definitions(-Wall -g -D_DEBUG)
-# For Emulator
-FIND_PROGRAM(UNAME NAMES uname)
-EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
-IF("${ARCH}" MATCHES "^arm.*")
- ADD_DEFINITIONS("-DTARGET")
- MESSAGE("add -DTARGET")
-ELSE("${ARCH}" MATCHES "^arm.*")
- ADD_DEFINITIONS("-DSIMULATOR")
- MESSAGE("add -DSIMULATOR")
-ENDIF("${ARCH}" MATCHES "^arm.*")
-
# Installing files
CONFIGURE_FILE(sensor_plugins.xml.in sensor_plugins.xml @ONLY)
CONFIGURE_FILE(sensors.xml.in sensors.xml @ONLY)
-CONFIGURE_FILE(virtual_sensors.xml.in virtual_sensors.xml @ONLY)
INSTALL(FILES sensor_plugins.xml sensors.xml DESTINATION etc)
INSTALL(FILES virtual_sensors.xml virtual_sensors.xml DESTINATION etc)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.APLv2 DESTINATION share/license RENAME sensord)
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.APLv2 DESTINATION share/license RENAME libsensord)
-
-IF("${TEST_SUITE}" STREQUAL "ON")
-INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.APLv2 DESTINATION share/license RENAME test)
-ENDIF()
# Sub-directory
add_subdirectory(systemd)
%{_unitdir}/multi-user.target.wants/sensord.service
%{_unitdir}/sockets.target.wants/sensord.socket
%license LICENSE.APLv2
-%{_datadir}/license/sensord
%files -n libsensord
%defattr(-,root,root,-)
%{_libdir}/libsensord-share.so
%{_libdir}/libsensord-server.so
%license LICENSE.APLv2
-%{_datadir}/license/libsensord
%files -n libsensord-devel
%defattr(-,root,root,-)
%{_bindir}/light
%{_bindir}/rotation_vector
%license LICENSE.APLv2
-%{_datadir}/license/test
%endif
set(PROJECT_RELEASE_VERSION "1")
set(CMAKE_VERBOSE_MAKEFILE OFF)
-FIND_PROGRAM(UNAME NAMES uname)
-EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")
-IF("${ARCH}" MATCHES "^arm.*")
- ADD_DEFINITIONS("-DTARGET -DHWREV_CHECK")
- MESSAGE("add -DTARGET -DHWREV_CHECK")
-ELSE("${ARCH}" MATCHES "^arm.*")
- ADD_DEFINITIONS("-DSIMULATOR")
- MESSAGE("add -DSIMULATOR")
-ENDIF("${ARCH}" MATCHES "^arm.*")
-
add_definitions(-Wall -O3 -omit-frame-pointer)
#add_definitions(-Wall -g -D_DEBUG)
add_definitions(-DUSE_DLOG_LOG)
}
template <typename TYPE>
+inline void orientation_filter<TYPE>::initialize_sensor_data(const sensor_data<TYPE> accel,
+ const sensor_data<TYPE> magnetic)
+{
+ m_accel.m_data = accel.m_data;
+ m_magnetic.m_data = magnetic.m_data;
+
+ m_accel.m_time_stamp = accel.m_time_stamp;
+ m_magnetic.m_time_stamp = magnetic.m_time_stamp;
+}
+
+template <typename TYPE>
inline void orientation_filter<TYPE>::orientation_triad_algorithm()
{
TYPE arr_acc_e[V1x3S] = {0.0, 0.0, 1.0};
quat_output = phase_correction(m_quat_driv, m_quat_aid);
- m_quaternion = quat_output;
+ m_quat_9axis = quat_output;
orientation = quat2euler(quat_output);
}
template <typename TYPE>
-quaternion<TYPE> orientation_filter<TYPE>::get_quaternion(const sensor_data<TYPE> accel,
+quaternion<TYPE> orientation_filter<TYPE>::get_9axis_quaternion(const sensor_data<TYPE> accel,
const sensor_data<TYPE> gyro, const sensor_data<TYPE> magnetic)
{
get_orientation(accel, gyro, magnetic);
- return m_quaternion;
+ return m_quat_9axis;
}
+template <typename TYPE>
+quaternion<TYPE> orientation_filter<TYPE>::get_geomagnetic_quaternion(const sensor_data<TYPE> accel,
+ const sensor_data<TYPE> magnetic)
+{
+ initialize_sensor_data(accel, magnetic);
+
+ normalize(m_accel);
+ normalize(m_magnetic);
+
+ orientation_triad_algorithm();
+
+ return m_quat_aid;
+}
#endif //_ORIENTATION_FILTER_H_
quaternion<TYPE> m_quat_driv;
rotation_matrix<TYPE> m_rot_matrix;
euler_angles<TYPE> m_orientation;
- quaternion<TYPE> m_quaternion;
+ quaternion<TYPE> m_quat_9axis;
TYPE m_gyro_dt;
int m_pitch_phase_compensation;
inline void initialize_sensor_data(const sensor_data<TYPE> accel,
const sensor_data<TYPE> gyro, const sensor_data<TYPE> magnetic);
+ inline void initialize_sensor_data(const sensor_data<TYPE> accel,
+ const sensor_data<TYPE> magnetic);
inline void orientation_triad_algorithm();
inline void compute_covariance();
inline void time_update();
const sensor_data<TYPE> gyro, const sensor_data<TYPE> magnetic);
rotation_matrix<TYPE> get_rotation_matrix(const sensor_data<TYPE> accel,
const sensor_data<TYPE> gyro, const sensor_data<TYPE> magnetic);
- quaternion<TYPE> get_quaternion(const sensor_data<TYPE> accel,
+ quaternion<TYPE> get_9axis_quaternion(const sensor_data<TYPE> accel,
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);
};
#include "orientation_filter.cpp"
return orien_filter.get_rotation_matrix(accel_data, gyro_data, magnetic_data);
}
-quaternion<float> orientation_sensor::get_quaternion(sensor_data<float> accel_data,
+quaternion<float> orientation_sensor::get_9axis_quaternion(sensor_data<float> accel_data,
sensor_data<float> gyro_data, sensor_data<float> magnetic_data)
{
pre_process_data(accel_data, accel_data, bias_accel, sign_accel, scale_accel);
orien_filter.m_azimuth_phase_compensation = azimuth_phase_compensation;
orien_filter.m_magnetic_alignment_factor = magnetic_alignment_factor;
- return orien_filter.get_quaternion(accel_data, gyro_data, magnetic_data);
+ return orien_filter.get_9axis_quaternion(accel_data, gyro_data, magnetic_data);
}
+quaternion<float> orientation_sensor::get_geomagnetic_quaternion(sensor_data<float> accel_data,
+ sensor_data<float> magnetic_data)
+{
+ pre_process_data(accel_data, accel_data, bias_accel, sign_accel, scale_accel);
+ normalize(accel_data);
+ pre_process_data(magnetic_data, magnetic_data, bias_magnetic, sign_magnetic, scale_magnetic);
+ normalize(magnetic_data);
+
+ return orien_filter.get_geomagnetic_quaternion(accel_data, magnetic_data);
+}
#endif
sensor_data<float> gyro, sensor_data<float> magnetic);
rotation_matrix<float> get_rotation_matrix(sensor_data<float> accel,
sensor_data<float> gyro, sensor_data<float> magnetic);
- quaternion<float> get_quaternion(sensor_data<float> accel,
+ quaternion<float> get_9axis_quaternion(sensor_data<float> accel,
sensor_data<float> gyro, sensor_data<float> magnetic);
+ quaternion<float> get_geomagnetic_quaternion(sensor_data<float> accel,
+ sensor_data<float> magnetic);
};
#include "orientation_sensor.cpp"
unsigned long long time_stamp;
euler_angles<float> orientation;
rotation_matrix<float> orientation_mat;
- quaternion<float> orientation_quat;
- orientation_sensor orien_sensor1, orien_sensor2, orien_sensor3;
+ quaternion<float> orientation_9axis_quat;
+ quaternion<float> orientation_geomagnetic_quat;
+ orientation_sensor orien_sensor1, orien_sensor2, orien_sensor3, orien_sensor4;
accel_in.open(((string)ORIENTATION_DATA_PATH + (string)"accel.txt").c_str());
gyro_in.open(((string)ORIENTATION_DATA_PATH + (string)"gyro.txt").c_str());
cout << "Orientation matrix\t" << orientation_mat.m_rot_mat << "\n\n";
- orientation_quat = orien_sensor3.get_quaternion(accel_data, gyro_data, magnetic_data);
+ orientation_9axis_quat = orien_sensor3.get_9axis_quaternion(accel_data, gyro_data, magnetic_data);
- cout << "Orientation quaternion\t" << orientation_quat.m_quat << "\n\n";
+ cout << "Orientation 9-axis quaternion\t" << orientation_9axis_quat.m_quat << "\n\n";
+
+ orientation_geomagnetic_quat = orien_sensor4.get_geomagnetic_quaternion(accel_data, magnetic_data);
+
+ cout << "Orientation geomagnetic quaternion\t" << orientation_geomagnetic_quat.m_quat << "\n\n";
}
accel_in.close();
if (result < 0) {
printf("Can't start accelerometer SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect Accelerometer sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
return -1;
+ free(event_condition);
}
sf_disconnect(handle);
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't start gyroscope SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect gyroscope sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't start light SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect light sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
sf_disconnect(handle);
if (result < 0) {
printf("Can't start pressure SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect pressure sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't start proximity SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect proximity sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't start temperature SENSOR\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
if (result < 0) {
printf("Can't disconnect temperature sensor\n");
printf("Error\n\n\n\n");
+ free(event_condition);
return -1;
}
}
printf("Error\n\n\n\n");
sf_unregister_event(handle, event);
sf_disconnect(handle);
+ free(event_condition);
return -1;
}
if (stop_handle < 0) {
printf("Error\n\n");
+ free(event_condition);
return -1;
}