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
@@ -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
View File
@@ -76,7 +76,7 @@ ExternalProject_Add(flightgear_bridge
set(viewers none jmavsim gazebo) set(viewers none jmavsim gazebo)
set(debuggers none ide gdb lldb ddd valgrind callgrind) set(debuggers none ide gdb lldb ddd valgrind callgrind)
set(models none shell 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 plane plane_cam plane_catapult plane_lidar
standard_vtol tailsitter tiltrotor standard_vtol tailsitter tiltrotor
rover r1_rover boat rover r1_rover boat
+2 -1
View File
@@ -248,7 +248,8 @@ private:
uORB::Publication<input_rc_s> _input_rc_pub{ORB_ID(input_rc)}; uORB::Publication<input_rc_s> _input_rc_pub{ORB_ID(input_rc)};
// HIL GPS // 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{}; std::default_random_engine _gen{};
// uORB subscription handlers // uORB subscription handlers
+15 -1
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.satellites_used = hil_gps.satellites_visible;
gps.s_variance_m_s = 0.25f; 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;
}
}
} }
} }