PX4 ROS 2 Interface Library
Library to interface with PX4 from a companion computer using ROS 2
Loading...
Searching...
No Matches
setpoint_base.hpp
1/****************************************************************************
2 * Copyright (c) 2023 PX4 Development Team.
3 * SPDX-License-Identifier: BSD-3-Clause
4 ****************************************************************************/
5
6#pragma once
7
8#include <cstdint>
9#include <functional>
10#include <memory>
11
12#include <rclcpp/rclcpp.hpp>
13#include <px4_msgs/msg/vehicle_control_mode.hpp>
14#include "context.hpp"
15
16namespace px4_ros2
17{
18
19class SetpointBase : public std::enable_shared_from_this<SetpointBase>
20{
21public:
22 using ShouldActivateCB = std::function<void ()>;
23
25 {
26 void fillControlMode(px4_msgs::msg::VehicleControlMode & control_mode)
27 {
28 control_mode.flag_control_rates_enabled = rates_enabled;
29 control_mode.flag_control_attitude_enabled = attitude_enabled;
30 control_mode.flag_control_acceleration_enabled = acceleration_enabled;
31 control_mode.flag_control_velocity_enabled = velocity_enabled;
32 control_mode.flag_control_position_enabled = position_enabled;
33 control_mode.flag_control_altitude_enabled = altitude_enabled;
34 control_mode.flag_control_allocation_enabled = control_allocation_enabled;
35 control_mode.flag_control_climb_rate_enabled = climb_rate_enabled;
36 }
37
38 bool control_allocation_enabled{true};
39 bool rates_enabled{true};
40 bool attitude_enabled{true};
41 bool altitude_enabled{true};
42 bool acceleration_enabled{true};
43 bool velocity_enabled{true};
44 bool position_enabled{true};
45
46 bool climb_rate_enabled{false};
47 };
48
49 explicit SetpointBase(Context & context)
50 {
51 context.addSetpointType(this);
52 }
53
54 virtual ~SetpointBase() = default;
55
56 std::shared_ptr<SetpointBase> getSharedPtr()
57 {
58 try {
59 return shared_from_this();
60 } catch (const std::bad_weak_ptr & exception) {
61 throw std::runtime_error("Setpoint must be instantiated with std::make_shared<>");
62 }
63 return {};
64 }
65
66 virtual Configuration getConfiguration() = 0;
67
68 virtual float desiredUpdateRateHz() {return 50.f;}
69
70
71 void setShouldActivateCallback(const ShouldActivateCB & should_activate_cb)
72 {
73 _should_activate_cb = should_activate_cb;
74 }
75 void setActive(bool active) {_active = active;}
76
77protected:
78 void onUpdate()
79 {
80 if (!_active && _should_activate_cb) {
81 _should_activate_cb();
82 }
83 }
84
85private:
86 ShouldActivateCB _should_activate_cb;
87 bool _active{false};
88};
89
90} /* namespace px4_ros2 */
Definition context.hpp:20
Definition setpoint_base.hpp:20
Definition setpoint_base.hpp:25