1#ifndef QUAD_MATH_UTILS_H
2#define QUAD_MATH_UTILS_H
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>
11#include <sensor_msgs/JointState.h>
12#include <tf2/LinearMath/Quaternion.h>
13#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
16#include <eigen3/Eigen/Eigen>
18#include "quad_utils/function_timer.h"
19#include "quad_utils/quad_kd.h"
31inline double lerp(
double a,
double b,
double t) {
return (a + t * (b - a)); }
38inline double wrapTo2Pi(
double val) {
39 return fmod(2 * M_PI + fmod(val, 2 * M_PI), 2 * M_PI);
47inline double wrapToPi(
double val) {
48 return -M_PI + wrapTo2Pi(val + M_PI);
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]);
78std::vector<double> interpMat(
const std::vector<double> input_vec,
79 const std::vector<std::vector<double>> output_mat,
80 const double query_point);
91Eigen::Vector3d interpVector3d(
const std::vector<double> input_vec,
92 const std::vector<Eigen::Vector3d> output_mat,
93 const double query_point);
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);
116int interpInt(
const std::vector<double> input_vec, std::vector<int> output_vec,
117 const double query_point);
126std::vector<double> movingAverageFilter(std::vector<double> data,
135std::vector<double> centralDiff(std::vector<double> data,
double dt);
142std::vector<double> unwrap(std::vector<double> data);
149Eigen::MatrixXd sdlsInv(
const Eigen::MatrixXd &jacobian);