Fang-Robotics-MCB
Fang Robotics Team Codebase
Loading...
Searching...
No Matches
abstract_imu.hpp
Go to the documentation of this file.
1/*****************************************************************************/
2/********** !!! WARNING: CODE GENERATED BY TAPROOT. DO NOT EDIT !!! **********/
3/*****************************************************************************/
4
5/*
6 * Copyright (c) 2020-2025 Advanced Robotics at the University of Washington <robomstr@uw.edu>
7 *
8 * This file is part of Taproot.
9 *
10 * Taproot is free software: you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation, either version 3 of the License, or
13 * (at your option) any later version.
14 *
15 * Taproot is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with Taproot. If not, see <https://www.gnu.org/licenses/>.
22 */
23
24#ifndef TAPROOT_ABSTRACT_IMU_HPP_
25#define TAPROOT_ABSTRACT_IMU_HPP_
26
33#include "tap/util_macros.hpp"
34
36{
39
40constexpr float GRAVITY_MPS2 = 9.81f;
45{
46public:
51
52 void setMountingTransform(const Transform& transform);
53
54 virtual ~AbstractIMU() = default;
55
56 virtual void initialize(float sampleFrequency, float mahonyKp, float mahonyKi);
57
64 virtual void requestCalibration();
65
70 virtual void periodicIMUUpdate();
71
82 virtual ImuState getImuState() const { return imuState; }
83
84 mockable inline float getAx() const override { return imuData.accG.x(); }
85 mockable inline float getAy() const override { return imuData.accG.y(); }
86 mockable inline float getAz() const override { return imuData.accG.z(); }
87 mockable inline float getAzMinusG() const { return imuData.accG.z() - GRAVITY_MPS2; }
88
89 mockable inline float getGx() const override { return imuData.gyroRadPerSec.x(); }
90 mockable inline float getGy() const override { return imuData.gyroRadPerSec.y(); }
91 mockable inline float getGz() const override { return imuData.gyroRadPerSec.z(); }
92
93 mockable inline float getTemp() const { return imuData.temperature; }
94
95 virtual inline float getYaw() const override { return mahonyAlgorithm.getYaw(); }
96 virtual inline float getPitch() const override { return mahonyAlgorithm.getPitch(); }
97 virtual inline float getRoll() const override { return mahonyAlgorithm.getRoll(); }
98
110
111 void setCalibrationSamples(int sampleCount) { offsetSampleCount = sampleCount; }
112
113protected:
114 void resetOffsets();
115 void computeOffsets();
116 void setAccelOffset(float x, float y, float z);
117 void setGyroOffset(float x, float y, float z);
118
119 inline void applyTransform(ImuData& data)
120 {
121 data.accG = mountingTransform.apply(data.accG);
123 }
124
125 virtual inline float getAccelerationSensitivity() const = 0;
126
128
130
134
136
138
140};
141
142} // namespace tap::communication::sensors::imu
143
144#endif // TAPROOT_ABSTRACT_IMU_HPP_
Definition MahonyAHRS.h:31
float getPitch() const
Definition MahonyAHRS.h:78
float getRoll() const
Definition MahonyAHRS.h:77
float getYaw() const
Definition MahonyAHRS.h:79
Definition orientation.hpp:33
Definition transform.hpp:60
static Transform identity()
Constructs an identity transform.
Definition transform.hpp:194
Position apply(const Position &position) const
Apply this transform to a position.
Definition transform.cpp:205
Definition vector.hpp:35
float y() const
Definition vector.hpp:52
float x() const
Definition vector.hpp:50
float z() const
Definition vector.hpp:54
Definition periodic_timer.hpp:42
Definition abstract_imu.hpp:45
tap::algorithms::transforms::Transform mountingTransform
Definition abstract_imu.hpp:127
int offsetSampleCount
Definition abstract_imu.hpp:133
ImuState imuState
Definition abstract_imu.hpp:131
mockable float getGx() const override
Definition abstract_imu.hpp:89
virtual void initialize(float sampleFrequency, float mahonyKp, float mahonyKi)
Definition abstract_imu.cpp:27
mockable float getGz() const override
Definition abstract_imu.hpp:91
mockable float getGy() const override
Definition abstract_imu.hpp:90
void setMountingTransform(const Transform &transform)
Definition abstract_imu.cpp:44
ImuData imuData
Definition abstract_imu.hpp:135
mockable float getAx() const override
Definition abstract_imu.hpp:84
virtual float getRoll() const override
Definition abstract_imu.hpp:97
void computeOffsets()
Definition abstract_imu.cpp:83
virtual void periodicIMUUpdate()
Definition abstract_imu.cpp:49
virtual float getYaw() const override
Definition abstract_imu.hpp:95
virtual float getPitch() const override
Definition abstract_imu.hpp:96
virtual ImuState getImuState() const
Definition abstract_imu.hpp:82
tap::arch::PeriodicMicroTimer readTimeout
Definition abstract_imu.hpp:137
AbstractIMU(const Transform &mountingTransform=Transform::identity())
Definition abstract_imu.hpp:47
void resetOffsets()
Definition abstract_imu.cpp:67
virtual float getAccelerationSensitivity() const =0
mockable float getAz() const override
Definition abstract_imu.hpp:86
mockable float getTemp() const
Definition abstract_imu.hpp:93
Mahony mahonyAlgorithm
Definition abstract_imu.hpp:129
void applyTransform(ImuData &data)
Definition abstract_imu.hpp:119
uint32_t prevIMUDataReceivedTime
Definition abstract_imu.hpp:139
void setCalibrationSamples(int sampleCount)
Definition abstract_imu.hpp:111
int calibrationSample
Definition abstract_imu.hpp:132
mockable float getAzMinusG() const
Definition abstract_imu.hpp:87
void setAccelOffset(float x, float y, float z)
Definition abstract_imu.cpp:73
mockable float getAy() const override
Definition abstract_imu.hpp:85
virtual void requestCalibration()
Definition abstract_imu.cpp:34
void setGyroOffset(float x, float y, float z)
Definition abstract_imu.cpp:78
Definition imu_interface.hpp:33
ImuState
Definition imu_interface.hpp:39
Definition abstract_imu.cpp:26
constexpr float GRAVITY_MPS2
Definition abstract_imu.hpp:40
tap::algorithms::transforms::Vector accOffsetRaw
Definition abstract_imu.hpp:103
tap::algorithms::transforms::Vector gyroRadPerSec
Definition abstract_imu.hpp:106
float temperature
Definition abstract_imu.hpp:108
tap::algorithms::transforms::Vector accG
Definition abstract_imu.hpp:105
tap::algorithms::transforms::Vector gyroOffsetRaw
Definition abstract_imu.hpp:104
tap::algorithms::transforms::Vector accRaw
Definition abstract_imu.hpp:101
tap::algorithms::transforms::Vector gyroRaw
Definition abstract_imu.hpp:102
#define mockable
Wrap class functions that are not already virtual in this function if you wish to mock them.
Definition util_macros.hpp:38