PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
Loading...
Searching...
No Matches
vtol.hpp
1/****************************************************************************
2 * Copyright (c) 2025 PX4 Development Team.
3 * SPDX-License-Identifier: BSD-3-Clause
4 ****************************************************************************/
5
6 #pragma once
7
8 #include <px4_msgs/msg/vehicle_command.hpp>
9 #include <px4_msgs/msg/vtol_vehicle_status.hpp>
10 #include <px4_msgs/msg/vehicle_local_position.hpp>
11 #include <Eigen/Core>
12
13 #include <px4_ros2/common/context.hpp>
14
15namespace px4_ros2
16{
18{
21 float deceleration_integrator_limit{0.3f};
22
23 VTOLConfig & withBackTransitionDeceleration(
25 {
26 this->back_transition_deceleration = back_transition_deceleration;
27 return *this;
28 }
29
30 VTOLConfig & withDecelerationIntegratorLimit(
31 const float deceleration_integrator_limit)
32 {
33 this->deceleration_integrator_limit = deceleration_integrator_limit;
34 return *this;
35 }
36
37 VTOLConfig & withBackTransitionDecelerationIGain(
39 {
40 this->back_transition_deceleration_setpoint_to_pitch_i =
42 return *this;
43 }
44
45
46};
47
55class VTOL
56{
57public:
58 explicit VTOL(Context & context, const VTOLConfig & config = VTOLConfig{});
59
60 enum class State
61 {
62 Undefined = 0,
63 TransitionToFixedWing = 1,
64 TransitionToMulticopter = 2,
65 Multicopter = 3,
66 FixedWing = 4
67 };
68
74 bool toFixedwing();
75
76 Eigen::Vector3f computeAccelerationSetpointDuringTransition(
77 std::optional<float> back_transition_deceleration_m_s2 = std::nullopt);
78
79 VTOL::State getCurrentState() const {return _current_state;}
80
81private:
82 rclcpp::Node & _node;
83 rclcpp::Publisher<px4_msgs::msg::VehicleCommand>::SharedPtr _vehicle_command_pub;
84 rclcpp::Subscription<px4_msgs::msg::VtolVehicleStatus>::SharedPtr _vtol_vehicle_status_sub;
85 rclcpp::Subscription<px4_msgs::msg::VehicleLocalPosition>::SharedPtr _vehicle_local_position_sub;
86 rclcpp::Time _last_command_sent;
87 rclcpp::Time _last_vtol_vehicle_status_received;
88 rclcpp::Time _last_pitch_integrator_update{0, 0, _node.get_clock()->get_clock_type()};
89
90 float _vehicle_heading{NAN};
91 float _decel_error_bt_int{0.f};
92
93 Eigen::Vector2f _vehicle_acceleration_xy{NAN, NAN};
94
95 VTOL::State _current_state{VTOL::State::Undefined};
96
97 float computePitchSetpointDuringBacktransition(
98 std::optional<float> back_transition_deceleration_m_s2 = std::nullopt);
99
100 VTOLConfig _config;
101};
102
104} /* namespace px4_ros2 */
Definition context.hpp:20
Provides VTOL transition command.
Definition vtol.hpp:56
bool toMulticopter()
Definition vtol.hpp:18
float back_transition_deceleration
Definition vtol.hpp:19
float back_transition_deceleration_setpoint_to_pitch_i
Definition vtol.hpp:20