diff --git a/Tools/sitl_gazebo b/Tools/sitl_gazebo index 045156da19..44181fd63e 160000 --- a/Tools/sitl_gazebo +++ b/Tools/sitl_gazebo @@ -1 +1 @@ -Subproject commit 045156da19ac6518455c9b0e6a5a63b10388d4d7 +Subproject commit 44181fd63ebdcb9eaeb56557a3f807d501f58012 diff --git a/src/modules/simulator/simulator.h b/src/modules/simulator/simulator.h index f36bfaf8ff..5a69ecdf1a 100644 --- a/src/modules/simulator/simulator.h +++ b/src/modules/simulator/simulator.h @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include @@ -111,6 +112,10 @@ private: perf_free(_perf_sim_delay); perf_free(_perf_sim_interval); + for (size_t i = 0; i < sizeof(_dist_pubs) / sizeof(_dist_pubs[0]); i++) { + delete _dist_pubs[i]; + } + _instance = nullptr; } @@ -134,11 +139,13 @@ private: // uORB publisher handlers uORB::Publication _battery_pub{ORB_ID(battery_status)}; uORB::Publication _differential_pressure_pub{ORB_ID(differential_pressure)}; - uORB::PublicationMulti _dist_pub{ORB_ID(distance_sensor)}; uORB::PublicationMulti _flow_pub{ORB_ID(optical_flow)}; uORB::Publication _irlock_report_pub{ORB_ID(irlock_report)}; uORB::Publication _visual_odometry_pub{ORB_ID(vehicle_visual_odometry)}; + uORB::PublicationMulti *_dist_pubs[RANGE_FINDER_MAX_SENSORS] {}; + uint8_t _dist_sensor_ids[RANGE_FINDER_MAX_SENSORS] {}; + uORB::Subscription _parameter_update_sub{ORB_ID(parameter_update)}; unsigned int _port{14560}; diff --git a/src/modules/simulator/simulator_mavlink.cpp b/src/modules/simulator/simulator_mavlink.cpp index df55651613..eefabfa5e5 100644 --- a/src/modules/simulator/simulator_mavlink.cpp +++ b/src/modules/simulator/simulator_mavlink.cpp @@ -1124,7 +1124,6 @@ int Simulator::publish_distance_topic(const mavlink_distance_sensor_t *dist_mavl dist.orientation = dist_mavlink->orientation; dist.variance = dist_mavlink->covariance * 1e-4f; // cm^2 to m^2 dist.signal_quality = -1; - dist.h_fov = dist_mavlink->horizontal_fov; dist.v_fov = dist_mavlink->vertical_fov; dist.q[0] = dist_mavlink->quaternion[0]; @@ -1132,7 +1131,21 @@ int Simulator::publish_distance_topic(const mavlink_distance_sensor_t *dist_mavl dist.q[2] = dist_mavlink->quaternion[2]; dist.q[3] = dist_mavlink->quaternion[3]; - _dist_pub.publish(dist); + // New publishers will be created based on the sensor ID's being different or not + for (size_t i = 0; i < sizeof(_dist_sensor_ids) / sizeof(_dist_sensor_ids[0]); i++) { + if (_dist_pubs[i] && _dist_sensor_ids[i] == dist.id) { + _dist_pubs[i]->publish(dist); + break; + + } + + if (_dist_pubs[i] == nullptr) { + _dist_pubs[i] = new uORB::PublicationMulti {ORB_ID(distance_sensor)}; + _dist_sensor_ids[i] = dist.id; + _dist_pubs[i]->publish(dist); + break; + } + } return PX4_OK; }