PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
odometry.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 <px4_msgs/msg/vehicle_odometry.hpp>
10 #include <px4_ros2/common/context.hpp>
11 #include <px4_ros2/utils/geometry.hpp>
12 #include <px4_ros2/utils/subscription.hpp>
13 
14 namespace px4_ros2 {
26 class Odometry : public Subscription<px4_msgs::msg::VehicleOdometry> {
27  public:
28  explicit Odometry(Context& context);
29 
34  Eigen::Vector3f positionNed() const
35  {
36  const px4_msgs::msg::VehicleOdometry& odom = last();
37  return {odom.position[0], odom.position[1], odom.position[2]};
38  }
39 
45  Eigen::Vector3f velocityNed() const
46  {
47  const px4_msgs::msg::VehicleOdometry& odom = last();
48  return {odom.velocity[0], odom.velocity[1], odom.velocity[2]};
49  }
50 
56  Eigen::Vector3f angularVelocityFrd() const
57  {
58  const px4_msgs::msg::VehicleOdometry& odom = last();
59  return {odom.angular_velocity[0], odom.angular_velocity[1], odom.angular_velocity[2]};
60  }
61 
67  Eigen::Quaternionf attitude() const
68  {
69  const px4_msgs::msg::VehicleOdometry& odom = last();
70  return Eigen::Quaternionf{odom.q[0], odom.q[1], odom.q[2], odom.q[3]};
71  }
72 
78  float roll() const { return quaternionToRoll(attitude()); }
79 
85  float pitch() const { return quaternionToPitch(attitude()); }
86 
92  float yaw() const { return quaternionToYaw(attitude()); }
93 };
94 
96 } /* namespace px4_ros2 */
Definition: context.hpp:18
Provides access to the vehicle's odometry estimate.
Definition: odometry.hpp:26
float yaw() const
Get the vehicle's yaw in extrinsic RPY order.
Definition: odometry.hpp:92
Eigen::Quaternionf attitude() const
Get the vehicle's attitude.
Definition: odometry.hpp:67
Eigen::Vector3f angularVelocityFrd() const
Get the vehicle's angular velocity in FRD frame.
Definition: odometry.hpp:56
float roll() const
Get the vehicle's roll in extrinsic RPY order.
Definition: odometry.hpp:78
Eigen::Vector3f velocityNed() const
Get the vehicle's linear velocity in the North-East-Down (NED) frame.
Definition: odometry.hpp:45
Eigen::Vector3f positionNed() const
Get the vehicle's position in the North-East-Down (NED) local frame.
Definition: odometry.hpp:34
float pitch() const
Get the vehicle's pitch in extrinsic RPY order.
Definition: odometry.hpp:85
Provides a subscription to arbitrary ROS topics.
Definition: subscription.hpp:27
const px4_msgs::msg::VehicleOdometry & last() const
Get the last-received message.
Definition: subscription.hpp:57
Type quaternionToRoll(const Eigen::Quaternion< Type > &q)
Convert quaternion to roll angle in extrinsic RPY order (intrinsic YPR)
Definition: geometry.hpp:147
Type quaternionToPitch(const Eigen::Quaternion< Type > &q)
Convert quaternion to pitch angle in extrinsic RPY order (intrinsic YPR)
Definition: geometry.hpp:159
Type quaternionToYaw(const Eigen::Quaternion< Type > &q)
Convert quaternion to yaw angle in extrinsic RPY order (intrinsic YPR)
Definition: geometry.hpp:171