feat(sensor_gps_sim): publish second GPS instance using SENS_GPS1 lever arm params

When SENS_GPS1_OFFX or SENS_GPS1_OFFY is non-zero, publish a second sensor_gps instance offset by those values from the vehicle position.
This commit is contained in:
gguidone 2026-04-02 12:58:29 +02:00
parent b589115dc3
commit c319f87c0e
2 changed files with 14 additions and 1 deletions

View File

@ -198,6 +198,16 @@ void SensorGpsSim::Run()
sensor_gps.timestamp = hrt_absolute_time();
_sensor_gps_pub.publish(sensor_gps);
const float gps1_offx = _param_gps1_offx.get();
const float gps1_offy = _param_gps1_offy.get();
if (fabsf(gps1_offx) > 0.f || fabsf(gps1_offy) > 0.f) {
sensor_gps.latitude_deg = latitude + (double)gps1_offx / CONSTANTS_RADIUS_OF_EARTH * (180.0 / M_PI);
sensor_gps.longitude_deg = longitude + (double)gps1_offy / CONSTANTS_RADIUS_OF_EARTH * (180.0 / M_PI) / cos(latitude * M_PI / 180.0);
sensor_gps.timestamp = hrt_absolute_time();
_sensor_gps_pub2.publish(sensor_gps);
}
}
perf_end(_loop_perf);

View File

@ -81,6 +81,7 @@ private:
uORB::Subscription _vehicle_local_position_sub{ORB_ID(vehicle_local_position_groundtruth)};
uORB::PublicationMulti<sensor_gps_s> _sensor_gps_pub{ORB_ID(sensor_gps)};
uORB::PublicationMulti<sensor_gps_s> _sensor_gps_pub2{ORB_ID(sensor_gps)};
perf_counter_t _loop_perf{perf_alloc(PC_ELAPSED, MODULE_NAME": cycle")};
@ -101,6 +102,8 @@ private:
static constexpr float _vel_markov_time{0.54f};
DEFINE_PARAMETERS(
(ParamInt<px4::params::SIM_GPS_USED>) _sim_gps_used
(ParamInt<px4::params::SIM_GPS_USED>) _sim_gps_used,
(ParamFloat<px4::params::SENS_GPS1_OFFX>) _param_gps1_offx,
(ParamFloat<px4::params::SENS_GPS1_OFFY>) _param_gps1_offy
)
};