PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
Loading...
Searching...
No Matches
trajectory.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/trajectory_setpoint.hpp>
10#include <px4_ros2/common/setpoint_base.hpp>
11
12namespace px4_ros2 {
17struct TrajectorySetpoint;
18
25 public:
31 explicit TrajectorySetpointType(Context& context, bool local_position_is_optional = false);
32
33 ~TrajectorySetpointType() override = default;
34
35 SetpointType getSetpointType() override { return px4_msgs::msg::SetpointConfig::TYPE_TRAJECTORY; }
36
38 px4_msgs::msg::SetpointConfigReply& setpoint_config_reply) override;
39
40 void update(const Eigen::Vector3f& velocity_ned_m_s,
41 const std::optional<Eigen::Vector3f>& acceleration_ned_m_s2 = {},
42 std::optional<float> yaw_ned_rad = {}, std::optional<float> yaw_rate_ned_rad_s = {});
43
54 void update(const TrajectorySetpoint& setpoint);
55
63 void updatePosition(const Eigen::Vector3f& position_ned_m);
64
65 private:
66 rclcpp::Node& _node;
67 rclcpp::Publisher<px4_msgs::msg::TrajectorySetpoint>::SharedPtr _trajectory_setpoint_pub;
68
69 const bool _local_position_is_optional;
70};
71
97 std::optional<float> position_ned_m_x;
98 std::optional<float> position_ned_m_y;
99 std::optional<float> position_ned_m_z;
100
101 std::optional<float> velocity_ned_m_s_x;
102 std::optional<float> velocity_ned_m_s_y;
103 std::optional<float> velocity_ned_m_s_z;
104
105 std::optional<float> acceleration_ned_m_s2_x;
106 std::optional<float> acceleration_ned_m_s2_y;
107 std::optional<float> acceleration_ned_m_s2_z;
108
109 std::optional<float> yaw_ned_rad;
110 std::optional<float> yaw_rate_ned_rad_s;
111
118 {
119 position_ned_m_x = x_ned_m;
120 return *this;
121 }
122
129 {
130 position_ned_m_y = y_ned_m;
131 return *this;
132 }
133
140 {
141 position_ned_m_z = z_ned_m;
142 return *this;
143 }
144
151 {
152 velocity_ned_m_s_x = x_ned_m_s;
153 return *this;
154 }
155
162 {
163 velocity_ned_m_s_y = y_ned_m_s;
164 return *this;
165 }
166
173 {
174 velocity_ned_m_s_z = z_ned_m_s;
175 return *this;
176 }
177
184 {
185 acceleration_ned_m_s2_x = x_ned_m_s2;
186 return *this;
187 }
188
195 {
196 acceleration_ned_m_s2_y = y_ned_m_s2;
197 return *this;
198 }
199
206 {
207 acceleration_ned_m_s2_z = z_ned_m_s2;
208 return *this;
209 }
210
217 {
218 this->yaw_ned_rad = yaw_rad;
219 return *this;
220 }
221
228 {
229 this->yaw_rate_ned_rad_s = rate_rad_s;
230 return *this;
231 }
232
233 // Helper methods for setting multiple components at once
239 TrajectorySetpoint& withPosition(const Eigen::Vector3f& position_ned_m)
240 {
241 position_ned_m_x = position_ned_m.x();
242 position_ned_m_y = position_ned_m.y();
243 position_ned_m_z = position_ned_m.z();
244 return *this;
245 }
246
252 TrajectorySetpoint& withHorizontalPosition(const Eigen::Vector2f& position_ned_m)
253 {
254 position_ned_m_x = position_ned_m.x();
255 position_ned_m_y = position_ned_m.y();
256 return *this;
257 }
258
264 TrajectorySetpoint& withVelocity(const Eigen::Vector3f& velocity_ned_m_s)
265 {
266 velocity_ned_m_s_x = velocity_ned_m_s.x();
267 velocity_ned_m_s_y = velocity_ned_m_s.y();
268 velocity_ned_m_s_z = velocity_ned_m_s.z();
269 return *this;
270 }
271
277 TrajectorySetpoint& withHorizontalVelocity(const Eigen::Vector2f& velocity_ned_m_s)
278 {
279 velocity_ned_m_s_x = velocity_ned_m_s.x();
280 velocity_ned_m_s_y = velocity_ned_m_s.y();
281 return *this;
282 }
283
289 TrajectorySetpoint& withAcceleration(const Eigen::Vector3f& acceleration_ned_m_s2)
290 {
291 acceleration_ned_m_s2_x = acceleration_ned_m_s2.x();
292 acceleration_ned_m_s2_y = acceleration_ned_m_s2.y();
293 acceleration_ned_m_s2_z = acceleration_ned_m_s2.z();
294 return *this;
295 }
296
302 TrajectorySetpoint& withHorizontalAcceleration(const Eigen::Vector2f& acceleration_ned_m_s2)
303 {
304 acceleration_ned_m_s2_x = acceleration_ned_m_s2.x();
305 acceleration_ned_m_s2_y = acceleration_ned_m_s2.y();
306 return *this;
307 }
308};
309
310} /* namespace px4_ros2 */
Definition context.hpp:18
Definition setpoint_base.hpp:20
Setpoint type for trajectory control.
Definition trajectory.hpp:24
void clearOptionalRequirements(px4_msgs::msg::SetpointConfigReply &setpoint_config_reply) override
void updatePosition(const Eigen::Vector3f &position_ned_m)
Position setpoint update.
SetpointType getSetpointType() override
Definition trajectory.hpp:35
TrajectorySetpointType(Context &context, bool local_position_is_optional=false)
void update(const TrajectorySetpoint &setpoint)
Update the setpoint with full flexibility by passing a TrajectorySetpoint.
Setpoint structure for trajectory control with fine-grained control over individual components.
Definition trajectory.hpp:96
TrajectorySetpoint & withYaw(float yaw_rad)
Set yaw setpoint in NED frame.
Definition trajectory.hpp:216
TrajectorySetpoint & withHorizontalAcceleration(const Eigen::Vector2f &acceleration_ned_m_s2)
Set acceleration setpoint for horizontal axes (x, y) in NED frame.
Definition trajectory.hpp:302
TrajectorySetpoint & withHorizontalVelocity(const Eigen::Vector2f &velocity_ned_m_s)
Set velocity setpoint for horizontal axes (x, y) in NED frame.
Definition trajectory.hpp:277
TrajectorySetpoint & withHorizontalPosition(const Eigen::Vector2f &position_ned_m)
Set position setpoint for horizontal axes (x, y) in NED frame.
Definition trajectory.hpp:252
TrajectorySetpoint & withPositionX(float x_ned_m)
Set position setpoint for x-axis in NED frame.
Definition trajectory.hpp:117
TrajectorySetpoint & withAccelerationY(float y_ned_m_s2)
Set acceleration setpoint for y-axis in NED frame.
Definition trajectory.hpp:194
TrajectorySetpoint & withYawRate(float rate_rad_s)
Set yaw rate setpoint in NED frame.
Definition trajectory.hpp:227
TrajectorySetpoint & withAcceleration(const Eigen::Vector3f &acceleration_ned_m_s2)
Set acceleration setpoint for all axes (x, y, z) in NED frame.
Definition trajectory.hpp:289
TrajectorySetpoint & withVelocityX(float x_ned_m_s)
Set velocity setpoint for x-axis in NED frame.
Definition trajectory.hpp:150
TrajectorySetpoint & withPositionY(float y_ned_m)
Set position setpoint for y-axis in NED frame.
Definition trajectory.hpp:128
TrajectorySetpoint & withVelocityZ(float z_ned_m_s)
Set velocity setpoint for z-axis in NED frame.
Definition trajectory.hpp:172
TrajectorySetpoint & withAccelerationX(float x_ned_m_s2)
Set acceleration setpoint for x-axis in NED frame.
Definition trajectory.hpp:183
TrajectorySetpoint & withPositionZ(float z_ned_m)
Set position setpoint for z-axis in NED frame.
Definition trajectory.hpp:139
TrajectorySetpoint & withVelocity(const Eigen::Vector3f &velocity_ned_m_s)
Set velocity setpoint for all axes (x, y, z) in NED frame.
Definition trajectory.hpp:264
TrajectorySetpoint & withPosition(const Eigen::Vector3f &position_ned_m)
Set position setpoint for all axes (x, y, z) in NED frame.
Definition trajectory.hpp:239
TrajectorySetpoint & withAccelerationZ(float z_ned_m_s2)
Set acceleration setpoint for z-axis in NED frame.
Definition trajectory.hpp:205
TrajectorySetpoint & withVelocityY(float y_ned_m_s)
Set velocity setpoint for y-axis in NED frame.
Definition trajectory.hpp:161