Decision Module  1.0
ICRA2020 AI Challenge Northwestern Polytechnical University Aoxiang Team Strategy Code
chassis_executor.h
Go to the documentation of this file.
1 #ifndef ROBORTS_DECISION_CHASSIS_EXECUTOR_H
2 #define ROBORTS_DECISION_CHASSIS_EXECUTOR_H
3 #include <ros/ros.h>
4 #include <actionlib/client/simple_action_client.h>
5 #include <nav_msgs/Odometry.h>
6 
7 #include "roborts_msgs/GlobalPlannerAction.h"
8 #include "roborts_msgs/LocalPlannerAction.h"
9 #include "roborts_msgs/PIDControllerTowardAngularAction.h"
10 #include "roborts_msgs/TwistAccel.h"
11 #include "geometry_msgs/Twist.h"
12 
13 #include "../behavior_tree/behavior_state.h"
14 #include "pid_controller/pid_controller.h"
15 
16 #include <thread>
17 
18 namespace roborts_decision {
19 /***
20  * @brief Chassis Executor to execute different abstracted task for chassis module
21  */
23 
24  typedef actionlib::SimpleActionClient<roborts_msgs::GlobalPlannerAction> GlobalActionClient;
25  typedef actionlib::SimpleActionClient<roborts_msgs::LocalPlannerAction> LocalActionClient;
26  typedef actionlib::SimpleActionClient<roborts_msgs::PIDControllerTowardAngularAction> PIDControllerClient;
27 
28  public:
32  enum class ExcutionMode {
33  IDLE_MODE,
36  SPEED_MODE,
38  };
39 
40  enum class GoalMode {
43  };
47  explicit ChassisExecutor(const ros::NodeHandle &nh = ros::NodeHandle("~"));
48  ~ChassisExecutor() = default;
53  void Execute(const geometry_msgs::PoseStamped &goal);
59  void Execute(const geometry_msgs::PoseStamped &goal, GoalMode _goal_mode);
64  void Execute(const geometry_msgs::Twist &twist);
69  void Execute(const roborts_msgs::TwistAccel &twist_accel);
78  void Cancel();
79 
80  uint32_t GetErrorCode() const;
81 
82  private:
83 
84  ros::NodeHandle nh_;
85  /***
86  * @brief Global planner actionlib feedback callback function to send the global planner path to local planner
87  * @param global_planner_feedback Global planner actionlib feedback, which mainly consists of global planner path output
88  */
89  void GlobalPlannerFeedbackCallback(const roborts_msgs::GlobalPlannerFeedbackConstPtr &global_planner_feedback);
90  void GlobalPlannerDoneCallback(const actionlib::SimpleClientGoalState &state,
91  const roborts_msgs::GlobalPlannerResultConstPtr &global_planner_result);
92  void PIDControllerFeedbackCallback(const roborts_msgs::PIDControllerTowardAngularFeedbackConstPtr &pid_controller_toward_angular_feedback);
97 
99  actionlib::SimpleActionClient<roborts_msgs::GlobalPlannerAction> global_planner_client_;
101  actionlib::SimpleActionClient<roborts_msgs::LocalPlannerAction> local_planner_client_;
103  actionlib::SimpleActionClient<roborts_msgs::PIDControllerTowardAngularAction> pid_controller_client_;
105  roborts_msgs::GlobalPlannerGoal global_planner_goal_;
107  roborts_msgs::LocalPlannerGoal local_planner_goal_;
109  roborts_msgs::PIDControllerTowardAngularGoal pid_controller_toward_angular_goal_;
110 
112  ros::Publisher cmd_vel_pub_;
114  geometry_msgs::Twist zero_twist_;
115 
117  ros::Publisher cmd_vel_acc_pub_;
119  roborts_msgs::TwistAccel zero_twist_accel_;
120 
121  uint32_t error_code_;
122 
123  // std::thread update_thread_;
124 // bool LoadParam(const std::string &proto_file_path);
125 // double chassis_v2p_pid_kp;
126 // double chassis_v2p_pid_ki;
127 // double chassis_v2p_pid_kd;
128 // bool chassis_v2p_pid_has_threshold;
129 // double chassis_v2p_pid_threshold;
130 
131 };
132 }
133 
134 #endif //ROBORTS_DECISION_CHASSIS_EXECUTOR_H
roborts_decision::ChassisExecutor::PIDControllerClient
actionlib::SimpleActionClient< roborts_msgs::PIDControllerTowardAngularAction > PIDControllerClient
Definition: chassis_executor.h:28
roborts_decision::ChassisExecutor::cmd_vel_acc_pub_
ros::Publisher cmd_vel_acc_pub_
velocity with accel publisher in ROS
Definition: chassis_executor.h:119
roborts_decision::ChassisExecutor::GlobalPlannerDoneCallback
void GlobalPlannerDoneCallback(const actionlib::SimpleClientGoalState &state, const roborts_msgs::GlobalPlannerResultConstPtr &global_planner_result)
Definition: chassis_executor.cpp:244
roborts_decision::ChassisExecutor::ExcutionMode::GOAL_FROM_ODOM_MODE
@ GOAL_FROM_ODOM_MODE
Goal-targeted task mode using odom data.
roborts_decision::ChassisExecutor::ExcutionMode::SPEED_MODE
@ SPEED_MODE
Velocity task mode.
roborts_decision::ChassisExecutor::Execute
void Execute(const geometry_msgs::PoseStamped &goal)
Execute the goal-targeted task using global and local planner with actionlib.
Definition: chassis_executor.cpp:52
roborts_decision::ChassisExecutor::cmd_vel_pub_
ros::Publisher cmd_vel_pub_
velocity control publisher in ROS
Definition: chassis_executor.h:114
roborts_decision::ChassisExecutor::zero_twist_accel_
roborts_msgs::TwistAccel zero_twist_accel_
zero twist with acceleration in form of ROS roborts_msgs::TwistAccel
Definition: chassis_executor.h:121
roborts_decision::ChassisExecutor::GoalMode::GOAL_MODE_USE_ODOM_DATA
@ GOAL_MODE_USE_ODOM_DATA
roborts_decision::ChassisExecutor::error_code_
uint32_t error_code_
Definition: chassis_executor.h:123
roborts_decision::ChassisExecutor::execution_mode_
ExcutionMode execution_mode_
execution mode of the executor
Definition: chassis_executor.h:96
roborts_decision::ChassisExecutor::local_planner_goal_
roborts_msgs::LocalPlannerGoal local_planner_goal_
local planner actionlib goal
Definition: chassis_executor.h:109
roborts_decision::ChassisExecutor::GetErrorCode
uint32_t GetErrorCode() const
Definition: chassis_executor.cpp:240
roborts_decision::ChassisExecutor::pid_controller_toward_angular_goal_
roborts_msgs::PIDControllerTowardAngularGoal pid_controller_toward_angular_goal_
pid controller actionlib goal
Definition: chassis_executor.h:111
roborts_decision::ChassisExecutor::pid_controller_client_
actionlib::SimpleActionClient< roborts_msgs::PIDControllerTowardAngularAction > pid_controller_client_
pid controller actionlib client
Definition: chassis_executor.h:105
roborts_decision::ChassisExecutor::ExcutionMode::GOAL_USE_PLANNER_MODE
@ GOAL_USE_PLANNER_MODE
Goal-targeted task mode using global and local planner.
roborts_decision::ChassisExecutor::GlobalPlannerFeedbackCallback
void GlobalPlannerFeedbackCallback(const roborts_msgs::GlobalPlannerFeedbackConstPtr &global_planner_feedback)
Definition: chassis_executor.cpp:224
roborts_decision::ChassisExecutor::global_planner_goal_
roborts_msgs::GlobalPlannerGoal global_planner_goal_
global planner actionlib goal
Definition: chassis_executor.h:107
roborts_decision::ChassisExecutor::GoalMode::GOAL_MODE_USE_GOLBAL_LOCAL_PLANNER
@ GOAL_MODE_USE_GOLBAL_LOCAL_PLANNER
roborts_decision::ChassisExecutor::ChassisExecutor
ChassisExecutor(const ros::NodeHandle &nh=ros::NodeHandle("~"))
Constructor of ChassisExecutor.
Definition: chassis_executor.cpp:10
roborts_decision::ChassisExecutor::LocalActionClient
actionlib::SimpleActionClient< roborts_msgs::LocalPlannerAction > LocalActionClient
Definition: chassis_executor.h:27
roborts_decision::ChassisExecutor::ExcutionMode::IDLE_MODE
@ IDLE_MODE
Default idle mode with no task.
roborts_decision
Definition: behavior_test_node.h:14
roborts_decision::ChassisExecutor::~ChassisExecutor
~ChassisExecutor()=default
roborts_decision::ChassisExecutor::global_planner_client_
actionlib::SimpleActionClient< roborts_msgs::GlobalPlannerAction > global_planner_client_
global planner actionlib client
Definition: chassis_executor.h:101
roborts_decision::ChassisExecutor::execution_state_
BehaviorState execution_state_
execution state of the executor (same with behavior state)
Definition: chassis_executor.h:98
roborts_decision::ChassisExecutor::Update
BehaviorState Update()
Update the current chassis executor state.
Definition: chassis_executor.cpp:132
roborts_decision::ChassisExecutor::GlobalActionClient
actionlib::SimpleActionClient< roborts_msgs::GlobalPlannerAction > GlobalActionClient
Definition: chassis_executor.h:26
roborts_decision::ChassisExecutor::zero_twist_
geometry_msgs::Twist zero_twist_
zero twist in form of ROS geometry_msgs::Twist
Definition: chassis_executor.h:116
roborts_decision::ChassisExecutor::Cancel
void Cancel()
Cancel the current task and deal with the mode transition.
Definition: chassis_executor.cpp:196
roborts_decision::ChassisExecutor::ExcutionMode::SPEED_WITH_ACCEL_MODE
@ SPEED_WITH_ACCEL_MODE
Velocity with acceleration task mode.
roborts_decision::BehaviorState
BehaviorState
Behavior state.
Definition: behavior_state.h:11
roborts_decision::ChassisExecutor
Definition: chassis_executor.h:22
roborts_decision::ChassisExecutor::PIDControllerFeedbackCallback
void PIDControllerFeedbackCallback(const roborts_msgs::PIDControllerTowardAngularFeedbackConstPtr &pid_controller_toward_angular_feedback)
Definition: chassis_executor.cpp:236
roborts_decision::ChassisExecutor::nh_
ros::NodeHandle nh_
Definition: chassis_executor.h:86
roborts_decision::ChassisExecutor::ExcutionMode
ExcutionMode
Chassis execution mode for different tasks.
Definition: chassis_executor.h:34
roborts_decision::ChassisExecutor::local_planner_client_
actionlib::SimpleActionClient< roborts_msgs::LocalPlannerAction > local_planner_client_
local planner actionlib client
Definition: chassis_executor.h:103
roborts_decision::ChassisExecutor::GoalMode
GoalMode
Definition: chassis_executor.h:42