PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
home_position.hpp
1 /****************************************************************************
2  * Copyright (c) 2023-2024 PX4 Development Team.
3  * SPDX-License-Identifier: BSD-3-Clause
4  ****************************************************************************/
5 
6 #pragma once
7 
8 #include <Eigen/Eigen>
9 #include <px4_msgs/msg/home_position.hpp>
10 #include <px4_ros2/common/context.hpp>
11 #include <px4_ros2/utils/message_version.hpp>
12 #include <px4_ros2/utils/subscription.hpp>
13 
14 namespace px4_ros2 {
24 class HomePosition : public Subscription<px4_msgs::msg::HomePosition> {
25  public:
26  explicit HomePosition(Context& context)
28  context, "fmu/out/home_position" +
29  +px4_ros2::getMessageNameVersion<px4_msgs::msg::HomePosition>())
30  {
31  }
32 
38  Eigen::Vector3f localPosition() const
39  {
40  const px4_msgs::msg::HomePosition& home = last();
41  return Eigen::Vector3f{home.x, home.y, home.z};
42  }
43 
50  Eigen::Vector3d globalPosition() const
51  {
52  const px4_msgs::msg::HomePosition& home = last();
53  return Eigen::Vector3d{home.lat, home.lon, home.alt};
54  }
55 
61  float yaw() const { return last().yaw; }
62 
68  bool localPositionValid() const { return lastValid() && last().valid_lpos; }
69 
75  bool globaHorizontalPositionValid() const { return lastValid() && last().valid_hpos; }
76 
82  bool altitudeValid() const { return lastValid() && last().valid_alt; }
83 
89  bool manualHome() const { return last().manual_home; }
90 };
91 
93 } /* namespace px4_ros2 */
Definition: context.hpp:18
Provides access to the vehicle's home position.
Definition: home_position.hpp:24
bool localPositionValid() const
Check if vehicle's local home position is valid (xyz).
Definition: home_position.hpp:68
bool globaHorizontalPositionValid() const
Check if vehicle's global horizontal home position is valid (lat, lon).
Definition: home_position.hpp:75
Eigen::Vector3d globalPosition() const
Get the vehicle's home position in global coordinates.
Definition: home_position.hpp:50
Eigen::Vector3f localPosition() const
Get the vehicle's home position in local coordinates.
Definition: home_position.hpp:38
float yaw() const
Get the vehicle's home position yaw.
Definition: home_position.hpp:61
bool manualHome() const
Check if home position has been set manually.
Definition: home_position.hpp:89
bool altitudeValid() const
Check if vehicle's home position altitude is valid.
Definition: home_position.hpp:82
Provides a subscription to arbitrary ROS topics.
Definition: subscription.hpp:27
bool lastValid(const std::chrono::duration< int64_t, DurationT > max_delay=500ms) const
Check whether the last message is still valid. To be valid, the message must have been received withi...
Definition: subscription.hpp:80
const px4_msgs::msg::HomePosition & last() const
Get the last-received message.
Definition: subscription.hpp:57