PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
Loading...
Searching...
No Matches
global_position_measurement_interface.hpp
1/****************************************************************************
2 * Copyright (c) 2023 PX4 Development Team.
3 * SPDX-License-Identifier: BSD-3-Clause
4 ****************************************************************************/
5
6#pragma once
7
8#include <Eigen/Eigen>
9#include <optional>
10#include <px4_msgs/msg/vehicle_global_position.hpp>
11#include <px4_ros2/navigation/experimental/navigation_interface_base.hpp>
12#include <rclcpp/rclcpp.hpp>
13
14namespace px4_ros2 {
30 rclcpp::Time timestamp_sample{};
31
33 std::optional<Eigen::Vector2d> lat_lon{std::nullopt};
35 std::optional<float> horizontal_variance{std::nullopt};
36
38 std::optional<float> altitude_msl{std::nullopt};
40 std::optional<float> vertical_variance{std::nullopt};
41};
42
48 public:
49 explicit GlobalPositionMeasurementInterface(rclcpp::Node& node,
50 std::string topic_namespace_prefix = "");
51 ~GlobalPositionMeasurementInterface() override = default;
52
62 void update(const GlobalPositionMeasurement& global_position_measurement) const;
63
72 inline void reset() { ++_lat_lon_reset_counter; }
73
74 private:
78 bool isMeasurementNonEmpty(const GlobalPositionMeasurement& measurement) const;
79
84 bool isVarianceValid(const GlobalPositionMeasurement& measurement) const;
85
90 bool isFrameValid(const GlobalPositionMeasurement& measurement) const;
91
95 bool isValueNotNAN(const GlobalPositionMeasurement& measurement) const;
96
97 rclcpp::Publisher<px4_msgs::msg::VehicleGlobalPosition>::SharedPtr _aux_global_position_pub;
98
99 uint8_t _lat_lon_reset_counter{
100 0};
101 // uint8_t _altitude_frame;
102};
103
105} // namespace px4_ros2
Base class for a global position measurement provider.
Definition global_position_measurement_interface.hpp:47
void update(const GlobalPositionMeasurement &global_position_measurement) const
Publishes a global position measurement to the FMU. Throws an exception if the following conditions a...
void reset()
Notify the FMU that the global position estimate has been reset.
Definition global_position_measurement_interface.hpp:72
Base class for position measurement interface.
Definition navigation_interface_base.hpp:27
Represents a global position measurement to be passed to GlobalPositionMeasurementInterface::update.
Definition global_position_measurement_interface.hpp:28
std::optional< float > horizontal_variance
Variance of horizontal position error (meters).
Definition global_position_measurement_interface.hpp:35
rclcpp::Time timestamp_sample
Timestamp of the sample.
Definition global_position_measurement_interface.hpp:30
std::optional< float > altitude_msl
Altitude in the MSL frame.
Definition global_position_measurement_interface.hpp:38
std::optional< float > vertical_variance
Variance of vertical position error (meters).
Definition global_position_measurement_interface.hpp:40
std::optional< Eigen::Vector2d > lat_lon
Latitude and longitude.
Definition global_position_measurement_interface.hpp:33