|
|
@@ -1,10 +1,12 @@
|
|
|
import time
|
|
|
-import pigpio
|
|
|
from robot_control.src.utils.config import RobotConfig
|
|
|
from robot_control.src.api.gpio import GPIOInterface
|
|
|
+import logging
|
|
|
+
|
|
|
+logger = logging.getLogger(__name__)
|
|
|
|
|
|
class PumpController:
|
|
|
- def __init__(self, config:RobotConfig, gpio:GPIOInterface, logger):
|
|
|
+ def __init__(self, config:RobotConfig, gpio:GPIOInterface):
|
|
|
self.logger = logger
|
|
|
self.pressure_threshold_on = config.vacuum.min_pressure_bar
|
|
|
self.pressure_threshold_off = config.vacuum.max_pressure_bar
|
|
|
@@ -17,22 +19,16 @@ class PumpController:
|
|
|
self.pump_active = False
|
|
|
self.gpio = gpio
|
|
|
|
|
|
- def _convert_to_bar(self, value: float) -> float:
|
|
|
- """Convert sensor value (0-1.6) to bar (-1 to 1)"""
|
|
|
- return (value - 0.8) * 2.5
|
|
|
-
|
|
|
- def check_endeffector_state(self, value) -> bool:
|
|
|
- pressure_bar = self._convert_to_bar(value)
|
|
|
+ def check_endeffector_state(self, pressure_bar) -> bool:
|
|
|
return pressure_bar < self.gripping_threshold
|
|
|
|
|
|
- def handle_tank_reading(self, value):
|
|
|
- pressure_bar = self._convert_to_bar(value)
|
|
|
+ def handle_tank_reading(self, pressure_bar):
|
|
|
current_time = time.time()
|
|
|
|
|
|
# Check if pump needs to be deactivated due to watchdog timeout
|
|
|
if self.pump_active and self.pump_last_activated and \
|
|
|
(current_time - self.pump_last_activated > self.pump_watchdog_timeout):
|
|
|
- self.logger.warning("Pump deactivated due to watchdog timeout")
|
|
|
+ logger.warning("Pump deactivated due to watchdog timeout")
|
|
|
self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
self.pump_active = False
|
|
|
self.pump_last_activated = None
|
|
|
@@ -40,19 +36,18 @@ class PumpController:
|
|
|
|
|
|
# Activate pump if pressure is above the threshold (lower value is more vacuum)
|
|
|
if not self.pump_active and pressure_bar > self.pressure_threshold_on:
|
|
|
- self.logger.info("Activating pump due to pressure threshold")
|
|
|
+ logger.info("Activating pump due to pressure threshold")
|
|
|
self.gpio.set_pin(self.pump_pin, 1) # Turn on pump
|
|
|
self.pump_active = True
|
|
|
self.pump_last_activated = current_time
|
|
|
|
|
|
# Deactivate pump if pressure is below the threshold
|
|
|
elif self.pump_active and pressure_bar < self.pressure_threshold_off:
|
|
|
- self.logger.info("Deactivating pump due to pressure threshold")
|
|
|
+ logger.info("Deactivating pump due to pressure threshold")
|
|
|
self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
self.pump_active = False
|
|
|
self.pump_last_activated = None
|
|
|
|
|
|
def cleanup(self):
|
|
|
- self.pi.write(self.pump_pin, 0) # Ensure pump is off
|
|
|
- self.pi.stop() # Disconnect from pigpio daemon
|
|
|
- self.logger.info("Pigpio cleanup completed")
|
|
|
+ self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
+ logger.info("Pigpio cleanup completed")
|