battery_manager.hpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // battery_manager.hpp
  2. #ifndef BATTERY_MANAGER_HPP
  3. #define BATTERY_MANAGER_HPP
  4. #include <rclcpp/rclcpp.hpp>
  5. #include <sensor_msgs/msg/battery_state.hpp>
  6. #include "wheelchair_types.hpp"
  7. #include <functional>
  8. class BatteryManager
  9. {
  10. public:
  11. using BatteryStateCallback = std::function<void(BatteryState, float)>;
  12. using LowBatteryCallback = std::function<void(BatteryState, float)>;
  13. BatteryManager(rclcpp::Node* node,
  14. float low_threshold = 20.0f,
  15. float critical_threshold = 10.0f);
  16. void initialize();
  17. void updateFromMessage(const sensor_msgs::msg::BatteryState::SharedPtr msg);
  18. void setBatteryStateCallback(BatteryStateCallback callback);
  19. void setLowBatteryCallback(LowBatteryCallback callback);
  20. BatteryState getBatteryState() const { return battery_state_; }
  21. float getBatteryPercentage() const { return battery_percentage_; }
  22. float getLowThreshold() const { return low_battery_threshold_; }
  23. float getCriticalThreshold() const { return critical_battery_threshold_; }
  24. std::string stateToString() const;
  25. private:
  26. rclcpp::Node* node_;
  27. rclcpp::Subscription<sensor_msgs::msg::BatteryState>::SharedPtr battery_sub_;
  28. BatteryState battery_state_;
  29. float battery_percentage_;
  30. float low_battery_threshold_;
  31. float critical_battery_threshold_;
  32. BatteryStateCallback battery_state_callback_;
  33. LowBatteryCallback low_battery_callback_;
  34. void batteryStateCallback(const sensor_msgs::msg::BatteryState::SharedPtr msg);
  35. void updateBatteryState(float percentage);
  36. void checkBatteryThresholds();
  37. std::string batteryStateToString(BatteryState state) const;
  38. };
  39. #endif // BATTERY_MANAGER_HPPs