46 #include "follow_target.h" 64 #include <uORB/topics/geofence_result.h> 65 #include <uORB/topics/mission.h> 66 #include <uORB/topics/mission_result.h> 67 #include <uORB/topics/parameter_update.h> 68 #include <uORB/topics/position_controller_status.h> 69 #include <uORB/topics/position_setpoint_triplet.h> 70 #include <uORB/topics/vehicle_command.h> 71 #include <uORB/topics/vehicle_global_position.h> 72 #include <uORB/topics/vehicle_gps_position.h> 73 #include <uORB/topics/vehicle_land_detected.h> 74 #include <uORB/topics/vehicle_local_position.h> 80 #define NAVIGATOR_MODE_ARRAY_SIZE 11 102 static int print_usage(
const char *reason =
nullptr);
120 void publish_vehicle_cmd(vehicle_command_s *vcmd);
132 void fake_traffic(
const char *callsign,
float distance,
float direction,
float traffic_heading,
float altitude_diff,
133 float hor_velocity,
float ver_velocity);
144 void set_position_setpoint_triplet_updated() { _pos_sp_triplet_updated =
true; }
145 void set_mission_result_updated() { _mission_result_updated =
true; }
151 struct mission_result_s *get_mission_result() {
return &_mission_result; }
152 struct position_setpoint_triplet_s *get_position_setpoint_triplet() {
return &_pos_sp_triplet; }
153 struct position_setpoint_triplet_s *get_reposition_triplet() {
return &_reposition_triplet; }
154 struct position_setpoint_triplet_s *get_takeoff_triplet() {
return &_takeoff_triplet; }
155 struct vehicle_global_position_s *get_global_position() {
return &_global_pos; }
156 struct vehicle_land_detected_s *get_land_detected() {
return &_land_detected; }
157 struct vehicle_local_position_s *get_local_position() {
return &_local_pos; }
158 struct vehicle_status_s *get_vstatus() {
return &_vstatus; }
161 const vehicle_roi_s &get_vroi() {
return _vroi; }
162 void reset_vroi() { _vroi = {}; }
164 bool home_alt_valid() {
return (_home_pos.timestamp > 0 && _home_pos.valid_alt); }
165 bool home_position_valid() {
return (_home_pos.timestamp > 0 && _home_pos.valid_alt && _home_pos.valid_hpos); }
167 int get_mission_sub() {
return _mission_sub; }
169 Geofence &get_geofence() {
return _geofence; }
171 bool get_can_loiter_at_sp() {
return _can_loiter_at_sp; }
172 float get_loiter_radius() {
return _param_nav_loiter_rad.get(); }
262 orb_advert_t *get_mavlink_log_pub() {
return &_mavlink_log_pub; }
264 void increment_mission_instance_count() { _mission_result.instance_count++; }
266 void set_mission_failure(
const char *reason);
269 bool is_planned_mission()
const {
return _navigation_mode == &_mission; }
270 bool on_mission_landing() {
return _mission.landing(); }
271 bool start_mission_landing() {
return _mission.land_start(); }
272 bool mission_start_land_available() {
return _mission.get_land_start_available(); }
275 bool mission_landing_required() {
return _rtl.rtl_type() == RTL::RTL_LAND; }
276 int rtl_type() {
return _rtl.rtl_type(); }
277 bool in_rtl_state()
const {
return _vstatus.nav_state == vehicle_status_s::NAVIGATION_STATE_AUTO_RTL; }
279 bool abort_landing();
282 float get_loiter_min_alt()
const {
return _param_mis_ltrmin_alt.get(); }
283 float get_takeoff_min_alt()
const {
return _param_mis_takeoff_alt.get(); }
284 bool get_takeoff_required()
const {
return _param_mis_takeoff_req.get(); }
285 float get_yaw_timeout()
const {
return _param_mis_yaw_tmt.get(); }
286 float get_yaw_threshold()
const {
return _param_mis_yaw_err.get(); }
288 float get_vtol_back_trans_deceleration()
const {
return _param_back_trans_dec_mss; }
289 float get_vtol_reverse_delay()
const {
return _param_reverse_delay; }
298 _param_nav_fw_alt_rad,
300 _param_nav_fw_altl_rad,
302 _param_nav_mc_alt_rad,
310 (ParamBool<px4::params::MIS_TAKEOFF_REQ>) _param_mis_takeoff_req,
315 int _global_pos_sub{-1};
316 int _gps_pos_sub{-1};
317 int _home_pos_sub{-1};
318 int _land_detected_sub{-1};
319 int _local_pos_sub{-1};
320 int _mission_sub{-1};
321 int _param_update_sub{-1};
322 int _pos_ctrl_landing_status_sub{-1};
323 int _traffic_sub{-1};
324 int _vehicle_command_sub{-1};
325 int _vstatus_sub{-1};
336 home_position_s _home_pos{};
337 mission_result_s _mission_result{};
338 vehicle_global_position_s _global_pos{};
339 vehicle_gps_position_s _gps_pos{};
340 vehicle_land_detected_s _land_detected{};
341 vehicle_local_position_s _local_pos{};
342 vehicle_status_s _vstatus{};
346 uint8_t _previous_nav_state{};
349 geofence_result_s _geofence_result{};
350 position_setpoint_triplet_s _pos_sp_triplet{};
351 position_setpoint_triplet_s _reposition_triplet{};
352 position_setpoint_triplet_s _takeoff_triplet{};
353 vehicle_roi_s _vroi{};
358 bool _geofence_violation_warning_sent{
false};
360 bool _can_loiter_at_sp{
false};
361 bool _pos_sp_triplet_updated{
false};
362 bool _pos_sp_triplet_published_invalid_once{
false};
363 bool _mission_result_updated{
false};
382 float _param_back_trans_dec_mss{0.f};
383 float _param_reverse_delay{0.f};
385 float _mission_cruising_speed_mc{-1.0f};
386 float _mission_cruising_speed_fw{-1.0f};
387 float _mission_throttle{-1.0f};
390 void global_position_update();
391 void gps_position_update();
392 void home_position_update(
bool force =
false);
393 void local_position_update();
394 void params_update();
395 void vehicle_land_detected_update();
396 void vehicle_status_update();
401 void publish_position_setpoint_triplet();
406 void publish_mission_result();
408 void publish_vehicle_command_ack(
const vehicle_command_s &cmd, uint8_t result);
#define PARAM_INVALID
Handle returned when a parameter cannot be found.
Definition: param.h:103
Definition: navigator_mode.h:46
Definition: px4_param.h:313
void set_cruising_speed(float speed=-1.0f)
Set the cruising speed.
Definition: navigator_main.cpp:926
float get_default_altitude_acceptance_radius()
Get the default altitude acceptance radius (i.e.
Definition: navigator_main.cpp:869
#define ORB_ID(_name)
Generates a pointer to the uORB metadata structure for a given topic.
Definition: uORB.h:87
struct home_position_s * get_home_position()
Getters.
Definition: navigator.h:150
Definition of a mission consisting of mission items.
Helper class to do precision landing with a landing target.
#define NAVIGATOR_MODE_ARRAY_SIZE
Number of navigation modes that need on_active/on_inactive calls.
Definition: navigator.h:80
Helper class to land at the current position.
int print_status() override
Definition: navigator_main.cpp:827
static int print_usage(const char *reason=nullptr)
Definition: navigator_main.cpp:1188
Navigator mode to access missions.
static Navigator * instantiate(int argc, char *argv[])
Definition: navigator_main.cpp:815
static int task_spawn(int argc, char *argv[])
Definition: navigator_main.cpp:798
void fake_traffic(const char *callsign, float distance, float direction, float traffic_heading, float altitude_diff, float hor_velocity, float ver_velocity)
Generate an artificial traffic indication.
Definition: navigator_main.cpp:1009
__BEGIN_DECLS typedef void * orb_advert_t
ORB topic advertiser handle.
Definition: uORB.h:134
Definition: datalinkloss.h:49
float get_cruising_speed()
Get the cruising speed.
Definition: navigator_main.cpp:904
Helper class for Data Link Loss Mode acording to the OBC rules.
void check_traffic()
Check nearby traffic for potential collisions.
Definition: navigator_main.cpp:1045
float get_default_acceptance_radius()
Returns the default acceptance radius defined by the parameter.
Definition: navigator_main.cpp:857
Provides functions for handling the geofence.
float get_altitude_acceptance_radius()
Get the altitude acceptance radius.
Definition: navigator_main.cpp:889
static int custom_command(int argc, char *argv[])
Definition: navigator_main.cpp:1219
API for the uORB lightweight object broker.
Definition: px4_param.h:318
Helper class for RC Loss Mode acording to the OBC rules.
C++ base class for modules/classes using configuration parameters.
Definition: px4_module_params.h:46
void set_cruising_throttle(float throttle=-1.0f)
Set the target throttle.
Definition: navigator.h:241
float get_yaw_acceptance(float mission_item_yaw)
Get the yaw acceptance given the current mission item.
Definition: navigator_main.cpp:984
float get_cruising_throttle()
Get the target throttle.
Definition: navigator_main.cpp:953
Helper class for a fixedwing engine failure mode.
Definition: precland.h:66
Helper class to take off.
Definition: navigator.h:83
Definition: enginefailure.h:47
void load_fence_from_file(const char *filename)
Load fence from file.
Definition: navigator_main.cpp:1000
Base class for different modes in navigator.
Helper class for Data Link Loss Mode according to the OBC rules.
PrecLand * get_precland()
allow others, e.g.
Definition: navigator.h:159
Definition: gpsfailure.h:48
float get_acceptance_radius()
Get the acceptance radius.
Definition: navigator_main.cpp:863
void set_can_loiter_at_sp(bool can_loiter)
Setters.
Definition: navigator.h:143
void reset_triplets()
Set triplets to invalid.
Definition: navigator_main.cpp:944
void run() override
Definition: navigator_main.cpp:208
void publish_geofence_result()
Publish the geofence result.
Definition: navigator_main.cpp:1269
void reset_cruising_speed()
Reset cruising speed to default values.
Definition: navigator_main.cpp:937
uint32_t param_t
Parameter handle.
Definition: param.h:98
Definition: follow_target.h:52
Definition: geofence.h:59
Performance measuring tools.