1#ifndef SPIRIT_ROS_UTILS_H
2#define SPIRIT_ROS_UTILS_H
4#include <geometry_msgs/Point.h>
5#include <geometry_msgs/Vector3.h>
6#include <quad_utils/math_utils.h>
8#include <std_msgs/Header.h>
17inline double getROSMessageAgeInMs(std_msgs::Header header,
18 ros::Time t_compare) {
19 return (t_compare - header.stamp).toSec() * 1000.0;
27inline double getROSMessageAgeInMs(std_msgs::Header header) {
28 ros::Time t_compare = ros::Time::now();
29 return quad_utils::getROSMessageAgeInMs(header, t_compare);
37inline double getDurationSinceTime(ros::Time plan_start) {
38 return (ros::Time::now() - plan_start).toSec();
49inline void getPlanIndex(ros::Time plan_start,
double dt,
int &index,
50 double &first_element_duration) {
51 double duration = getDurationSinceTime(plan_start);
52 index = std::floor(duration / dt);
53 first_element_duration = (index + 1) * dt - duration;
63template <
class ParamType>
64inline bool loadROSParam(ros::NodeHandle nh, std::string paramName,
66 if (!nh.getParam(paramName, varName)) {
67 ROS_ERROR(
"Can't find param %s from parameter server", paramName.c_str());
82template <
class ParamType>
83inline bool loadROSParamDefault(ros::NodeHandle nh, std::string paramName,
84 ParamType &varName, ParamType defaultVal) {
85 if (!nh.getParam(paramName, varName)) {
87 ROS_INFO(
"Can't find param %s on rosparam server, loading default value.",
110void updateStateHeaders(quad_msgs::RobotState &msg, ros::Time stamp,
111 std::string frame,
int traj_index);
120void interpHeader(std_msgs::Header header_1, std_msgs::Header header_2,
121 double t_interp, std_msgs::Header &interp_header);
130void interpOdometry(quad_msgs::BodyState state_1, quad_msgs::BodyState state_2,
131 double t_interp, quad_msgs::BodyState &interp_state);
140void interpJointState(sensor_msgs::JointState state_1,
141 sensor_msgs::JointState state_2,
double t_interp,
142 sensor_msgs::JointState &interp_state);
151void interpMultiFootState(quad_msgs::MultiFootState state_1,
152 quad_msgs::MultiFootState state_2,
double t_interp,
153 quad_msgs::MultiFootState &interp_state);
162void interpGRFArray(quad_msgs::GRFArray state_1, quad_msgs::GRFArray state_2,
163 double t_interp, quad_msgs::GRFArray &interp_state);
172void interpRobotState(quad_msgs::RobotState state_1,
173 quad_msgs::RobotState state_2,
double t_interp,
174 quad_msgs::RobotState &interp_state);
185void interpRobotPlan(quad_msgs::RobotPlan msg,
double t,
186 quad_msgs::RobotState &interp_state,
187 int &interp_primitive_id, quad_msgs::GRFArray &interp_grf);
196quad_msgs::MultiFootState interpMultiFootPlanContinuous(
197 quad_msgs::MultiFootPlanContinuous msg,
double t);
219 quad_msgs::BodyState body_state,
220 quad_msgs::MultiFootState multi_foot_state,
221 sensor_msgs::JointState &joint_state);
229 quad_msgs::RobotState &state);
240 quad_msgs::BodyState body_state,
241 sensor_msgs::JointState joint_state,
242 quad_msgs::MultiFootState &multi_foot_state);
250 quad_msgs::RobotState &state);
257quad_msgs::BodyState eigenToBodyStateMsg(
const Eigen::VectorXd &state);
264Eigen::VectorXd bodyStateMsgToEigen(
const quad_msgs::BodyState &body);
273void eigenToGRFArrayMsg(Eigen::VectorXd grf_array,
274 quad_msgs::MultiFootState multi_foot_state_msg,
275 quad_msgs::GRFArray &grf_msg);
282Eigen::VectorXd grfArrayMsgToEigen(
const quad_msgs::GRFArray &grf_array_msg_);
290void footStateMsgToEigen(
const quad_msgs::FootState &foot_state_msg,
291 Eigen::Vector3d &foot_position);
299void multiFootStateMsgToEigen(
300 const quad_msgs::MultiFootState &multi_foot_state_msg,
301 Eigen::VectorXd &foot_positions);
310void multiFootStateMsgToEigen(
311 const quad_msgs::MultiFootState &multi_foot_state_msg,
312 Eigen::VectorXd &foot_positions, Eigen::VectorXd &foot_velocities);
322void multiFootStateMsgToEigen(
323 const quad_msgs::MultiFootState &multi_foot_state_msg,
324 Eigen::VectorXd &foot_positions, Eigen::VectorXd &foot_velocities,
325 Eigen::VectorXd &foot_acceleration);
334void eigenToFootStateMsg(Eigen::VectorXd foot_position,
335 Eigen::VectorXd foot_velocity,
336 quad_msgs::FootState &foot_state_msg);
346void eigenToFootStateMsg(Eigen::VectorXd foot_position,
347 Eigen::VectorXd foot_velocity,
348 Eigen::VectorXd foot_acceleration,
349 quad_msgs::FootState &foot_state_msg);
356void eigenToVector(
const Eigen::VectorXd &eigen_vec, std::vector<double> &vec);
363void vectorToEigen(
const std::vector<double> &vec, Eigen::VectorXd &eigen_vec);
370void Eigen3ToVector3Msg(
const Eigen::Vector3d &eigen_vec,
371 geometry_msgs::Vector3 &vec);
378void vector3MsgToEigen(
const geometry_msgs::Vector3 &vec,
379 Eigen::Vector3d &eigen_vec);
386void Eigen3ToPointMsg(
const Eigen::Vector3d &eigen_vec,
387 geometry_msgs::Point &vec);
394void pointMsgToEigen(
const geometry_msgs::Point &vec,
395 Eigen::Vector3d &eigen_vec);
A lightweight library for quad kinematic functions.
Definition quad_kd.h:28