99#include " super_capacitor/super_capacitor_base.h"
1010#include " super_capacitor/super_capacitor_controller.h"
1111#include " meta_hardware/can_driver/can_driver.hpp"
12+ #include " super_capacitor/xidi_capacitor_driver.h"
1213
1314
14- SuperCapacitorController::SuperCapacitorController () : Node( " SuperCapacitorController " )
15+ SuperCapacitorController::SuperCapacitorController (const rclcpp::NodeOptions & options )
1516{
17+ node_ = rclcpp::Node::make_shared (" super_capacitor_controller" , options);
1618
1719 // get parameters
18- std::string can_interface = this ->declare_parameter (" can_interface" , std::string (" can0" ));
19-
20+ std::string can_interface = node_ ->declare_parameter (" can_interface" , std::string (" can0" ));
21+ std::string capacitor_device = node_-> declare_parameter ( " capacitor_device " , std::string ( " xidi " ));
2022 // create subscriptions
21- goal_sub_ = this ->create_subscription <device_interface::msg::CapacitorCmd>(
22- " super_capacitor_goal" , 10 , [this ](const device_interface::msg::CapacitorCmd::SharedPtr msg){
23- goal_sub_callback (msg);
24- });
25-
23+ // goal_sub_ = node_->create_subscription<device_interface::msg::CapacitorCmd>(
24+ // "super_capacitor_goal", 10, [node_](const device_interface::msg::CapacitorCmd::SharedPtr msg){
25+ // goal_sub_callback(msg);
26+ // });
27+ goal_sub_ = node_->create_subscription <device_interface::msg::CapacitorCmd>(
28+ " super_capacitor_goal" , 10 , std::bind (&SuperCapacitorController::goal_sub_callback, this , std::placeholders::_1));
2629 // create a timer for publishing super capacitor state
27- state_pub_ = this ->create_publisher <device_interface::msg::CapacitorState>(" super_capacitor_state" , 10 );
28- pub_timer_ = this ->create_wall_timer (
29- std::chrono::milliseconds (100 ), [this ](){
30- pub_state ();
31- });
30+ state_pub_ = node_->create_publisher <device_interface::msg::CapacitorState>(" super_capacitor_state" , 10 );
31+ pub_timer_ = node_->create_wall_timer (
32+ std::chrono::milliseconds (100 ), std::bind (&SuperCapacitorController::pub_state, this ));
3233
3334 // complete initialization
34- tx_timer_ = this ->create_wall_timer (
35- std::chrono::milliseconds (100 ), [this ](){
36- send_command ();
37- });
35+ tx_timer_ = node_->create_wall_timer (
36+ std::chrono::milliseconds (100 ), std::bind (&SuperCapacitorController::send_command, this ));
3837
3938
40- pluginlib::ClassLoader<super_capacitor::SuperCapacitorBase> capacitor_loader (" super_capacitor" ," super_capacitor::SuperCapacitorBase" );
39+ // pluginlib::ClassLoader<super_capacitor::SuperCapacitorBase> capacitor_loader("super_capacitor","super_capacitor::SuperCapacitorBase");
4140
4241 try
4342 {
44- capacitor_ = capacitor_loader.createSharedInstance (" SuperCapacitorBase" );
45- capacitor_->init (can_interface);
43+ // capacitor_ = capacitor_loader.createSharedInstance("super_capacitor::XidiCapacitorDriver");
44+ // capacitor_->init(can_interface);
45+ if (capacitor_device == " xidi" ){
46+ capacitor_ = std::make_shared<super_capacitor::XidiCapacitorDriver>();
47+ capacitor_->init (can_interface);
48+ }else {
49+ RCLCPP_ERROR (node_->get_logger (), " Unknown capacitor device: %s" , capacitor_device.c_str ());
50+ }
51+
4652 }
4753 catch (pluginlib::PluginlibException& ex)
4854 {
4955 printf (" The plugin failed to load for some reason. Error: %s\n " , ex.what ());
5056 }
51- RCLCPP_INFO (this ->get_logger (), " SuperCapacitorController initialized" );
57+ RCLCPP_INFO (node_->get_logger (), " SuperCapacitorController initialized" );
58+ }
59+
60+ rclcpp::node_interfaces::NodeBaseInterface::SharedPtr SuperCapacitorController::get_node_base_interface () const
61+ {
62+ return node_->get_node_base_interface ();
5263}
5364
5465void SuperCapacitorController::goal_sub_callback (const device_interface::msg::CapacitorCmd::SharedPtr msg){
55- // RCLCPP_INFO(this->get_logger(), "Received super capacitor goal");
5666 target_power_.store (msg->target_power ,std::memory_order_relaxed);
5767 referee_power_.store (msg->referee_power ,std::memory_order_relaxed);
5868 capacitor_->set_target_power (target_power_.load (std::memory_order_relaxed));
@@ -79,4 +89,8 @@ void SuperCapacitorController::pub_state() {
7989
8090SuperCapacitorController::~SuperCapacitorController () {
8191 // Destructor implementation
82- }
92+ }
93+
94+ #include " rclcpp_components/register_node_macro.hpp"
95+
96+ RCLCPP_COMPONENTS_REGISTER_NODE (SuperCapacitorController)
0 commit comments