Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Treat UAVS diffrently from manned aviation #13159

Merged
merged 22 commits into from
Jan 17, 2020
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
0627f5d
ready 4 test
LowOrbitIonCannon Oct 11, 2019
792e182
Parameters and changes
LowOrbitIonCannon Nov 8, 2019
a37b245
Parameter for Unmanned and Manned Aviation Avoid Distance
LowOrbitIonCannon Nov 11, 2019
d80c566
Parameters Updated
LowOrbitIonCannon Nov 11, 2019
46683ed
Referenc ADSB_EMITER_TYPE Variable,
LowOrbitIonCannon Nov 12, 2019
eec96b5
Fixed Compiler Error by -Wno-cast-align
LowOrbitIonCannon Nov 13, 2019
2d6e930
Added Testing functionality,
LowOrbitIonCannon Nov 20, 2019
2df30d3
Added NAV_TRAFF_AVOID Hold and Landmode
LowOrbitIonCannon Nov 21, 2019
e52acc5
Added ADSB parameter to Transponder_report
LowOrbitIonCannon Nov 25, 2019
2bb5cd3
Fixed aligment issue from float to double by converting to INT.
LowOrbitIonCannon Nov 26, 2019
9191348
added Seperation as a value to Warning
LowOrbitIonCannon Nov 26, 2019
a3e580b
added Land Mode
LowOrbitIonCannon Nov 29, 2019
717d2fd
testing Traffic avoidance, distance and modes
LowOrbitIonCannon Nov 29, 2019
9632efb
Changed Warning messages and Merged HoldPosition and Collision Avoidance
LowOrbitIonCannon Dec 2, 2019
3c8e440
Merge branch 'testing' into r4t
LowOrbitIonCannon Dec 2, 2019
2d7ecfd
ignore selfsend UTM msg.
LowOrbitIonCannon Dec 9, 2019
4d5460d
Changed mavlink reciever to ignore selfüublished messages
LowOrbitIonCannon Dec 10, 2019
8afe944
Fixed boards with no GUID giving build Errors
LowOrbitIonCannon Dec 11, 2019
b9d1137
Reduced size to fit into px4-fmu-v2
LowOrbitIonCannon Dec 11, 2019
71d4a81
Merge branch 'master' into r4t
LowOrbitIonCannon Dec 11, 2019
c217c6a
Merge branch 'master' into r4t
LowOrbitIonCannon Jan 9, 2020
cbce64e
Merge branch 'master' into r4t
dagar Jan 17, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/modules/mavlink/mavlink_receiver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2229,7 +2229,7 @@ MavlinkReceiver::handle_message_utm_global_position(mavlink_message_t *msg)
// For now, set it to all 0s. This is a null-terminated string, so not explicitly giving it a null
// terminator could cause problems.
memset(&t.callsign[0], 0, sizeof(t.callsign));
t.emitter_type = ADSB_EMITTER_TYPE_NO_INFO; // TODO: Is this correct?
t.emitter_type = ADSB_EMITTER_TYPE_UAV; // TODO: Is this correct?x2?

// The Mavlink docs do not specify what to do if tslc (time since last communication) is out of range of
// an 8-bit int, or if this is the first communication.
Expand Down
4 changes: 4 additions & 0 deletions src/modules/navigator/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@
px4_add_module(
MODULE modules__navigator
MAIN navigator
COMPILE_FLAGS
-Wno-cast-align # TODO: fix and enable
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is how it is Implemented in the CMakeLists.txt off mavlink_receiver.cpp.
This will need fixfin in the future

INCLUDES
${PX4_SOURCE_DIR}/mavlink/include/mavlink
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't want to directly access mavlink outside of the mavlink module.

SRCS
navigator_main.cpp
navigator_mode.cpp
Expand Down
6 changes: 5 additions & 1 deletion src/modules/navigator/navigator.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,10 @@ class Navigator : public ModuleBase<Navigator>, public ModuleParams
* @param altitude_diff Altitude difference, positive is up
* @param hor_velocity Horizontal velocity of traffic, in m/s
* @param ver_velocity Vertical velocity of traffic, in m/s
* @param emitter_type, Type of vehicle, as a number
*/
void fake_traffic(const char *callsign, float distance, float direction, float traffic_heading, float altitude_diff,
float hor_velocity, float ver_velocity);
float hor_velocity, float ver_velocity, int emitter_type);

/**
* Check nearby traffic for potential collisions
Expand Down Expand Up @@ -258,6 +259,7 @@ class Navigator : public ModuleBase<Navigator>, public ModuleParams
*/
float get_yaw_acceptance(float mission_item_yaw);


orb_advert_t *get_mavlink_log_pub() { return &_mavlink_log_pub; }

void increment_mission_instance_count() { _mission_result.instance_count++; }
Expand Down Expand Up @@ -301,6 +303,8 @@ class Navigator : public ModuleBase<Navigator>, public ModuleParams
_param_nav_mc_alt_rad, /**< acceptance radius for multicopter altitude */
(ParamInt<px4::params::NAV_FORCE_VT>) _param_nav_force_vt, /**< acceptance radius for multicopter altitude */
(ParamInt<px4::params::NAV_TRAFF_AVOID>) _param_nav_traff_avoid, /**< avoiding other aircraft is enabled */
(ParamFloat<px4::params::NAV_TRAFF_A_RADU>) _param_nav_traff_a_radu, /**< avoidance Distance Unmanned*/
(ParamFloat<px4::params::NAV_TRAFF_A_RADM>) _param_nav_traff_a_radm, /**< avoidance Distance Manned*/

// non-navigator parameters
// Mission (MIS_*)
Expand Down
49 changes: 35 additions & 14 deletions src/modules/navigator/navigator_main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@
#include <px4_posix.h>
#include <px4_tasks.h>
#include <systemlib/mavlink_log.h>
#include <v2.0/common/mavlink.h>

/**
* navigator app start / stop handling function
Expand Down Expand Up @@ -894,7 +895,7 @@ Navigator::load_fence_from_file(const char *filename)
*
*/
void Navigator::fake_traffic(const char *callsign, float distance, float direction, float traffic_heading,
float altitude_diff, float hor_velocity, float ver_velocity)
float altitude_diff, float hor_velocity, float ver_velocity, int emitter_type)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
float altitude_diff, float hor_velocity, float ver_velocity, int emitter_type)
float altitude_diff, float hor_velocity, float ver_velocity, uint16_t emitter_type)

Type should match the size used in the message definition.

{
double lat, lon;
waypoint_from_heading_and_distance(get_global_position()->lat, get_global_position()->lon, direction, distance, &lat,
Expand All @@ -917,7 +918,7 @@ void Navigator::fake_traffic(const char *callsign, float distance, float directi
tr.ver_velocity = ver_velocity; //-vel_d; // The vertical velocity in m/s, positive is up
strncpy(&tr.callsign[0], callsign, sizeof(tr.callsign) - 1);
tr.callsign[sizeof(tr.callsign) - 1] = 0;
tr.emitter_type = 0; // Type from ADSB_EMITTER_TYPE enum
tr.emitter_type = emitter_type; // Type from ADSB_EMITTER_TYPE enum
tr.tslc = 2; // Time since last communication in seconds
tr.flags = transponder_report_s::PX4_ADSB_FLAGS_VALID_COORDS | transponder_report_s::PX4_ADSB_FLAGS_VALID_HEADING |
transponder_report_s::PX4_ADSB_FLAGS_VALID_VELOCITY |
Expand All @@ -943,8 +944,11 @@ void Navigator::check_traffic()

bool changed = _traffic_sub.updated();

float horizontal_separation = 500;
float vertical_separation = 500;

float NAVTrafficAvoidUnmanned = _param_nav_traff_a_radu.get();
float NAVTrafficAvoidManned = _param_nav_traff_a_radm.get();
float horizontal_separation = NAVTrafficAvoidManned;
float vertical_separation = NAVTrafficAvoidManned;

while (changed) {

Expand All @@ -960,6 +964,13 @@ void Navigator::check_traffic()
continue;
}


//Manned/Unmanned Vehicle Seperation Distance
if (tr.emitter_type == ADSB_EMITTER_TYPE_UAV) {
horizontal_separation = NAVTrafficAvoidUnmanned;
vertical_separation = NAVTrafficAvoidUnmanned;
}

float d_hor, d_vert;
get_distance_to_point_global_wgs84(lat, lon, alt,
tr.lat, tr.lon, tr.altitude, &d_hor, &d_vert);
Expand Down Expand Up @@ -994,28 +1005,37 @@ void Navigator::check_traffic()

// direction of traffic in human-readable 0..360 degree in earth frame
int traffic_direction = math::degrees(tr.heading) + 180;
double traffic_seperation = fabsf(cr.distance);

switch (_param_nav_traff_avoid.get()) {

case 0: {
/* ignore */
PX4_WARN("TRAFFIC %s, hdg: %d", tr.flags & transponder_report_s::PX4_ADSB_FLAGS_VALID_CALLSIGN ? tr.callsign :
PX4_WARN("TRAFFIC %s, hdg: %d, hrzl dst:: %f, type: %d",
tr.flags & transponder_report_s::PX4_ADSB_FLAGS_VALID_CALLSIGN ? tr.callsign :
"unknown",
traffic_direction);
traffic_direction,
traffic_seperation,
tr.emitter_type);
break;
}

case 1: {
mavlink_log_critical(&_mavlink_log_pub, "WARNING TRAFFIC %s at heading %d, land immediately",
/*Warn only*/
mavlink_log_critical(&_mavlink_log_pub, "WARNING TRAFFIC %s at heading %d, hrzl dst: %f, type: %d",
tr.flags & transponder_report_s::PX4_ADSB_FLAGS_VALID_CALLSIGN ? tr.callsign : "unknown",
traffic_direction);
traffic_direction,
traffic_seperation,
tr.emitter_type);
break;
}

case 2: {
mavlink_log_critical(&_mavlink_log_pub, "AVOIDING TRAFFIC %s heading %d, returning home",
mavlink_log_critical(&_mavlink_log_pub, "AVOIDING TRAFFIC %s heading %d, returning home! hrzl dst: %f, type: %d",
tr.flags & transponder_report_s::PX4_ADSB_FLAGS_VALID_CALLSIGN ? tr.callsign : "unknown",
traffic_direction);
traffic_direction,
traffic_seperation,
tr.emitter_type);

// set the return altitude to minimum
_rtl.set_return_alt_min(true);
Expand Down Expand Up @@ -1079,9 +1099,10 @@ int Navigator::custom_command(int argc, char *argv[])
return 0;

} else if (!strcmp(argv[0], "fake_traffic")) {
get_instance()->fake_traffic("LX007", 500, 1.0f, -1.0f, 100.0f, 90.0f, 0.001f);
get_instance()->fake_traffic("LX55", 1000, 0, 0, 100.0f, 90.0f, 0.001f);
get_instance()->fake_traffic("LX20", 15000, 1.0f, -1.0f, 280.0f, 90.0f, 0.001f);
get_instance()->fake_traffic("LX007", 500, 1.0f, -1.0f, 100.0f, 90.0f, 0.001f, ADSB_EMITTER_TYPE_LIGHT);
get_instance()->fake_traffic("LX55", 1000, 0, 0, 100.0f, 90.0f, 0.001f, ADSB_EMITTER_TYPE_SMALL);
get_instance()->fake_traffic("LX20", 15000, 1.0f, -1.0f, 280.0f, 90.0f, 0.001f, ADSB_EMITTER_TYPE_LARGE);
get_instance()->fake_traffic("DRONE", 10, 1.0f, -1.0f, 10.0f, 10.0f, 0.001f, ADSB_EMITTER_TYPE_UAV);
return 0;
}

Expand Down Expand Up @@ -1190,7 +1211,7 @@ controller.
PRINT_MODULE_USAGE_NAME("navigator", "controller");
PRINT_MODULE_USAGE_COMMAND("start");
PRINT_MODULE_USAGE_COMMAND_DESCR("fencefile", "load a geofence file from SD card, stored at etc/geofence.txt");
PRINT_MODULE_USAGE_COMMAND_DESCR("fake_traffic", "publishes 3 fake transponder_report_s uORB messages");
PRINT_MODULE_USAGE_COMMAND_DESCR("fake_traffic", "publishes 4 fake transponder_report_s uORB messages");
PRINT_MODULE_USAGE_DEFAULT_COMMANDS();

return 0;
Expand Down
30 changes: 29 additions & 1 deletion src/modules/navigator/navigator_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,12 +120,38 @@ PARAM_DEFINE_FLOAT(NAV_MC_ALT_RAD, 0.8f);
* @value 0 Disabled
* @value 1 Warn only
* @value 2 Return mode
* @value 3 Land mode
*
* @group Mission
*/
PARAM_DEFINE_INT32(NAV_TRAFF_AVOID, 1);

/**
* Set NAV TRAFFIC AVOID RADIUS MANNED
Copy link
Contributor

@hamishwillee hamishwillee Jan 30, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LowOrbitIonCannon Can we have a new PR to change this to more natural formatting?

Set avoidance radius/distance for manned vehicles (ADS-B/FLARM).

*
* Defines the Radius where NAV TRAFFIC AVOID is Called
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LowOrbitIonCannon Can we have a new PR to change this to more natural formatting?

Defines the avoidance radius/distance at which the avoidance action is triggered for for manned vehicles (ADS-B/FLARM).

* For Manned Aviation
*
* @unit m
* @min 500
*
* @group Mission
*/
PARAM_DEFINE_FLOAT(NAV_TRAFF_A_RADM, 500);

/**
* Set NAV TRAFFIC AVOID RADIUS
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LowOrbitIonCannon Can we have a new PR to change this to more natural formatting?

... following pattern as I put above

*
* Defines the Radius where NAV TRAFFIC AVOID is Called
* For Unmanned Aviation
*
* @unit m
* @min 10
* @max 500
*
* @group Mission
*/
PARAM_DEFINE_FLOAT(NAV_TRAFF_A_RADU, 10);

/**
* Airfield home Lat
*
Expand Down Expand Up @@ -170,3 +196,5 @@ PARAM_DEFINE_FLOAT(NAV_AH_ALT, 600.0f);
* @group Mission
*/
PARAM_DEFINE_INT32(NAV_FORCE_VT, 1);