3 #ifndef STIM300_TASK_TASK_HPP 4 #define STIM300_TASK_TASK_HPP 6 #include "imu_stim300/TaskBase.hpp" 9 #include <imu_stim300/Stim300Base.hpp> 10 #include <imu_stim300/Stim300RevB.hpp> 11 #include <imu_stim300/Stim300RevD.hpp> 13 #include <quater_ikf/Ikf.hpp> 15 #include <aggregator/TimestampEstimator.hpp> 16 #include <rtt/extras/FileDescriptorActivity.hpp> 21 static const int Re = 6378137;
22 static const int Rp = 6378137;
23 static const double ECC = 0.0818191908426;
24 static const double GRAVITY = 9.79766542;
25 static const double GWGS0 = 9.7803267714;
26 static const double GWGS1 = 0.00193185138639;
27 static const double EARTHW = 7.292115e-05;
33 static const double GRAVITY_MARGIN = 0.3;
49 class Task :
public TaskBase
126 Task(std::string
const& name =
"imu_stim300::Task");
133 Task(std::string
const& name, RTT::ExecutionEngine* engine);
200 Eigen::Quaternion<double>
deltaHeading(
const Eigen::Vector3d &angvelo, Eigen::Matrix4d &oldomega,
const double delta_t);
205 void outputPortSamples(imu_stim300::Stim300Base *driver, filter::Ikf<double, true, true> &myfilter, base::samples::IMUSensors &imusamples);
223 g = GWGS0*((1+GWGS1*pow(sin(latitude),2))/sqrt(1-pow(ECC,2)*pow(sin(latitude),2)));
226 g = g*pow(Re/(Re+altitude), 2);
229 std::cout<<
"[STIM300_CLASS] Theoretical gravity for this location (WGS-84 ellipsoid model): "<< g<<
" [m/s^2]\n";
253 Eigen::Vector3d v (EARTHW*cos(latitude), 0, EARTHW*sin(latitude));
259 std::cout<<
"[STIM300_CLASS] Earth Rotation:"<<v<<
"\n";
271 static Eigen::Quaternion<double>
deltaQuaternion(
const Eigen::Vector3d &angvelo,
const Eigen::Matrix4d &oldomega4,
const Eigen::Matrix4d &omega4,
const double dt)
273 Eigen::Vector4d quat;
274 quat<< 1.00, 0.00, 0.00, 0.00;
277 quat = (Eigen::Matrix<double,4,4>::Identity() +(0.75 * omega4 *dt)-(0.25 * oldomega4 * dt) -
278 ((1.0/6.0) * angvelo.squaredNorm() * pow(dt,2) * Eigen::Matrix<double, 4, 4>::Identity()) -
279 ((1.0/24.0) * omega4 * oldomega4 * pow(dt,2)) - ((1.0/48.0) * angvelo.squaredNorm() * omega4 * pow(dt,3))) * quat;
281 Eigen::Quaternion<double> deltaq;
282 deltaq.w() = quat(0);
283 deltaq.x() = quat(1);
284 deltaq.y() = quat(2);
285 deltaq.z() = quat(3);
292 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
static double GravityModel(double latitude, double altitude)
This computes the theoretical gravity value according to the WGS-84 ellipsoid Earth model...
Definition: Task.hpp:218
Definition: imu_stim300Types.hpp:9
Eigen::Quaternion< double > deltaHeading(const Eigen::Vector3d &angvelo, Eigen::Matrix4d &oldomega, const double delta_t)
Definition: Task.cpp:551
Definition: imu_stim300Types.hpp:62
int correction_numbers
Definition: Task.hpp:94
FilterConfiguration config
Definition: Task.hpp:70
void outputPortSamples(imu_stim300::Stim300Base *driver, filter::Ikf< double, true, true > &myfilter, base::samples::IMUSensors &imusamples)
Port out the values.
Definition: Task.cpp:569
Eigen::Matrix< double, 3, Eigen::Dynamic > initial_alignment_acc
Definition: Task.hpp:107
unsigned int initial_alignment_idx
Definition: Task.hpp:63
The task context provides and requires services. It uses an ExecutionEngine to perform its functions...
Definition: Task.hpp:49
void stopHook()
Definition: Task.cpp:521
filter::Ikf< double, true, true > myfilter
Definition: Task.hpp:109
Eigen::Vector3d correctionAcc
Definition: Task.hpp:103
InertialNoiseParameters gyronoise
Definition: Task.hpp:76
base::Time prev_ts
Definition: Task.hpp:92
int correction_idx
Definition: Task.hpp:94
aggregator::TimestampEstimator * timestamp_estimator
Definition: Task.hpp:100
Definition: imu_stim300Types.hpp:93
Eigen::Quaterniond deltaquat
Definition: Task.hpp:111
bool startHook()
Definition: Task.cpp:238
friend class TaskBase
Definition: Task.hpp:51
Eigen::Matrix< double, 3, Eigen::Dynamic > initial_alignment_gyro
Definition: Task.hpp:106
InertialNoiseParameters incnoise
Definition: Task.hpp:79
Definition: imu_stim300Types.hpp:35
bool configureHook()
The following lines are template definitions for the various state machine.
Definition: Task.cpp:47
base::samples::RigidBodyState orientation_out
Definition: Task.hpp:119
void cleanupHook()
Definition: Task.cpp:540
Eigen::Quaterniond attitude
Definition: Task.hpp:111
void errorHook()
Definition: Task.cpp:517
Definition: imu_stim300Types.hpp:81
void updateHook()
Definition: Task.cpp:256
imu_stim300::Stim300Base * imu_stim300_driver
Definition: Task.hpp:99
static Eigen::Quaternion< double > deltaQuaternion(const Eigen::Vector3d &angvelo, const Eigen::Matrix4d &oldomega4, const Eigen::Matrix4d &omega4, const double dt)
Delta quaternion rotation. Integration of small (given by the current angular velo) variation in atti...
Definition: Task.hpp:271
static void SubtractEarthRotation(Eigen::Vector3d &u, const Eigen::Quaterniond &q, const double latitude)
Subtract the Earth rotation from the gyroscopes readout.
Definition: Task.hpp:251
Task(std::string const &name="imu_stim300::Task")
Definition: Task.cpp:20
CONST
Definition: Task.hpp:29
AdaptiveAttitudeConfig adaptiveconfigAcc
Definition: Task.hpp:82
~Task()
Definition: Task.cpp:32
AdaptiveAttitudeConfig adaptiveconfigInc
Definition: Task.hpp:83
LocationConfiguration location
Definition: Task.hpp:86
double sampling_frequency
Definition: Task.hpp:96
Eigen::Quaterniond deltahead
Definition: Task.hpp:111
InertialNoiseParameters accnoise
Definition: Task.hpp:73
Eigen::Matrix4d oldomega
Definition: Task.hpp:113
Eigen::Vector3d correctionInc
Definition: Task.hpp:103
bool initAttitude
Definition: Task.hpp:60