RTAB-Map 0.23.10
Real-Time Appearance-Based Mapping
Loading...
Searching...
No Matches
IMU.h
1/*
2Copyright (c) 2010-2026, Mathieu Labbe - IntRoLab - Universite de Sherbrooke
3All rights reserved.
4
5Redistribution and use in source and binary forms, with or without
6modification, are permitted provided that the following conditions are met:
7 * Redistributions of source code must retain the above copyright
8 notice, this list of conditions and the following disclaimer.
9 * Redistributions in binary form must reproduce the above copyright
10 notice, this list of conditions and the following disclaimer in the
11 documentation and/or other materials provided with the distribution.
12 * Neither the name of the Universite de Sherbrooke nor the
13 names of its contributors may be used to endorse or promote products
14 derived from this software without specific prior written permission.
15
16THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
20DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*/
27
28#ifndef IMU_H_
29#define IMU_H_
30
31#include "rtabmap/core/rtabmap_core_export.h" // DLL export/import defines
32#include <opencv2/core/core.hpp>
33#include <rtabmap/utilite/UEvent.h>
34#include <rtabmap/core/Transform.h>
35
36namespace rtabmap {
37
56class RTABMAP_CORE_EXPORT IMU
57{
58public:
60 IMU() {}
61
72 IMU(const cv::Vec4d & orientation, // qx qy qz qw
73 const cv::Mat & orientationCovariance,
74 const cv::Vec3d & angularVelocity,
75 const cv::Mat & angularVelocityCovariance,
76 const cv::Vec3d & linearAcceleration,
77 const cv::Mat & linearAccelerationCovariance,
78 const Transform & localTransform = Transform::getIdentity()) :
79 orientation_(orientation),
80 orientationCovariance_(orientationCovariance),
81 angularVelocity_(angularVelocity),
82 angularVelocityCovariance_(angularVelocityCovariance),
83 linearAcceleration_(linearAcceleration),
84 linearAccelerationCovariance_(linearAccelerationCovariance),
85 localTransform_(localTransform)
86 {
87 }
88
97 IMU(const cv::Vec3d & angularVelocity,
98 const cv::Mat & angularVelocityCovariance,
99 const cv::Vec3d & linearAcceleration,
100 const cv::Mat & linearAccelerationCovariance,
101 const Transform & localTransform = Transform::getIdentity()) :
102 angularVelocity_(angularVelocity),
103 angularVelocityCovariance_(angularVelocityCovariance),
104 linearAcceleration_(linearAcceleration),
105 linearAccelerationCovariance_(linearAccelerationCovariance),
106 localTransform_(localTransform)
107 {
108 }
109
111 const cv::Vec4d & orientation() const {return orientation_;}
113 const cv::Mat & orientationCovariance() const {return orientationCovariance_;}
114
116 const cv::Vec3d & angularVelocity() const {return angularVelocity_;}
118 const cv::Mat & angularVelocityCovariance() const {return angularVelocityCovariance_;}
119
121 const cv::Vec3d & linearAcceleration() const {return linearAcceleration_;}
123 const cv::Mat & linearAccelerationCovariance() const {return linearAccelerationCovariance_;}
124
126 const Transform & localTransform() const {return localTransform_;}
127
137
141 bool empty() const
142 {
143 return localTransform_.isNull();
144 }
145
146private:
147 cv::Vec4d orientation_;
148 cv::Mat orientationCovariance_;
149
150 cv::Vec3d angularVelocity_;
151 cv::Mat angularVelocityCovariance_;
152
153 cv::Vec3d linearAcceleration_;
154 cv::Mat linearAccelerationCovariance_;
155
156 Transform localTransform_;
157};
158
163class IMUEvent : public UEvent
164{
165public:
168 stamp_(0.0)
169 {}
175 IMUEvent(const IMU & data, double stamp) :
176 data_(data),
177 stamp_(stamp)
178 {
179 }
181 virtual std::string getClassName() const {return "IMUEvent";}
183 const IMU & getData() const {return data_;}
185 double getStamp() const {return stamp_;}
186
187private:
188 IMU data_;
189 double stamp_;
190};
191
192}
193
194#endif /* IMU_H_ */
UEvent carrying an IMU sample and timestamp.
Definition IMU.h:164
IMUEvent()
Default-constructs an event with zero stamp.
Definition IMU.h:167
const IMU & getData() const
Definition IMU.h:183
double getStamp() const
Definition IMU.h:185
virtual std::string getClassName() const
Definition IMU.h:181
IMUEvent(const IMU &data, double stamp)
Constructs an event with IMU data and stamp.
Definition IMU.h:175
Inertial measurement sample (ROS sensor_msgs/Imu-like fields).
Definition IMU.h:57
const Transform & localTransform() const
Definition IMU.h:126
void convertToBaseFrame()
Rotate motion (and optionally orientation) into the base frame.
const cv::Vec4d & orientation() const
Definition IMU.h:111
const cv::Mat & linearAccelerationCovariance() const
Definition IMU.h:123
IMU(const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
Constructs a sample without orientation (e.g. no magnetometer / no attitude).
Definition IMU.h:97
const cv::Mat & angularVelocityCovariance() const
Definition IMU.h:118
IMU()
Default-constructs an empty sample (null localTransform()).
Definition IMU.h:60
IMU(const cv::Vec4d &orientation, const cv::Mat &orientationCovariance, const cv::Vec3d &angularVelocity, const cv::Mat &angularVelocityCovariance, const cv::Vec3d &linearAcceleration, const cv::Mat &linearAccelerationCovariance, const Transform &localTransform=Transform::getIdentity())
Constructs a sample with orientation and motion data.
Definition IMU.h:72
const cv::Vec3d & linearAcceleration() const
Definition IMU.h:121
const cv::Mat & orientationCovariance() const
Definition IMU.h:113
bool empty() const
True when localTransform() is null (placeholder / unset sample).
Definition IMU.h:141
const cv::Vec3d & angularVelocity() const
Definition IMU.h:116
Represents a 3D rigid body transformation (rotation + translation).
Definition Transform.h:53