43
43
44
44
#include < ros/callback_queue.h>
45
45
#include < ros/ros.h>
46
- #include " terrain_planner/terrain_ompl_rrt.h"
47
46
48
47
#include < geographic_msgs/GeoPointStamped.h>
49
48
#include < geometry_msgs/PoseStamped.h>
52
51
#include < mavros_msgs/State.h>
53
52
#include < mavros_msgs/WaypointList.h>
54
53
#include < nav_msgs/Path.h>
54
+ #include < sensor_msgs/NavSatFix.h>
55
55
#include < visualization_msgs/Marker.h>
56
56
57
57
#include < Eigen/Dense>
61
61
62
62
#include " terrain_planner/common.h"
63
63
#include " terrain_planner/maneuver_library.h"
64
- // #include "terrain_planner/mcts_planner.h"
65
- #include " terrain_planner/primitive_planner.h"
64
+ #include " terrain_planner/terrain_ompl_rrt.h"
66
65
#include " terrain_planner/visualization.h"
67
66
67
+ #include < planner_msgs/SetPlannerState.h>
68
68
#include < planner_msgs/SetService.h>
69
69
#include < planner_msgs/SetString.h>
70
70
#include < planner_msgs/SetVector3.h>
73
73
#include < GeographicLib/LocalCartesian.hpp>
74
74
75
75
#include < dynamic_reconfigure/server.h>
76
- #include " terrain_navigation_ros/HeightRateTuningConfig.h"
76
+ // #include "terrain_navigation_ros/HeightRateTuningConfig.h"
77
77
78
- enum class SETPOINT_MODE { STATE, PATH };
78
+ enum class PLANNER_MODE { ACTIVE_MAPPING, EMERGENCY_ABORT, EXHAUSTIVE, GLOBAL, GLOBAL_REPLANNING, RANDOM, RETURN };
79
79
80
- enum class PLANNER_MODE { EXHAUSTIVE, MCTS, GLOBAL, GLOBAL_REPLANNING, RANDOM };
80
+ enum class PLANNER_STATE { HOLD = 1 , NAVIGATE = 2 , ROLLOUT = 3 , ABORT = 4 , RETURN = 5 };
81
81
82
82
class TerrainPlanner {
83
83
public:
@@ -88,9 +88,11 @@ class TerrainPlanner {
88
88
private:
89
89
void cmdloopCallback (const ros::TimerEvent &event);
90
90
void statusloopCallback (const ros::TimerEvent &event);
91
+ void plannerloopCallback (const ros::TimerEvent &event);
91
92
void publishTrajectory (std::vector<Eigen::Vector3d> trajectory);
92
93
// States from vehicle
93
- void mavposeCallback (const geometry_msgs::PoseStamped &msg);
94
+ void mavLocalPoseCallback (const geometry_msgs::PoseStamped &msg);
95
+ void mavGlobalPoseCallback (const sensor_msgs::NavSatFix &msg);
94
96
void mavtwistCallback (const geometry_msgs::TwistStamped &msg);
95
97
void mavstateCallback (const mavros_msgs::State::ConstPtr &msg);
96
98
void mavGlobalOriginCallback (const geographic_msgs::GeoPointStampedConstPtr &msg);
@@ -103,9 +105,11 @@ class TerrainPlanner {
103
105
bool setCurrentSegmentCallback (planner_msgs::SetService::Request &req, planner_msgs::SetService::Response &res);
104
106
bool setStartLoiterCallback (planner_msgs::SetService::Request &req, planner_msgs::SetService::Response &res);
105
107
bool setPlanningCallback (planner_msgs::SetVector3::Request &req, planner_msgs::SetVector3::Response &res);
108
+ bool setPlannerStateCallback (planner_msgs::SetPlannerState::Request &req,
109
+ planner_msgs::SetPlannerState::Response &res);
106
110
bool setPathCallback (planner_msgs::SetVector3::Request &req, planner_msgs::SetVector3::Response &res);
107
111
108
- void MapPublishOnce ();
112
+ void MapPublishOnce (const ros::Publisher &pub, const grid_map::GridMap &map );
109
113
void publishPositionHistory (ros::Publisher &pub, const Eigen::Vector3d &position,
110
114
std::vector<geometry_msgs::PoseStamped> &history_vector);
111
115
void publishPositionSetpoints (const ros::Publisher &pub, const Eigen::Vector3d &position,
@@ -117,20 +121,45 @@ class TerrainPlanner {
117
121
void publishVelocityMarker (const ros::Publisher &pub, const Eigen::Vector3d &position,
118
122
const Eigen::Vector3d &velocity);
119
123
void publishPathSetpoints (const Eigen::Vector3d &position, const Eigen::Vector3d &velocity);
120
- void publishVehiclePose (const Eigen::Vector3d &position, const Eigen::Vector4d &attitude);
121
- void publishViewpoints (std::vector<ViewPoint> &viewpoint_vector);
122
124
void publishPathSegments (ros::Publisher &pub, Path &trajectory);
123
125
void publishGoal (const ros::Publisher &pub, const Eigen::Vector3d &position, const double radius,
124
126
Eigen::Vector3d color = Eigen::Vector3d(1.0 , 1.0 , 0.0 ), std::string name_space = "goal");
127
+ void publishRallyPoints (const ros::Publisher &pub, const std::vector<Eigen::Vector3d> &positions, const double radius,
128
+ Eigen::Vector3d color = Eigen::Vector3d(1.0 , 1.0 , 0.0 ),
129
+ std::string name_space = "rallypoints");
130
+ visualization_msgs::Marker getGoalMarker (const int id, const Eigen::Vector3d &position, const double radius,
131
+ const Eigen::Vector3d color);
125
132
void generateCircle (const Eigen::Vector3d end_position, const Eigen::Vector3d end_velocity,
126
133
const Eigen::Vector3d center_pos, PathSegment &trajectory);
127
- void dynamicReconfigureCallback (terrain_navigation_ros::HeightRateTuningConfig &config, uint32_t level);
134
+ // void dynamicReconfigureCallback(terrain_navigation_ros::HeightRateTuningConfig &config, uint32_t level);
135
+
136
+ void printPlannerState (PLANNER_STATE state) {
137
+ switch (state) {
138
+ case PLANNER_STATE::HOLD: // Fallthrough
139
+ std::cout << " PLANNER_STATE::HOLD" << std::endl;
140
+ break ;
141
+ case PLANNER_STATE::NAVIGATE: // Fallthrough
142
+ std::cout << " PLANNER_STATE::NAVIGATE" << std::endl;
143
+ break ;
144
+ case PLANNER_STATE::ROLLOUT:
145
+ std::cout << " PLANNER_STATE::ROLLOUT" << std::endl;
146
+ break ;
147
+ case PLANNER_STATE::ABORT:
148
+ std::cout << " PLANNER_STATE::ABORT" << std::endl;
149
+ break ;
150
+ }
151
+ }
152
+
153
+ Eigen::Vector4d rpy2quaternion (double roll, double pitch, double yaw);
154
+
155
+ PLANNER_STATE finiteStateMachine (const PLANNER_STATE current_state, const PLANNER_STATE query_state);
128
156
129
157
ros::NodeHandle nh_;
130
158
ros::NodeHandle nh_private_;
131
159
ros::Publisher vehicle_path_pub_;
132
160
ros::Publisher grid_map_pub_;
133
161
ros::Publisher vehicle_pose_pub_;
162
+ ros::Publisher camera_pose_pub_;
134
163
ros::Publisher posehistory_pub_;
135
164
ros::Publisher referencehistory_pub_;
136
165
ros::Publisher position_setpoint_pub_;
@@ -139,13 +168,16 @@ class TerrainPlanner {
139
168
ros::Publisher path_target_pub_;
140
169
ros::Publisher planner_status_pub_;
141
170
ros::Publisher goal_pub_;
171
+ ros::Publisher rallypoint_pub_;
142
172
ros::Publisher candidate_goal_pub_;
143
173
ros::Publisher candidate_start_pub_;
144
174
ros::Publisher viewpoint_pub_;
175
+ ros::Publisher planned_viewpoint_pub_;
145
176
ros::Publisher tree_pub_;
146
177
ros::Publisher vehicle_velocity_pub_;
147
178
ros::Publisher path_segment_pub_;
148
- ros::Subscriber mavpose_sub_;
179
+ ros::Subscriber mavlocalpose_sub_;
180
+ ros::Subscriber mavglobalpose_sub_;
149
181
ros::Subscriber mavtwist_sub_;
150
182
ros::Subscriber mavstate_sub_;
151
183
ros::Subscriber mavmission_sub_;
@@ -160,42 +192,49 @@ class TerrainPlanner {
160
192
ros::ServiceServer setplanning_serviceserver_;
161
193
ros::ServiceServer updatepath_serviceserver_;
162
194
ros::ServiceServer setcurrentsegment_serviceserver_;
195
+ ros::ServiceServer setplannerstate_service_server_;
163
196
ros::ServiceClient msginterval_serviceclient_;
164
197
165
- ros::Timer cmdloop_timer_, statusloop_timer_;
198
+ ros::Timer cmdloop_timer_, statusloop_timer_, plannerloop_timer_ ;
166
199
ros::Time plan_time_;
167
200
ros::Time last_triggered_time_;
168
201
Eigen::Vector3d goal_pos_{Eigen::Vector3d (0.0 , 0.0 , 20.0 )};
169
202
Eigen::Vector3d start_pos_{Eigen::Vector3d (0.0 , 0.0 , 20.0 )};
203
+ Eigen::Vector3d home_position_{Eigen::Vector3d (0.0 , 0.0 , 20.0 )};
204
+ double home_position_radius_{0.0 };
170
205
Eigen::Vector3d tracking_error_{Eigen::Vector3d::Zero ()};
206
+ ros::CallbackQueue plannerloop_queue_;
171
207
ros::CallbackQueue statusloop_queue_;
172
208
ros::CallbackQueue cmdloop_queue_;
209
+ std::unique_ptr<ros::AsyncSpinner> plannerloop_spinner_;
173
210
std::unique_ptr<ros::AsyncSpinner> statusloop_spinner_;
174
211
std::unique_ptr<ros::AsyncSpinner> cmdloop_spinner_;
175
212
176
- dynamic_reconfigure::Server<terrain_navigation_ros::HeightRateTuningConfig> server;
177
- dynamic_reconfigure::Server<terrain_navigation_ros::HeightRateTuningConfig>::CallbackType f;
213
+ // dynamic_reconfigure::Server<terrain_navigation_ros::HeightRateTuningConfig> server;
214
+ // dynamic_reconfigure::Server<terrain_navigation_ros::HeightRateTuningConfig>::CallbackType f;
178
215
179
- SETPOINT_MODE setpoint_mode_{SETPOINT_MODE::STATE};
180
216
PLANNER_MODE planner_mode_{PLANNER_MODE::EXHAUSTIVE};
217
+ PLANNER_STATE planner_state_{PLANNER_STATE::HOLD};
218
+ PLANNER_STATE query_planner_state_{PLANNER_STATE::HOLD};
181
219
182
220
std::shared_ptr<ManeuverLibrary> maneuver_library_;
183
- // std::shared_ptr<MctsPlanner> mcts_planner_;
184
- std::shared_ptr<PrimitivePlanner> primitive_planner_;
185
221
std::shared_ptr<TerrainMap> terrain_map_;
222
+
186
223
std::shared_ptr<fw_planning::spaces::DubinsAirplaneStateSpace> dubins_state_space_;
187
224
// std::shared_ptr<ViewUtilityMap> viewutility_map_;
188
225
std::shared_ptr<TerrainOmplRrt> global_planner_;
189
226
std::shared_ptr<Profiler> planner_profiler_;
190
227
Path reference_primitive_;
191
228
Path candidate_primitive_;
229
+ Path rollout_primitive_;
192
230
mavros_msgs::State current_state_;
193
231
std::optional<GeographicLib::LocalCartesian> enu_;
194
232
195
233
std::mutex goal_mutex_; // protects g_i
196
234
197
235
std::vector<Eigen::Vector3d> vehicle_position_history_;
198
236
std::vector<ViewPoint> added_viewpoint_list;
237
+ std::vector<ViewPoint> planned_viewpoint_list;
199
238
std::vector<geometry_msgs::PoseStamped> posehistory_vector_;
200
239
std::vector<geometry_msgs::PoseStamped> referencehistory_vector_;
201
240
std::vector<ViewPoint> viewpoints_;
@@ -204,11 +243,14 @@ class TerrainPlanner {
204
243
Eigen::Vector4d vehicle_attitude_{Eigen::Vector4d (1.0 , 0.0 , 0.0 , 0.0 )};
205
244
Eigen::Vector3d last_planning_position_{Eigen::Vector3d::Zero ()};
206
245
Eigen::Vector3d previous_start_position_{Eigen::Vector3d::Zero ()};
246
+ Eigen::Vector3d previous_return_start_position_{Eigen::Vector3d::Zero ()};
207
247
Eigen::Vector3d mission_loiter_center_{Eigen::Vector3d::Zero ()};
208
248
249
+ std::vector<Eigen::Vector3d> rally_points;
250
+
209
251
// Altitude tracking loop parameters
210
252
// / TODO: This needs to be handed over to TECS
211
- double K_z_{0.5 };
253
+ double K_z_{2.0 };
212
254
double cruise_speed_{20.0 };
213
255
double max_climb_rate_control_{5.0 };
214
256
@@ -229,6 +271,8 @@ class TerrainPlanner {
229
271
bool map_initialized_{false };
230
272
bool planner_enabled_{false };
231
273
bool problem_updated_{true };
274
+ bool found_solution_{false };
275
+ bool found_return_solution_{false };
232
276
};
233
277
234
278
#endif
0 commit comments