source: flair-src/trunk/lib/FlairSensorActuator/src/Imu.cpp@ 110

Last change on this file since 110 was 99, checked in by Sanahuja Guillaume, 8 years ago

rotation pour 3dmgx3

File size: 3.8 KB
Line 
1// %flair:license{
2// This file is part of the Flair framework distributed under the
3// CECILL-C License, Version 1.0.
4// %flair:license}
5// created: 2014/01/16
6// filename: Imu.cpp
7//
8// author: Guillaume Sanahuja
9// Copyright Heudiasyc UMR UTC/CNRS 7253
10//
11// version: $Id: $
12//
13// purpose: Virtual class for Imu
14//
15//
16/*********************************************************************/
17
18#include "Imu.h"
19#include <FrameworkManager.h>
20#include <Tab.h>
21#include <TabWidget.h>
22#include <GroupBox.h>
23#include <GridLayout.h>
24#include <DataPlot1D.h>
25#include <ImuData.h>
26#include <OneAxisRotation.h>
27
28using std::string;
29using namespace flair::core;
30using namespace flair::gui;
31
32namespace flair {
33namespace sensor {
34
35Imu::Imu(const FrameworkManager *parent, string name) : IODevice(parent, name) {
36 imuData = new ImuData(this);
37
38 // station sol
39 mainTab = new Tab(parent->GetTabWidget(), name);
40 tab = new TabWidget(mainTab->NewRow(), name);
41 sensorTab = new Tab(tab, "Reglages");
42 setupGroupbox = new GroupBox(sensorTab->NewRow(), name);
43 rotation = new OneAxisRotation(sensorTab->NewRow(), "post rotation");
44}
45
46Imu::Imu(const IODevice *parent, std::string name) : IODevice(parent, name) {
47 imuData = new ImuData(this);
48 mainTab = NULL;
49 tab = NULL;
50 sensorTab = NULL;
51 setupGroupbox = NULL;
52 rotation = NULL;
53}
54
55Imu::~Imu() {
56 if (mainTab != NULL)
57 delete mainTab;
58}
59
60void Imu::GetDatas(ImuData **outImuData) const { *outImuData = imuData; }
61
62OneAxisRotation *Imu::GetOneAxisRotation(void) const {
63 return rotation;
64}
65
66void Imu::UpdateImu() {
67 if (rotation == NULL) {
68 Err("not applicable for simulation part.\n");
69 return;
70 }
71 Vector3D rawAcc, rawMag, rawGyr;
72 imuData->GetRawAccMagAndGyr(rawAcc, rawMag, rawGyr);
73 rotation->ComputeRotation(rawAcc);
74 rotation->ComputeRotation(rawGyr);
75 rotation->ComputeRotation(rawMag);
76 imuData->SetRawAccMagAndGyr(rawAcc, rawMag, rawGyr);
77}
78
79GroupBox *Imu::GetGroupBox(void) const { return setupGroupbox; }
80
81Layout *Imu::GetLayout(void) const { return sensorTab; }
82
83void Imu::LockUserInterface(void) const {
84 if (sensorTab == NULL) {
85 Err("not applicable for simulation part.\n");
86 return;
87 }
88 sensorTab->setEnabled(false);
89}
90
91void Imu::UnlockUserInterface(void) const {
92 if (sensorTab == NULL) {
93 Err("not applicable for simulation part.\n");
94 return;
95 }
96 sensorTab->setEnabled(true);
97}
98
99void Imu::UseDefaultPlot(void) {
100 if (tab == NULL) {
101 Err("not applicable for simulation part.\n");
102 return;
103 }
104
105 plotTab = new Tab(tab, "IMU");
106 axPlot = new DataPlot1D(plotTab->NewRow(), "acc_x", -10, 10);
107 axPlot->AddCurve(imuData->Element(ImuData::RawAx));
108 ayPlot = new DataPlot1D(plotTab->LastRowLastCol(), "acc_y", -10, 10);
109 ayPlot->AddCurve(imuData->Element(ImuData::RawAy));
110 azPlot = new DataPlot1D(plotTab->LastRowLastCol(), "acc_z", -10, 10);
111 azPlot->AddCurve(imuData->Element(ImuData::RawAz));
112
113 if (plotTab == NULL)
114 plotTab = new Tab(tab, "IMU");
115 gxPlot = new DataPlot1D(plotTab->NewRow(), "gyr_x", -500, 500);
116 gxPlot->AddCurve(imuData->Element(ImuData::RawGxDeg));
117 gyPlot = new DataPlot1D(plotTab->LastRowLastCol(), "gyr_y", -500, 500);
118 gyPlot->AddCurve(imuData->Element(ImuData::RawGyDeg));
119 gzPlot = new DataPlot1D(plotTab->LastRowLastCol(), "gyr_z", -500, 500);
120 gzPlot->AddCurve(imuData->Element(ImuData::RawGzDeg));
121
122 if (plotTab == NULL)
123 plotTab = new Tab(tab, "IMU");
124 mxPlot = new DataPlot1D(plotTab->NewRow(), "mag_x", -500, 500);
125 mxPlot->AddCurve(imuData->Element(ImuData::RawMx));
126 myPlot = new DataPlot1D(plotTab->LastRowLastCol(), "mag_y", -500, 500);
127 myPlot->AddCurve(imuData->Element(ImuData::RawMy));
128 mzPlot = new DataPlot1D(plotTab->LastRowLastCol(), "mag_z", -500, 500);
129 mzPlot->AddCurve(imuData->Element(ImuData::RawMz));
130}
131
132Tab *Imu::GetPlotTab(void) const { return plotTab; }
133
134} // end namespace sensor
135} // end namespace flair
Note: See TracBrowser for help on using the repository browser.