Quad-SDK
All Classes Functions Variables Pages
math_utils.h
1#ifndef QUAD_MATH_UTILS_H
2#define QUAD_MATH_UTILS_H
3
4// Just include ros to access a bunch of other functions, fuck good code
5#include <nav_msgs/Odometry.h>
6#include <quad_msgs/MultiFootPlanContinuous.h>
7#include <quad_msgs/MultiFootState.h>
8#include <quad_msgs/RobotPlan.h>
9#include <quad_msgs/RobotState.h>
10#include <ros/ros.h>
11#include <sensor_msgs/JointState.h>
12#include <tf2/LinearMath/Quaternion.h>
13#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
14
15#include <cmath>
16#include <eigen3/Eigen/Eigen>
17
18#include "quad_utils/function_timer.h"
19#include "quad_utils/quad_kd.h"
20
21namespace math_utils {
22
31inline double lerp(double a, double b, double t) { return (a + t * (b - a)); }
32
38inline double wrapTo2Pi(double val) {
39 return fmod(2 * M_PI + fmod(val, 2 * M_PI), 2 * M_PI);
40}
41
47inline double wrapToPi(double val) {
48 return -M_PI + wrapTo2Pi(val + M_PI);
49 // double new_val = fmod(val + M_PI, 2*M_PI);
50 // while (new_val < 0) {
51 // new_val += 2*M_PI;
52 // }
53 // return new_val-M_PI;
54}
55
61inline std::vector<double> wrapToPi(std::vector<double> data) {
62 std::vector<double> data_wrapped = data;
63 for (int i = 0; i < data.size(); i++) {
64 data_wrapped[i] = wrapToPi(data[i]);
65 }
66 return data_wrapped;
67}
68
78std::vector<double> interpMat(const std::vector<double> input_vec,
79 const std::vector<std::vector<double>> output_mat,
80 const double query_point);
81
91Eigen::Vector3d interpVector3d(const std::vector<double> input_vec,
92 const std::vector<Eigen::Vector3d> output_mat,
93 const double query_point);
94
104std::vector<Eigen::Vector3d> interpMatVector3d(
105 const std::vector<double> input_vec,
106 const std::vector<std::vector<Eigen::Vector3d>> output_mat,
107 const double query_point);
108
116int interpInt(const std::vector<double> input_vec, std::vector<int> output_vec,
117 const double query_point);
118
126std::vector<double> movingAverageFilter(std::vector<double> data,
127 int window_size);
128
135std::vector<double> centralDiff(std::vector<double> data, double dt);
136
142std::vector<double> unwrap(std::vector<double> data);
143
149Eigen::MatrixXd sdlsInv(const Eigen::MatrixXd &jacobian);
150} // namespace math_utils
151
152#endif // QUAD_MATH_UTILS_H