Quad-SDK
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);
53
54 bool computeLegPlan(
55 const Eigen::VectorXd &initial_state, const Eigen::MatrixXd &ref_traj,
56 const Eigen::MatrixXd &foot_positions_body,
57 Eigen::MatrixXd &foot_positions_world, Eigen::MatrixXd &foot_velocities,
58 const std::vector<std::vector<bool>> &contact_schedule,
59 const Eigen::VectorXd &ref_ground_height,
60 const double &first_element_duration, const bool &same_plan_index,
61 const grid_map::GridMap &terrain, Eigen::MatrixXd &state_traj,
62 Eigen::MatrixXd &control_traj);
63
66 Eigen::MatrixXd &state_traj_lifted, Eigen::MatrixXd &control_traj_lifted);
67
70
76
77 private:
78 ros::NodeHandle nh_;
79
80 int robot_id_;
81
83 std::string robot_ns_;
84
87
88 SmartPtr<quadNLP> mynlp_;
89
90 SmartPtr<IpoptApplication> app_;
91
92 std::shared_ptr<quad_utils::QuadKD> quadKD_;
93
94 bool enable_variable_horizon_;
95
96 int N_, N_max_, N_min_;
97
98 // Number of states in different components
99 const int n_body_ = 12, n_foot_ = 24, n_joints_ = 24, n_tail_ = 4,
100 m_body_ = 12, m_foot_ = 24, m_tail_ = 2;
101
102 double dt_;
103
104 bool require_init_;
105
108
111
114};
115
116#endif // MPC_CONTROLLER_H
NMPC controller ROS node.
Definition: nmpc_controller.h:23
NLPConfig config_
Config struct for storing meta parameters.
Definition: nmpc_controller.h:113
void updateHorizonLength()
Definition: nmpc_controller.cpp:595
Eigen::VectorXi updateAdaptiveComplexitySchedule(Eigen::MatrixXd &state_traj_lifted, Eigen::MatrixXd &control_traj_lifted)
Definition: nmpc_controller.cpp:475
NLPDiagnostics getNLPDiagnostics() const
Return the NLP diagnostics.
Definition: nmpc_controller.h:75
NLPDiagnostics diagnostics_
Diagnostics struct for gathering metadata.
Definition: nmpc_controller.h:110
std::string robot_ns_
Robot type: A1 or Spirit.
Definition: nmpc_controller.h:83
NMPCController(ros::NodeHandle &nh, int type)
Constructor for MPCController.
Definition: nmpc_controller.cpp:3
double update_rate_
Update rate for sending and receiving data;.
Definition: nmpc_controller.h:86
Eigen::VectorXi adaptive_complexity_schedule_
Adaptive complexity schedule.
Definition: nmpc_controller.h:107
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:280
Definition: quad_nlp.h:57
Definition: quad_nlp.h:84