1#ifndef NMPC_CONTROLLER_H
2#define NMPC_CONTROLLER_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>
12#include <tf2_geometry_msgs/tf2_geometry_msgs.h>
16#include "IpIpoptApplication.hpp"
17#include "nmpc_controller/quad_nlp.h"
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);
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);
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);
116 SmartPtr<IpoptApplication>
app_;
130 bool allow_new_interior_complexity_;
132 bool is_adaptive_complexity_sparse_;
135 int N_, N_max_, N_min_;
138 const int n_body_ = 12, n_foot_ = 24, n_joints_ = 24, m_body_ = 12,
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