add iris_dual_gps config and the possibility of testing GPS blending through simulation

This commit is contained in:
TSC21 2020-06-15 11:58:03 +01:00 committed by Nuno Marques
parent 39b803a9dc
commit 6add0fff7f
5 changed files with 33 additions and 4 deletions

View File

@ -0,0 +1,14 @@
#!/bin/sh
#
# @name 3DR Iris Quadrotor SITL (Dual GPS)
#
# @type Quadrotor Wide
#
sh /etc/init.d-posix/10016_iris
if [ $AUTOCNF = yes ]
then
# EKF2: Multi GPS blending
param set EKF2_GPS_MASK 7 # Uses speed, hpos and vpos accuracy
fi

@ -1 +1 @@
Subproject commit e2bf962b5e46b89093696338794a201c7fc990ba
Subproject commit 97106007eb5c934b902a5329afb55b45e94d5063

View File

@ -76,7 +76,7 @@ ExternalProject_Add(flightgear_bridge
set(viewers none jmavsim gazebo)
set(debuggers none ide gdb lldb ddd valgrind callgrind)
set(models none shell
if750a iris iris_opt_flow iris_opt_flow_mockup iris_vision iris_rplidar iris_irlock iris_obs_avoid iris_rtps px4vision solo typhoon_h480
if750a iris iris_dual_gps iris_opt_flow iris_opt_flow_mockup iris_vision iris_rplidar iris_irlock iris_obs_avoid iris_rtps px4vision solo typhoon_h480
plane plane_cam plane_catapult plane_lidar
standard_vtol tailsitter tiltrotor
rover r1_rover boat

View File

@ -248,7 +248,8 @@ private:
uORB::Publication<input_rc_s> _input_rc_pub{ORB_ID(input_rc)};
// HIL GPS
uORB::Publication<vehicle_gps_position_s> _vehicle_gps_position_pub{ORB_ID(vehicle_gps_position)};
uORB::PublicationMulti<vehicle_gps_position_s> *_vehicle_gps_position_pubs[ORB_MULTI_MAX_INSTANCES] {};
uint8_t _gps_ids[ORB_MULTI_MAX_INSTANCES] {};
std::default_random_engine _gen{};
// uORB subscription handlers

View File

@ -309,7 +309,21 @@ void Simulator::handle_message_hil_gps(const mavlink_message_t *msg)
gps.satellites_used = hil_gps.satellites_visible;
gps.s_variance_m_s = 0.25f;
_vehicle_gps_position_pub.publish(gps);
// New publishers will be created based on the HIL_GPS ID's being different or not
for (size_t i = 0; i < sizeof(_gps_ids) / sizeof(_gps_ids[0]); i++) {
if (_vehicle_gps_position_pubs[i] && _gps_ids[i] == hil_gps.id) {
_vehicle_gps_position_pubs[i]->publish(gps);
break;
}
if (_vehicle_gps_position_pubs[i] == nullptr) {
_vehicle_gps_position_pubs[i] = new uORB::PublicationMulti<vehicle_gps_position_s> {ORB_ID(vehicle_gps_position)};
_gps_ids[i] = hil_gps.id;
_vehicle_gps_position_pubs[i]->publish(gps);
break;
}
}
}
}