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;
60 "CpVehicleLocalPosition: global reference set - NED origin at lat=%.7f lon=%.7f "
72 "CpVehicleLocalPosition: local XY reset #%u (delta_xy=[%.2f, %.2f]); running paths "
73 "are NOT re-projected",
74 msg->xy_reset_counter,
static_cast<double>(msg->delta_xy[0]),
75 static_cast<double>(msg->delta_xy[1]));
82 "CpVehicleLocalPosition: local Z reset #%u (delta_z=%.2f); running paths are NOT "
84 msg->z_reset_counter,
static_cast<double>(msg->delta_z));
102 std::lock_guard<std::mutex> lock(
mutex_);
108 std::lock_guard<std::mutex> lock(
mutex_);
114 std::lock_guard<std::mutex> lock(
mutex_);
120 std::lock_guard<std::mutex> lock(
mutex_);
126 std::lock_guard<std::mutex> lock(
mutex_);
132 std::lock_guard<std::mutex> lock(
mutex_);
138 std::lock_guard<std::mutex> lock(
mutex_);
144 std::lock_guard<std::mutex> lock(
mutex_);
150 std::lock_guard<std::mutex> lock(
mutex_);
156 std::lock_guard<std::mutex> lock(
mutex_);
162 std::lock_guard<std::mutex> lock(
mutex_);
168 std::lock_guard<std::mutex> lock(
mutex_);
174 std::lock_guard<std::mutex> lock(
mutex_);
180 std::lock_guard<std::mutex> lock(
mutex_);
186 std::lock_guard<std::mutex> lock(
mutex_);
197 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()
bool isVelocityValid() const
smacc2::SmaccSignal< void()> onPositionReceived_
bool isHeadingGoodForControl() const
bool globalRefValid() const
void onPositionMessage(const px4_msgs::msg::VehicleLocalPosition::SharedPtr msg)
bool headingGoodForControl_
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()