PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
Loading...
Searching...
No Matches
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
14namespace px4_ros2 {
26class 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