Quad-SDK
Loading...
Searching...
No Matches
leg_controller.h
1#ifndef LEG_CONTORLLER_H
2#define LEG_CONTORLLER_H
3
4#include <eigen_conversions/eigen_msg.h>
5#include <quad_msgs/GRFArray.h>
6#include <quad_msgs/LegCommand.h>
7#include <quad_msgs/LegCommandArray.h>
8#include <quad_msgs/MotorCommand.h>
9#include <quad_msgs/MultiFootPlanContinuous.h>
10#include <quad_msgs/RobotPlan.h>
11#include <quad_msgs/RobotState.h>
12#include <quad_utils/math_utils.h>
13#include <quad_utils/ros_utils.h>
14#include <robot_driver/hardware_interfaces/spirit_interface.h>
15#include <ros/ros.h>
16#include <std_msgs/UInt8.h>
17
18#include <cmath>
19#include <eigen3/Eigen/Eigen>
20#define MATH_PI 3.141592
21
23
29 public:
35
41 virtual void init(double kp, double kd);
42
48 virtual void init(const std::vector<double> &kp,
49 const std::vector<double> &kd);
50
60 virtual void init(const std::vector<double> &stance_kp,
61 const std::vector<double> &stance_kd,
62 const std::vector<double> &swing_kp,
63 const std::vector<double> &swing_kd,
64 const std::vector<double> &swing_kp_cart,
65 const std::vector<double> &swing_kd_cart);
66
72 void updateLocalPlanMsg(quad_msgs::RobotPlan::ConstPtr msg,
73 const ros::Time &t_msg);
74
79 const quad_msgs::RobotState &robot_state_msg,
80 quad_msgs::LegCommandArray &leg_command_array_msg,
81 quad_msgs::GRFArray &grf_array_msg) = 0;
82
83 inline bool overrideStateMachine() { return override_state_machine_; }
84
85 protected:
87 const int num_feet_ = 4;
88
90 std::shared_ptr<quad_utils::QuadKD> quadKD_;
91
93 std::vector<double> stance_kp_;
94 std::vector<double> stance_kd_;
95
97 std::vector<double> swing_kp_;
98 std::vector<double> swing_kd_;
99
101 std::vector<double> swing_kp_cart_;
102 std::vector<double> swing_kd_cart_;
103
105 quad_msgs::RobotPlan::ConstPtr last_local_plan_msg_;
106
109
112};
113
114#endif // LEG_CONTORLLER_H
Implements an abstract class for leg controllers.
Definition leg_controller.h:28
std::vector< double > stance_kp_
PD gain when foot is in stance.
Definition leg_controller.h:93
LegController()
Constructor for LegController.
Definition leg_controller.cpp:3
const int num_feet_
Number of feet.
Definition leg_controller.h:87
virtual bool computeLegCommandArray(const quad_msgs::RobotState &robot_state_msg, quad_msgs::LegCommandArray &leg_command_array_msg, quad_msgs::GRFArray &grf_array_msg)=0
Compute the leg command array message.
std::shared_ptr< quad_utils::QuadKD > quadKD_
QuadKD class.
Definition leg_controller.h:90
quad_msgs::RobotPlan::ConstPtr last_local_plan_msg_
Last local plan message.
Definition leg_controller.h:105
std::vector< double > swing_kp_cart_
PD gain when foot is in swing (Cartesian)
Definition leg_controller.h:101
bool override_state_machine_
Bool for whether to override the state machine.
Definition leg_controller.h:111
ros::Time last_local_plan_time_
Time of last local plan message.
Definition leg_controller.h:108
std::vector< double > swing_kp_
PD gain when foot is in swing.
Definition leg_controller.h:97
virtual void init(double kp, double kd)
Set the desired proportional and derivative gains for all legs.
Definition leg_controller.cpp:14
void updateLocalPlanMsg(quad_msgs::RobotPlan::ConstPtr msg, const ros::Time &t_msg)
Compute the leg command array message for a given current state and reference plan.
Definition leg_controller.cpp:8