|
@@ -3,19 +3,26 @@ from robot_control.src.utils.config import RobotConfig
|
|
|
from robot_control.src.api.gpio import GPIOInterface
|
|
from robot_control.src.api.gpio import GPIOInterface
|
|
|
import logging
|
|
import logging
|
|
|
|
|
|
|
|
|
|
+logging.basicConfig(
|
|
|
|
|
+ level=logging.DEBUG,
|
|
|
|
|
+ format='%(asctime)s - %(module)s - %(levelname)s - %(message)s',
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
logger = logging.getLogger(__name__)
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
class PumpController:
|
|
class PumpController:
|
|
|
def __init__(self, config:RobotConfig, gpio:GPIOInterface):
|
|
def __init__(self, config:RobotConfig, gpio:GPIOInterface):
|
|
|
self.logger = logger
|
|
self.logger = logger
|
|
|
- self.pressure_threshold_on = config.vacuum.min_pressure_bar
|
|
|
|
|
- self.pressure_threshold_off = config.vacuum.max_pressure_bar
|
|
|
|
|
|
|
+ self.pressure_threshold_on = config.vacuum.max_pressure_bar
|
|
|
|
|
+ self.pressure_threshold_off = config.vacuum.min_pressure_bar
|
|
|
|
|
+ self.max_pump_time_s = config.vacuum.max_pump_time_s
|
|
|
self.pump_watchdog_timeout = config.vacuum.pump_watchdog_timeout_s
|
|
self.pump_watchdog_timeout = config.vacuum.pump_watchdog_timeout_s
|
|
|
self.gripping_threshold = config.vacuum.gripping_threshold_bar
|
|
self.gripping_threshold = config.vacuum.gripping_threshold_bar
|
|
|
|
|
|
|
|
gpio_config = config.gpio
|
|
gpio_config = config.gpio
|
|
|
self.pump_pin = gpio_config.pump_pin
|
|
self.pump_pin = gpio_config.pump_pin
|
|
|
- self.pump_last_activated = None
|
|
|
|
|
|
|
+ self.last_activated_time = None
|
|
|
|
|
+ self.watchdog_trigger_time = None
|
|
|
self.pump_active = False
|
|
self.pump_active = False
|
|
|
self.gpio = gpio
|
|
self.gpio = gpio
|
|
|
|
|
|
|
@@ -25,13 +32,22 @@ class PumpController:
|
|
|
def handle_tank_reading(self, pressure_bar):
|
|
def handle_tank_reading(self, pressure_bar):
|
|
|
current_time = time.time()
|
|
current_time = time.time()
|
|
|
|
|
|
|
|
|
|
+ if self.watchdog_trigger_time and \
|
|
|
|
|
+ (current_time - self.watchdog_trigger_time < self.pump_watchdog_timeout):
|
|
|
|
|
+ logger.debug("Pump keeps being deactivated due to watchdog timeout")
|
|
|
|
|
+ self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
|
|
+ self.pump_active = False
|
|
|
|
|
+ self.last_activated_time = None
|
|
|
|
|
+ return
|
|
|
|
|
+
|
|
|
# Check if pump needs to be deactivated due to watchdog timeout
|
|
# 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):
|
|
|
|
|
|
|
+ if self.pump_active and self.last_activated_time and \
|
|
|
|
|
+ (current_time - self.last_activated_time > self.max_pump_time_s):
|
|
|
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.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
self.pump_active = False
|
|
self.pump_active = False
|
|
|
- self.pump_last_activated = None
|
|
|
|
|
|
|
+ self.watchdog_trigger_time = current_time
|
|
|
|
|
+ self.last_activated_time = None
|
|
|
return
|
|
return
|
|
|
|
|
|
|
|
# Activate pump if pressure is above the threshold (lower value is more vacuum)
|
|
# Activate pump if pressure is above the threshold (lower value is more vacuum)
|
|
@@ -39,14 +55,16 @@ class PumpController:
|
|
|
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.gpio.set_pin(self.pump_pin, 1) # Turn on pump
|
|
|
self.pump_active = True
|
|
self.pump_active = True
|
|
|
- self.pump_last_activated = current_time
|
|
|
|
|
|
|
+ self.watchdog_trigger_time = None
|
|
|
|
|
+ self.last_activated_time = current_time
|
|
|
|
|
|
|
|
# Deactivate pump if pressure is below the threshold
|
|
# Deactivate pump if pressure is below the threshold
|
|
|
elif self.pump_active and pressure_bar < self.pressure_threshold_off:
|
|
elif self.pump_active and pressure_bar < self.pressure_threshold_off:
|
|
|
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.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
|
self.pump_active = False
|
|
self.pump_active = False
|
|
|
- self.pump_last_activated = None
|
|
|
|
|
|
|
+ self.watchdog_trigger_time = None
|
|
|
|
|
+ self.last_activated_time = None
|
|
|
|
|
|
|
|
def cleanup(self):
|
|
def cleanup(self):
|
|
|
self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|
|
self.gpio.set_pin(self.pump_pin, 0) # Turn off pump
|