rm_controllers
Loading...
Searching...
No Matches
normal.h
Go to the documentation of this file.
1//
2// Created by guanlin on 25-9-3.
3//
4
5#pragma once
6
7#include <hardware_interface/joint_command_interface.h>
8#include <control_toolbox/pid.h>
9
10#include "rm_common/filters/filters.h"
11
14
16{
17class Normal : public ModeBase
18{
19public:
20 Normal(BipedalControllerInterface* controller_, const std::vector<hardware_interface::JointHandle*>& joint_handles,
21 const std::vector<control_toolbox::Pid*>& pid_legs, control_toolbox::Pid* pid_yaw_vel,
22 control_toolbox::Pid* pid_theta_diff, control_toolbox::Pid* pid_roll,
23 control_toolbox::Pid* pid_wheel_vel_diff);
24 void execute(const ros::Time& time, const ros::Duration& period) override;
25 const char* name() const override
26 {
27 return "NORMAL";
28 }
29
30private:
31 typedef enum
32 {
33 POSITIVE = -1,
34 NEGATIVE = 1
35 } VEL_DIRECTION;
36
37 double calculateSupportForce(double F, double Tp, double leg_length, const double& leg_len_spd, double acc_z,
38 Eigen::Matrix<double, STATE_DIM, 1> x, const std::shared_ptr<ModelParams>& model_params,
39 const ros::Duration& period);
40 bool unstickDetection(const double& F_leg, const double& Tp, const double& leg_len_spd, const double& leg_length,
41 const double& acc_z, const std::shared_ptr<ModelParams>& model_params,
42 Eigen::Matrix<double, STATE_DIM, 1> x,
43 const std::shared_ptr<MovingAverageFilter<double>>& supportForceAveragePtr,
44 const ros::Duration& period);
45 std::vector<hardware_interface::JointHandle*> joint_handles_;
46 std::vector<control_toolbox::Pid*> pid_legs_;
47 control_toolbox::Pid *pid_yaw_vel_, *pid_theta_diff_, *pid_roll_, *pid_wheel_vel_diff_;
48 ros::Time lastJumpTime_{};
49
50 double pos_des_{ 0.0 }, leg_length_des{ 0.2 };
51 double unstick_threshold{ 15.0 };
52 int jump_phase_ = JumpPhase::IDLE, jumpTime_{ 0 };
53 bool x_offset_flag_{ false }, protect_flag_{ false };
54 VEL_DIRECTION vel_direction_{ VEL_DIRECTION::POSITIVE };
55 std::shared_ptr<MovingAverageFilter<double>> leftSupportForceAveragePtr_, rightSupportForceAveragePtr_;
56};
57} // namespace rm_chassis_controllers
Definition controller_interface.h:13
Definition mode_base.h:20
Definition normal.h:18
void execute(const ros::Time &time, const ros::Duration &period) override
Definition normal.cpp:29
const char * name() const override
Definition normal.h:25
Normal(BipedalControllerInterface *controller_, const std::vector< hardware_interface::JointHandle * > &joint_handles, const std::vector< control_toolbox::Pid * > &pid_legs, control_toolbox::Pid *pid_yaw_vel, control_toolbox::Pid *pid_theta_diff, control_toolbox::Pid *pid_roll, control_toolbox::Pid *pid_wheel_vel_diff)
Definition normal.cpp:10
Definition active_suspension.h:16
@ IDLE
Definition definitions.h:102