27 subscriber_ = node->create_subscription<px4_msgs::msg::VehicleLocalPosition>(
28 "/fmu/out/vehicle_local_position", rclcpp::SensorDataQoS(),
30 RCLCPP_INFO(
getLogger(),
"CpVehicleLocalPosition: subscribed to /fmu/out/vehicle_local_position");
34 const px4_msgs::msg::VehicleLocalPosition::SharedPtr msg)
36 bool resetDetected =
false;
39 std::lock_guard<std::mutex> lock(
mutex_);
44 valid_ = msg->xy_valid && msg->z_valid;
58 "CpVehicleLocalPosition: global reference set - NED origin at lat=%.7f lon=%.7f "
70 "CpVehicleLocalPosition: local XY reset #%u (delta_xy=[%.2f, %.2f]); running paths "
71 "are NOT re-projected",
72 msg->xy_reset_counter,
static_cast<double>(msg->delta_xy[0]),
73 static_cast<double>(msg->delta_xy[1]));
80 "CpVehicleLocalPosition: local Z reset #%u (delta_z=%.2f); running paths are NOT "
82 msg->z_reset_counter,
static_cast<double>(msg->delta_z));
100 std::lock_guard<std::mutex> lock(
mutex_);
106 std::lock_guard<std::mutex> lock(
mutex_);
112 std::lock_guard<std::mutex> lock(
mutex_);
118 std::lock_guard<std::mutex> lock(
mutex_);
124 std::lock_guard<std::mutex> lock(
mutex_);
130 std::lock_guard<std::mutex> lock(
mutex_);
136 std::lock_guard<std::mutex> lock(
mutex_);
142 std::lock_guard<std::mutex> lock(
mutex_);
148 std::lock_guard<std::mutex> lock(
mutex_);
154 std::lock_guard<std::mutex> lock(
mutex_);
160 std::lock_guard<std::mutex> lock(
mutex_);
166 std::lock_guard<std::mutex> lock(
mutex_);
172 std::lock_guard<std::mutex> lock(
mutex_);
183 std::lock_guard<std::mutex> lock(
mutex_);
void onInitialize() override
uint8_t getXyResetCounter() const
uint8_t getZResetCounter() const
bool reprojectFromNed(float x, float y, double &lat, double &lon) const
virtual ~CpVehicleLocalPosition()
smacc2::SmaccSignal< void()> onPositionReceived_
bool globalRefValid() const
void onPositionMessage(const px4_msgs::msg::VehicleLocalPosition::SharedPtr msg)
smacc2::SmaccSignal< void()> onLocalPositionReset_
rclcpp::Subscription< px4_msgs::msg::VehicleLocalPosition >::SharedPtr subscriber_
MapProjection projection_
bool projectToNed(double lat, double lon, float &x, float &y) const
uint64_t getRefTimestamp() const
void initReference(double lat0, double lon0, uint64_t timestamp=0)
bool isInitialized() const
void reproject(float x, float y, double &lat, double &lon) const
void project(double lat, double lon, float &x, float &y) const
rclcpp::Logger getLogger() const
rclcpp::Node::SharedPtr getNode()