Common
common packages for kyubic
 
Loading...
Searching...
No Matches
actuator_rp2040_driver.hpp
Go to the documentation of this file.
1
10#ifndef _ACTUATOR_RP2040_DRIVER_HPP
11#define _ACTUATOR_RP2040_DRIVER_HPP
12
13#include <driver_msgs/msg/actuator.hpp>
14#include <geometry_msgs/msg/wrench_stamped.hpp>
15#include <proto_files/conversion_driver_msgs__Actuator.hpp>
16#include <protolink/client.hpp>
17#include <rclcpp/rclcpp.hpp>
18#include <std_msgs/msg/bool.hpp>
19#include <timer/timeout.hpp>
20
22{
23
27class ActuatorRP2040 : public rclcpp::Node
28{
29public:
33 explicit ActuatorRP2040(const rclcpp::NodeOptions & options);
34
35private:
36 // Serial settings
37 std::string portname;
38 uint32_t baudrate;
39
40 // Thruster mixing parameters
41 static constexpr size_t NUM_THRUSTERS = 6;
42 float max_thrust;
43 float max_thrust_per;
44
45 // Robot physical parameters (Defined in header as requested)
46 static constexpr float theta_h = 30.0f * M_PI / 180.0f; //[rad]
47 static constexpr float theta_v = 30.0f * M_PI / 180.0f; //[rad]
48 static constexpr float dist_hx = 0.19f; // x-axis (horizontal)
49 static constexpr float dist_hy = 0.14f; // y-axis (horizontal)
50 static constexpr float dist_vy = 0.19f; // x-axis (vertical)
51 static constexpr float dist_vz = 0.14f; // y-axis (vertical)
52
53 // Scaling factors for mixing (const members, initialized in constructor)
54 const float f_x_scale;
55 const float f_y_scale;
56 const float f_z_scale;
57 const float t_x_scale;
58 const float t_z_scale;
59
60 // Heartbeat settings
61 bool heartbeat{false};
62 uint64_t timeout_ms;
63 std::shared_ptr<timer::Timeout> timeout_;
64
65 // Protolink members
66 protolink::IoContext io_context_;
67 std::shared_ptr<protolink::serial_protocol::port> port_;
68 using ProtoActuator = protolink__driver_msgs__Actuator::driver_msgs__Actuator;
69 std::shared_ptr<protolink::serial_protocol::Publisher<ProtoActuator>> protolink_publisher_;
70
71 driver_msgs::msg::Actuator msg_buffer_;
72
73 // ROS Publishers & Subscribers
74 rclcpp::Publisher<driver_msgs::msg::Thruster>::SharedPtr thruster_pub_;
75 rclcpp::Subscription<geometry_msgs::msg::WrenchStamped>::SharedPtr wrench_sub_;
76 rclcpp::Subscription<driver_msgs::msg::LED>::SharedPtr led_sub_;
77 rclcpp::Subscription<std_msgs::msg::Bool>::SharedPtr heartbeat_sub_;
78
79 // Callbacks
80 void wrench_callback(geometry_msgs::msg::WrenchStamped::SharedPtr _msg);
81 void led_callback(driver_msgs::msg::LED::SharedPtr _msg);
82 void heartbeat_callback(std_msgs::msg::Bool::SharedPtr _msg);
83
84 // Helper functions
85 std::array<float, NUM_THRUSTERS> _wrench2thrusts(
86 float f_x, float f_y, float f_z, float t_x, float t_z);
87
88 float _restrict_thrust(std::array<float, NUM_THRUSTERS> & thrusts);
89};
90
91} // namespace driver::actuator_rp2040_driver
92
93#endif // _ACTUATOR_RP2040_DRIVER_HPP
actuator class with thruster mixing logic
Definition: actuator_rp2040_driver.hpp:28
Definition: actuator_rp2040_driver.hpp:22
timeout library