Quad-SDK
Loading...
Searching...
No Matches
nmpc_controller.h
1#ifndef NMPC_CONTROLLER_H
2#define NMPC_CONTROLLER_H
3
4#include <math.h>
5#include <quad_msgs/GRFArray.h>
6#include <quad_msgs/LegCommand.h>
7#include <quad_msgs/MultiFootPlanDiscrete.h>
8#include <quad_msgs/RobotPlan.h>
9#include <quad_msgs/RobotState.h>
10#include <quad_utils/ros_utils.h>
11#include <ros/ros.h>
12#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
13
14#include <Eigen/Dense>
15
16#include "IpIpoptApplication.hpp"
17#include "nmpc_controller/quad_nlp.h"
18
20
24 public:
30 NMPCController(ros::NodeHandle &nh, int type);
31
47 bool computePlan(const Eigen::VectorXd &initial_state,
48 const Eigen::MatrixXd &ref_traj,
49 const std::vector<std::vector<bool>> &contact_schedule,
50 Eigen::MatrixXd &foot_positions,
51 Eigen::MatrixXd &foot_velocities,
52 Eigen::MatrixXd &state_traj, Eigen::MatrixXd &control_traj);
72 bool computeLegPlan(const Eigen::VectorXd &initial_state,
73 const Eigen::MatrixXd &ref_traj,
74 const Eigen::MatrixXd &foot_positions_body,
75 Eigen::MatrixXd &foot_positions_world,
76 Eigen::MatrixXd &foot_velocities,
77 const std::vector<std::vector<bool>> &contact_schedule,
78 const Eigen::VectorXd &ref_ground_height,
79 const double &first_element_duration, int plan_index_diff,
80 const grid_map::GridMap &terrain,
81 Eigen::MatrixXd &state_traj,
82 Eigen::MatrixXd &control_traj);
83
86 const Eigen::MatrixXd &state_traj_heuristic,
87 const Eigen::MatrixXd &control_traj_heuristic,
88 const Eigen::MatrixXd &state_traj_lifted,
89 const Eigen::MatrixXd &control_traj_lifted);
90
93
99
100 private:
102 ros::NodeHandle nh_;
103
104 int robot_id_;
105
107 std::string robot_ns_;
108
111
113 SmartPtr<quadNLP> mynlp_;
114
116 SmartPtr<IpoptApplication> app_;
117
119 std::shared_ptr<quad_utils::QuadKD> quadKD_;
120
123
126
129
130 bool allow_new_interior_complexity_;
131
132 bool is_adaptive_complexity_sparse_;
133
135 int N_, N_max_, N_min_;
136
138 const int n_body_ = 12, n_foot_ = 24, n_joints_ = 24, m_body_ = 12,
139 m_foot_ = 24;
140
142 double dt_;
143
146
149
152
155};
156
157#endif // MPC_CONTROLLER_H
NMPC controller ROS node.
Definition nmpc_controller.h:23
SmartPtr< IpoptApplication > app_
Pointer to IPOPT solver.
Definition nmpc_controller.h:116
NLPConfig config_
Config struct for storing meta parameters.
Definition nmpc_controller.h:154
bool require_init_
Whether warm start is needed.
Definition nmpc_controller.h:145
SmartPtr< quadNLP > mynlp_
Pointer to nlp formulation.
Definition nmpc_controller.h:113
void updateHorizonLength()
Definition adaptive_complexity_utils.cpp:174
bool enable_variable_horizon_
Whether enable variable horizon.
Definition nmpc_controller.h:122
int N_
Horizon length, maximal horizon length, minimal horizon length.
Definition nmpc_controller.h:135
bool computeLegPlan(const Eigen::VectorXd &initial_state, const Eigen::MatrixXd &ref_traj, const Eigen::MatrixXd &foot_positions_body, Eigen::MatrixXd &foot_positions_world, Eigen::MatrixXd &foot_velocities, const std::vector< std::vector< bool > > &contact_schedule, const Eigen::VectorXd &ref_ground_height, const double &first_element_duration, int plan_index_diff, const grid_map::GridMap &terrain, Eigen::MatrixXd &state_traj, Eigen::MatrixXd &control_traj)
Interface to Local Planner to update the contact and dynamic matrices, solve, and return the output.
Definition nmpc_controller.cpp:238
bool enable_mixed_complexity_
Whether enable mixed complexity.
Definition nmpc_controller.h:125
std::shared_ptr< quad_utils::QuadKD > quadKD_
Pointer to robot kinematics.
Definition nmpc_controller.h:119
NLPDiagnostics getNLPDiagnostics() const
Return the NLP diagnostics.
Definition nmpc_controller.h:98
NLPDiagnostics diagnostics_
Diagnostics struct for gathering metadata.
Definition nmpc_controller.h:151
std::string robot_ns_
Robot type: A1 or Spirit.
Definition nmpc_controller.h:107
bool enable_adaptive_complexity_
Whether enable adaptive complexity.
Definition nmpc_controller.h:128
const int n_body_
Number of states in different components.
Definition nmpc_controller.h:138
double update_rate_
Update rate for sending and receiving data;.
Definition nmpc_controller.h:110
Eigen::VectorXi updateAdaptiveComplexitySchedule(const Eigen::MatrixXd &state_traj_heuristic, const Eigen::MatrixXd &control_traj_heuristic, const Eigen::MatrixXd &state_traj_lifted, const Eigen::MatrixXd &control_traj_lifted)
Definition adaptive_complexity_utils.cpp:3
double dt_
Time resolution.
Definition nmpc_controller.h:142
Eigen::VectorXi adaptive_complexity_schedule_
Adaptive complexity schedule.
Definition nmpc_controller.h:148
ros::NodeHandle nh_
ROS node handler.
Definition nmpc_controller.h:102
bool computePlan(const Eigen::VectorXd &initial_state, const Eigen::MatrixXd &ref_traj, const std::vector< std::vector< bool > > &contact_schedule, Eigen::MatrixXd &foot_positions, Eigen::MatrixXd &foot_velocities, Eigen::MatrixXd &state_traj, Eigen::MatrixXd &control_traj)
Update the contact and dynamic matrices, solve, and return the output.
Definition nmpc_controller.cpp:268
Definition quad_nlp.h:57
Definition quad_nlp.h:84