Common
common packages for kyubic
 
Loading...
Searching...
No Matches
zero_order_hold.hpp
Go to the documentation of this file.
1
10#ifndef _ZERO_ORDER_HOLD_HPP
11#define _ZERO_ORDER_HOLD_HPP
12
13#include <cstdint>
14#include <localization_msgs/msg/odometry.hpp>
15#include <memory>
16#include <mutex>
17#include <p_pid_controller_msgs/msg/base_axes.hpp>
18#include <planner_msgs/msg/wrench_plan.hpp>
19#include <rclcpp/rclcpp.hpp>
20#include <rclcpp_lifecycle/lifecycle_node.hpp>
21#include <rclcpp_lifecycle/lifecycle_publisher.hpp>
22#include <timer/timeout.hpp>
23
25{
26
27using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn;
28
29enum class Hold_Z_Mode
30{
31 DEPTH = 0,
32 ALTITUDE = 1,
33};
34
35class ZeroOrderHold : public rclcpp_lifecycle::LifecycleNode
36{
37private:
38 Hold_Z_Mode hold_z_mode;
39 uint64_t timeout_ms;
40
41 rclcpp_lifecycle::LifecyclePublisher<planner_msgs::msg::WrenchPlan>::SharedPtr pub_;
42 rclcpp::Subscription<planner_msgs::msg::WrenchPlan>::SharedPtr plan_sub_;
43 rclcpp::Subscription<localization_msgs::msg::Odometry>::SharedPtr odom_sub_;
44
45 std::shared_ptr<timer::Timeout> timeout_;
46
47 localization_msgs::msg::Odometry::SharedPtr odom_;
48 planner_msgs::msg::WrenchPlan::SharedPtr hold_msg_;
49 bool first_timeout = true;
50 bool had_timeout_ = true;
51
52 std::mutex mutex_;
53
54 void wrenchPlanCallback(planner_msgs::msg::WrenchPlan::SharedPtr _msg);
55 void odomCallback(const localization_msgs::msg::Odometry::SharedPtr _msg);
56 bool copy_master(const localization_msgs::msg::Odometry::SharedPtr _msg);
57 bool copy_slave(const localization_msgs::msg::Odometry::SharedPtr _msg);
58
59public:
60 explicit ZeroOrderHold(const rclcpp::NodeOptions & options);
61
62 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(
63 const rclcpp_lifecycle::State & state) override;
64 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(
65 const rclcpp_lifecycle::State & state) override;
66 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(
67 const rclcpp_lifecycle::State & state) override;
68 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(
69 const rclcpp_lifecycle::State & state) override;
70 rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(
71 const rclcpp_lifecycle::State & state) override;
72};
73
74} // namespace planner::wrench_planner
75
76#endif // _ZERO_ORDER_HOLD_HPP
Definition: zero_order_hold.hpp:36
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_cleanup(const rclcpp_lifecycle::State &state) override
Definition: zero_order_hold.cpp:62
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_activate(const rclcpp_lifecycle::State &state) override
Definition: zero_order_hold.cpp:45
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_shutdown(const rclcpp_lifecycle::State &state) override
Definition: zero_order_hold.cpp:74
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_deactivate(const rclcpp_lifecycle::State &state) override
Definition: zero_order_hold.cpp:56
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn on_configure(const rclcpp_lifecycle::State &state) override
Definition: zero_order_hold.cpp:23
Definition: wrench_planner.hpp:21
Hold_Z_Mode
Definition: zero_order_hold.hpp:30
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn CallbackReturn
Definition: zero_order_hold.hpp:27
timeout library