From ce0307a35feaef49b08a5eba57223729391a44b8 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:16:09 -0500 Subject: [PATCH 01/14] leds :) --- config.py | 39 +++++++++++- sensors/leds.py | 154 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 sensors/leds.py diff --git a/config.py b/config.py index 3302e4c..ea36033 100644 --- a/config.py +++ b/config.py @@ -75,4 +75,41 @@ brake_mode=True, current_limit=40, kV=0.12 -) \ No newline at end of file +) + +#Leds +leds_id = 0 #placeholder +leds_size = 28 #placeholder + +class LEDType: + + def KSolid(r, g, b): + return {"type": 1, "color": {"r": r, "g": g, "b": b}} + + def KRainbow(): + return { + 'type': 2 + } + + def KMask(r1, g1, b1, r2, g2, b2): + return { + "type": 3, + "color": {"r1": r1, "g1": g1, "b1": b1, "r2": r2, "g2": g2, "b2": b2}, + } + + def KBlink(r, g, b): + return {"type": 4, "color": {"r": r, "g": g, "b": b}} + + def __getitem__(self, item): + if item == 1: + return self.KSolid + elif item == 2: + return self.KRainbow + elif item == 3: + return self.KMask + elif item == 4: + return self.KBlink + else: + raise KeyError(f"Type {item} is not supported.") + + diff --git a/sensors/leds.py b/sensors/leds.py new file mode 100644 index 0000000..0b048df --- /dev/null +++ b/sensors/leds.py @@ -0,0 +1,154 @@ +from wpilib import AddressableLED, PowerDistribution, SmartDashboard +import math, config + +class ALeds: + m_led: AddressableLED + + def __init__(self, id: int, size: int ): + self.size = size + self.id = id + self.speed = 5 + self.track_index = self.size / 2 + self.blink_index = 0 + self.brightness = 1 + self.active_mode = None + self.last_active_mode = None + self.last_brightness = None + self.last_speed = None + + + def init(self): + self.m_rainbowFirstPixelHue = 0 + self.led_data = [self.m_ledBuffer for i in range(self.size)] + self.m_led.setLength(self.size) + self.m_led = AddressableLED(self.id) + self.m_ledBuffer = self.m_led.LEDData() + self.m_led.setData(self.led_data) + + SmartDashboard.putBoolean("LEDs Initialized", True) + + def enable(self): + self.m_led.start() + + def disable(self): + self.m_led.stop() + + def set_brightness(self, brightness: float): + self.brightness = brightness + + def get_led_data(self): + return [self.m_led.LEDData() for i in range(self.size)].copy() + + def get_current_cycle(self): + return self.led_data + + def get_current_type(self): + if self.active_mode is None: + return { + 'type': 0, + 'color': { + 'r': 0, + 'g': 0, + 'b': 0 + } + } + return self.active_mode + + def store_current(self): + self.last_active_mode = self.active_mode + self.last_speed = self.speed + self.last_brightness = self.brightness + + def set_LED(self, type, brightness: float = 1.0, speed: int = 5): + self.active_mode = type + self.speed = speed + self.brightness = brightness + + def set_last_current(self): + self.active_mode = self.last_active_mode + self.speed = self.last_speed + self.brightness = self.last_brightness + + def match(self, type: config.LEDType): + res = self.get_led_data() + match type['type']: + case 1: + color = type['color'] + res = self.set_Solid(color['r'], color['g'], color['b']) + case 2: + res = self.set_Rainbow() + case 3: + color = type['color'] + res = self.set_Mask(color['r1'], color['g1'], color['b1'], color['r2'], color['g2'], color['b2']) + case 4: + color = type['color'] + res = self.set_Blink(color['r'], color['g'], color['b']) + case _: + res = self.set_Rainbow() + + return res + + def cycle(self): + self.m_led.setData(self.match(self.active_mode)) + + def set_Mask(self, r1, g1, b1, r2, b2, g2): + mask = self.get_led_data() + for i in range(self.size): + mask[i].setRGB(r1, g1, b1) + + for i in range(self.mask_index, self.size, 4): + mask[i].setRGB(r2, g2, b2) + + self.mask_index += 1 + + if self.mask_index > self.size: + self.mask_index = 0 + + return mask + + def set_Rainbow_Ladder(self): + rainbow = self.get_led_data() + for i in range(self.size): + hue = math.floor((self.m_rainbowFirstPixelHue + (i * 180 / self.size)) % 180) + rainbow[i].setHSV(hue, 255, 128) + + #move rainbow + self.m_rainbowFirstPixelHue += self.speed + + self.m_rainbowFirstPixelHue %= 180 + + return rainbow + + def set_Solid(self, r: int, g: int, b: int): + + solid = self.get_led_data() + for i in range(self.size): + solid[i].setRGB(r, g, b) + + return solid + + def set_Blink(self, r, g, b): + blink = self.get_led_data() + if self.blink_index / (2 * self.speed) <= .5: + for i in range(self.size): + blink[i].setRGB(r, g, b) + else: + for i in range(self.size): + blink[i].setRGB(0, 0, 0) + + self.blink_index += 1 + if self.blink_index > 2 * self.speed: + self.blink_index = 0 + + return blink + +class SLEDS: + """ + Switchable LEDS from Switchable PDH + """ + + def on(self): + PowerDistribution.setSwitchableChannel(True) + + def off(self): + PowerDistribution.setSwitchableChannel(False) \ No newline at end of file From 72fe773bfbda8844a6c44b274eb3fa42e05a047a Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:06:12 -0500 Subject: [PATCH 02/14] fixed names --- sensors/leds.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/sensors/leds.py b/sensors/leds.py index 0b048df..145f896 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -2,7 +2,7 @@ import math, config class ALeds: - m_led: AddressableLED + led: AddressableLED def __init__(self, id: int, size: int ): self.size = size @@ -19,25 +19,25 @@ def __init__(self, id: int, size: int ): def init(self): self.m_rainbowFirstPixelHue = 0 - self.led_data = [self.m_ledBuffer for i in range(self.size)] - self.m_led.setLength(self.size) - self.m_led = AddressableLED(self.id) - self.m_ledBuffer = self.m_led.LEDData() - self.m_led.setData(self.led_data) + self.led_data = [self.ledBuffer for i in range(self.size)] + self.led.setLength(self.size) + self.led = AddressableLED(self.id) + self.ledBuffer = self.m_led.LEDData() + self.led.setData(self.led_data) SmartDashboard.putBoolean("LEDs Initialized", True) def enable(self): - self.m_led.start() + self.led.start() def disable(self): - self.m_led.stop() + self.led.stop() def set_brightness(self, brightness: float): self.brightness = brightness def get_led_data(self): - return [self.m_led.LEDData() for i in range(self.size)].copy() + return [self.led.LEDData() for i in range(self.size)].copy() def get_current_cycle(self): return self.led_data @@ -89,7 +89,7 @@ def match(self, type: config.LEDType): return res def cycle(self): - self.m_led.setData(self.match(self.active_mode)) + self.led.setData(self.match(self.active_mode)) def set_Mask(self, r1, g1, b1, r2, b2, g2): mask = self.get_led_data() From f9d5ecfa320a89a55273c552518151e72ba016cf Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 22 Jan 2025 15:07:52 -0500 Subject: [PATCH 03/14] fixed m_ --- sensors/leds.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sensors/leds.py b/sensors/leds.py index 145f896..728d60c 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -4,6 +4,10 @@ class ALeds: led: AddressableLED + """ + + """ + def __init__(self, id: int, size: int ): self.size = size self.id = id @@ -18,11 +22,11 @@ def __init__(self, id: int, size: int ): def init(self): - self.m_rainbowFirstPixelHue = 0 + self.rainbowFirstPixelHue = 0 self.led_data = [self.ledBuffer for i in range(self.size)] self.led.setLength(self.size) self.led = AddressableLED(self.id) - self.ledBuffer = self.m_led.LEDData() + self.ledBuffer = self.led.LEDData() self.led.setData(self.led_data) SmartDashboard.putBoolean("LEDs Initialized", True) @@ -109,13 +113,13 @@ def set_Mask(self, r1, g1, b1, r2, b2, g2): def set_Rainbow_Ladder(self): rainbow = self.get_led_data() for i in range(self.size): - hue = math.floor((self.m_rainbowFirstPixelHue + (i * 180 / self.size)) % 180) + hue = math.floor((self.rainbowFirstPixelHue + (i * 180 / self.size)) % 180) rainbow[i].setHSV(hue, 255, 128) #move rainbow - self.m_rainbowFirstPixelHue += self.speed + self.rainbowFirstPixelHue += self.speed - self.m_rainbowFirstPixelHue %= 180 + self.rainbowFirstPixelHue %= 180 return rainbow From 9eefa370439c24c1bb55e105ef9710f3f87f9c7a Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:10:46 -0500 Subject: [PATCH 04/14] Update leds.py --- sensors/leds.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sensors/leds.py b/sensors/leds.py index 728d60c..7bb3b00 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -1,14 +1,16 @@ from wpilib import AddressableLED, PowerDistribution, SmartDashboard import math, config -class ALeds: - led: AddressableLED +class ALeds(): """ + Addressable LEDs """ def __init__(self, id: int, size: int ): + + self.size = size self.id = id self.speed = 5 From 5f0a418505cc1a582313d052bb97152dacded8ed Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Mon, 27 Jan 2025 16:13:14 -0500 Subject: [PATCH 05/14] i'm not done with the LEDs past rainbow its like last years code --- config.py | 32 -------------- sensors/leds.py | 109 ++++++++++++++++++------------------------------ 2 files changed, 41 insertions(+), 100 deletions(-) diff --git a/config.py b/config.py index ea36033..a5e9eac 100644 --- a/config.py +++ b/config.py @@ -81,35 +81,3 @@ leds_id = 0 #placeholder leds_size = 28 #placeholder -class LEDType: - - def KSolid(r, g, b): - return {"type": 1, "color": {"r": r, "g": g, "b": b}} - - def KRainbow(): - return { - 'type': 2 - } - - def KMask(r1, g1, b1, r2, g2, b2): - return { - "type": 3, - "color": {"r1": r1, "g1": g1, "b1": b1, "r2": r2, "g2": g2, "b2": b2}, - } - - def KBlink(r, g, b): - return {"type": 4, "color": {"r": r, "g": g, "b": b}} - - def __getitem__(self, item): - if item == 1: - return self.KSolid - elif item == 2: - return self.KRainbow - elif item == 3: - return self.KMask - elif item == 4: - return self.KBlink - else: - raise KeyError(f"Type {item} is not supported.") - - diff --git a/sensors/leds.py b/sensors/leds.py index 7bb3b00..a8abbd1 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -14,22 +14,22 @@ def __init__(self, id: int, size: int ): self.size = size self.id = id self.speed = 5 - self.track_index = self.size / 2 - self.blink_index = 0 self.brightness = 1 - self.active_mode = None - self.last_active_mode = None - self.last_brightness = None - self.last_speed = None def init(self): - self.rainbowFirstPixelHue = 0 - self.led_data = [self.ledBuffer for i in range(self.size)] - self.led.setLength(self.size) + """ + initialize new LED strip connected to PWM port + """ self.led = AddressableLED(self.id) + """ + create new + """ + global ledBuffer self.ledBuffer = self.led.LEDData() - self.led.setData(self.led_data) + self.ledBuffer.setLength(self.size) + + self.led.setData(self.ledBuffer) SmartDashboard.putBoolean("LEDs Initialized", True) @@ -39,17 +39,17 @@ def enable(self): def disable(self): self.led.stop() + def section(self, starting_pixel: int, ending_pixel: int): + self.section = ledBuffer.createView(starting_pixel, ending_pixel) + def set_brightness(self, brightness: float): self.brightness = brightness def get_led_data(self): return [self.led.LEDData() for i in range(self.size)].copy() - def get_current_cycle(self): - return self.led_data - def get_current_type(self): - if self.active_mode is None: + if self.mode is None: return { 'type': 0, 'color': { @@ -58,46 +58,37 @@ def get_current_type(self): 'b': 0 } } - return self.active_mode - - def store_current(self): - self.last_active_mode = self.active_mode - self.last_speed = self.speed - self.last_brightness = self.brightness + return self.mode - def set_LED(self, type, brightness: float = 1.0, speed: int = 5): - self.active_mode = type + def set_LED(self, brightness: float = 1.0, speed: int = 5): self.speed = speed self.brightness = brightness - def set_last_current(self): - self.active_mode = self.last_active_mode - self.speed = self.last_speed - self.brightness = self.last_brightness - - def match(self, type: config.LEDType): - res = self.get_led_data() - match type['type']: - case 1: - color = type['color'] - res = self.set_Solid(color['r'], color['g'], color['b']) - case 2: - res = self.set_Rainbow() - case 3: - color = type['color'] - res = self.set_Mask(color['r1'], color['g1'], color['b1'], color['r2'], color['g2'], color['b2']) - case 4: - color = type['color'] - res = self.set_Blink(color['r'], color['g'], color['b']) - case _: - res = self.set_Rainbow() - - return res - - def cycle(self): - self.led.setData(self.match(self.active_mode)) + def set_Solid(self, r: int, g: int, b: int): + + self.solid = self.LEDPattern.solid(r,g,b) + self.solid.applyTo(self.ledBuffer) + self.led.setData(self.ledBuffer) + + self.mode = "solid" + + def set_Rainbow_Ladder(self): + + self.rainbow = self.LEDPattern.rainbow(self.speed, self.brightness) + """ density of *120* per meter""" + self.LEDSpacing = 1/120.0; + + #scrolls the rainbow + self.scrollingRainbow = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) + + """ + finish this later + """ + self.mode = "rainbow" + def set_Mask(self, r1, g1, b1, r2, b2, g2): + """ mask = self.get_led_data() for i in range(self.size): mask[i].setRGB(r1, g1, b1) @@ -110,28 +101,10 @@ def set_Mask(self, r1, g1, b1, r2, b2, g2): if self.mask_index > self.size: self.mask_index = 0 - return mask - - def set_Rainbow_Ladder(self): - rainbow = self.get_led_data() - for i in range(self.size): - hue = math.floor((self.rainbowFirstPixelHue + (i * 180 / self.size)) % 180) - rainbow[i].setHSV(hue, 255, 128) - - #move rainbow - self.rainbowFirstPixelHue += self.speed + """ - self.rainbowFirstPixelHue %= 180 - - return rainbow - - def set_Solid(self, r: int, g: int, b: int): - - solid = self.get_led_data() - for i in range(self.size): - solid[i].setRGB(r, g, b) - return solid + self.mode = "mask" def set_Blink(self, r, g, b): blink = self.get_led_data() From e0e666af832e54089810e753dca73df7715835c2 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Mon, 27 Jan 2025 17:01:16 -0500 Subject: [PATCH 06/14] (almost) finished LEDs just need to incorporate special robot positioning on field :) --- sensors/leds.py | 72 ++++++++++++++++++++++--------------------------- 1 file changed, 32 insertions(+), 40 deletions(-) diff --git a/sensors/leds.py b/sensors/leds.py index a8abbd1..dca1ec6 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -10,12 +10,15 @@ class ALeds(): def __init__(self, id: int, size: int ): - self.size = size self.id = id self.speed = 5 self.brightness = 1 - + """ density of *120* per meter""" + self.LEDSpacing = 1/120.0 + self.blinkfrequency = 1.5 #seconds + self.rightlimit = 100 + self.leftlimit = 50 def init(self): """ @@ -25,7 +28,6 @@ def init(self): """ create new """ - global ledBuffer self.ledBuffer = self.led.LEDData() self.ledBuffer.setLength(self.size) @@ -39,9 +41,6 @@ def enable(self): def disable(self): self.led.stop() - def section(self, starting_pixel: int, ending_pixel: int): - self.section = ledBuffer.createView(starting_pixel, ending_pixel) - def set_brightness(self, brightness: float): self.brightness = brightness @@ -75,51 +74,44 @@ def set_Solid(self, r: int, g: int, b: int): def set_Rainbow_Ladder(self): self.rainbow = self.LEDPattern.rainbow(self.speed, self.brightness) - """ density of *120* per meter""" - self.LEDSpacing = 1/120.0; - + #scrolls the rainbow self.scrollingRainbow = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) - """ - finish this later - """ + self.scrollingRainbow.applyTo(self.ledBuffer) self.mode = "rainbow" - def set_Mask(self, r1, g1, b1, r2, b2, g2): - """ - mask = self.get_led_data() - for i in range(self.size): - mask[i].setRGB(r1, g1, b1) - - for i in range(self.mask_index, self.size, 4): - mask[i].setRGB(r2, g2, b2) - - self.mask_index += 1 - - if self.mask_index > self.size: - self.mask_index = 0 - - """ + def set_Blink(self, r, g, b): + self.base = self.LEDPattern.discontinousGradient(r,g,b) + self.pattern = self.base.blink(self.blinkfrequency) + self.base.applyTo(self.ledBuffer) + self.led.setData(self.baseledBuffer) - self.mode = "mask" + self.mode = "blink" - def set_Blink(self, r, g, b): - blink = self.get_led_data() - if self.blink_index / (2 * self.speed) <= .5: - for i in range(self.size): - blink[i].setRGB(r, g, b) - else: - for i in range(self.size): - blink[i].setRGB(0, 0, 0) + def field_position(self, r1, g1, b1, r2, b2, g2): + """ + identify where the robot is on the field - self.blink_index += 1 - if self.blink_index > 2 * self.speed: - self.blink_index = 0 + """ + self.robotposition = 0 + + if self.robotposition > self.rightlimit: + + #to do: left side green, right side red - return blink + self.mode = "robot position on starting line is too far right" + + elif self.robotposition < self.leftlimit: + + #to do: left side red, right side green + self.mode = "robot positioning on starting line is too far left" + + else: + self.set_solid(0, 100, 0) # robot is where it needs to be + class SLEDS: """ From fedf63078a631ddd2d10f0ce545d35c8d5270287 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:12:26 -0500 Subject: [PATCH 07/14] updated errors in code --- config.py | 7 ++++-- sensors/leds.py | 61 +++++++++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 32 deletions(-) diff --git a/config.py b/config.py index a5e9eac..4331837 100644 --- a/config.py +++ b/config.py @@ -79,5 +79,8 @@ #Leds leds_id = 0 #placeholder -leds_size = 28 #placeholder - +leds_size = 0 #placeholder +led_spacing = 1/120.0 # placeholder, density of __ per meter +led_speed = 5 +led_brightness = 128 +led_saturation = 255 \ No newline at end of file diff --git a/sensors/leds.py b/sensors/leds.py index dca1ec6..a0ce6d8 100644 --- a/sensors/leds.py +++ b/sensors/leds.py @@ -1,33 +1,42 @@ from wpilib import AddressableLED, PowerDistribution, SmartDashboard import math, config -class ALeds(): +class ALeds: """ Addressable LEDs """ - def __init__(self, id: int, size: int ): + def __init__(self, + id: int, + size: int, + speed: int, + brightness: int, + saturation: int, + spacing: int, + blink_frequency: int, + rightlimit, + leftlimit + ): self.size = size self.id = id - self.speed = 5 - self.brightness = 1 - """ density of *120* per meter""" - self.LEDSpacing = 1/120.0 - self.blinkfrequency = 1.5 #seconds - self.rightlimit = 100 - self.leftlimit = 50 + self.speed = speed + self.brightness = brightness + self.saturation = saturation + self.LEDSpacing = spacing + self.blink_frequency = blink_frequency #seconds + self.rightlimit = rightlimit + self.leftlimit = leftlimit + self.mode = None def init(self): """ initialize new LED strip connected to PWM port """ self.led = AddressableLED(self.id) - """ - create new - """ + self.ledBuffer = self.led.LEDData() self.ledBuffer.setLength(self.size) @@ -44,24 +53,14 @@ def disable(self): def set_brightness(self, brightness: float): self.brightness = brightness + def set_speed(self, speed: float): + self.speed = speed + def get_led_data(self): return [self.led.LEDData() for i in range(self.size)].copy() def get_current_type(self): - if self.mode is None: - return { - 'type': 0, - 'color': { - 'r': 0, - 'g': 0, - 'b': 0 - } - } return self.mode - - def set_LED(self, brightness: float = 1.0, speed: int = 5): - self.speed = speed - self.brightness = brightness def set_Solid(self, r: int, g: int, b: int): @@ -73,21 +72,23 @@ def set_Solid(self, r: int, g: int, b: int): def set_Rainbow_Ladder(self): - self.rainbow = self.LEDPattern.rainbow(self.speed, self.brightness) + self.rainbow = self.LEDPattern.rainbow(self.saturation, self.brightness) #scrolls the rainbow self.scrollingRainbow = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) self.scrollingRainbow.applyTo(self.ledBuffer) + self.led.setData(self.ledBuffer) self.mode = "rainbow" - def set_Blink(self, r, g, b): + def set_Blink(self, r: int, g: int, b: int): self.base = self.LEDPattern.discontinousGradient(r,g,b) - self.pattern = self.base.blink(self.blinkfrequency) - self.base.applyTo(self.ledBuffer) - self.led.setData(self.baseledBuffer) + self.pattern = self.base.blink(self.blink_frequency) + + self.pattern.applyTo(self.ledBuffer) + self.led.setData(self.ledBuffer) self.mode = "blink" From 8ab03bf5a208c13036828fafc59bfa8ba0512d11 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:47:07 -0500 Subject: [PATCH 08/14] led stuff --- config.py | 8 ++-- robot.py | 3 +- robot_systems.py | 13 ++++-- subsystem/__init__.py | 3 +- {sensors => subsystem}/leds.py | 73 ++++++++++++---------------------- 5 files changed, 41 insertions(+), 59 deletions(-) rename {sensors => subsystem}/leds.py (63%) diff --git a/config.py b/config.py index 4331837..eea7a55 100644 --- a/config.py +++ b/config.py @@ -80,7 +80,7 @@ #Leds leds_id = 0 #placeholder leds_size = 0 #placeholder -led_spacing = 1/120.0 # placeholder, density of __ per meter -led_speed = 5 -led_brightness = 128 -led_saturation = 255 \ No newline at end of file +leds_spacing = 1/120.0 # placeholder, density of __ per meter +leds_speed = 5 +leds_brightness = 128 +leds_saturation = 255 \ No newline at end of file diff --git a/robot.py b/robot.py index c129005..8fb9475 100644 --- a/robot.py +++ b/robot.py @@ -65,9 +65,8 @@ def init_subsystems(): self.log.error(e) self.nt.getTable("errors").putString("subsystem init", str(e)) raise e - + Robot.led.set_Solid(255,215,0) self.log.complete("Robot initialized") - ... def robotPeriodic(self): if self.isSimulation(): diff --git a/robot_systems.py b/robot_systems.py index 96bbc38..0214d6c 100644 --- a/robot_systems.py +++ b/robot_systems.py @@ -1,10 +1,19 @@ import subsystem import sensors import wpilib +import config class Robot: drivetrain = subsystem.Drivetrain() + led = subsystem.AddressableLEDStrip( + config.leds_id, + config.leds_size, + config.leds_speed, + config.leds_brightness, + config.leds_saturation, + config.leds_spacing, + ) class Pneumatics: @@ -15,10 +24,6 @@ class Sensors: pass -class LEDs: - pass - - class PowerDistribution: pass diff --git a/subsystem/__init__.py b/subsystem/__init__.py index 4cd42c8..092302c 100644 --- a/subsystem/__init__.py +++ b/subsystem/__init__.py @@ -1 +1,2 @@ -from subsystem.drivetrain import Drivetrain \ No newline at end of file +from subsystem.drivetrain import Drivetrain +from subsystem.leds import AddressableLEDStrip \ No newline at end of file diff --git a/sensors/leds.py b/subsystem/leds.py similarity index 63% rename from sensors/leds.py rename to subsystem/leds.py index a0ce6d8..1b95396 100644 --- a/sensors/leds.py +++ b/subsystem/leds.py @@ -1,12 +1,9 @@ from wpilib import AddressableLED, PowerDistribution, SmartDashboard import math, config +from toolkit.subsystem import Subsystem -class ALeds: - """ - Addressable LEDs - - """ +class AddressableLEDStrip(Subsystem): def __init__(self, id: int, @@ -15,21 +12,21 @@ def __init__(self, brightness: int, saturation: int, spacing: int, - blink_frequency: int, - rightlimit, - leftlimit + # blink_frequency: int, + # rightlimit, + # leftlimit ): self.size = size self.id = id - self.speed = speed + #self.speed = speed self.brightness = brightness self.saturation = saturation self.LEDSpacing = spacing - self.blink_frequency = blink_frequency #seconds - self.rightlimit = rightlimit - self.leftlimit = leftlimit - self.mode = None + #self.blink_frequency = blink_frequency #seconds + #self.rightlimit = rightlimit + #self.leftlimit = leftlimit + self.pattern = None def init(self): """ @@ -37,15 +34,15 @@ def init(self): """ self.led = AddressableLED(self.id) - self.ledBuffer = self.led.LEDData() - self.ledBuffer.setLength(self.size) - - self.led.setData(self.ledBuffer) + self.ledBuffer = [self.led.LEDData() for i in self.size] SmartDashboard.putBoolean("LEDs Initialized", True) def enable(self): - self.led.start() + ''' + be sure to enable + ''' + self.led.start() def disable(self): self.led.stop() @@ -59,38 +56,25 @@ def set_speed(self, speed: float): def get_led_data(self): return [self.led.LEDData() for i in range(self.size)].copy() - def get_current_type(self): - return self.mode + # def get_current_type(self): + # return self.mode def set_Solid(self, r: int, g: int, b: int): - self.solid = self.LEDPattern.solid(r,g,b) - self.solid.applyTo(self.ledBuffer) - self.led.setData(self.ledBuffer) - - self.mode = "solid" + self.pattern = self.LEDPattern.solid(r,g,b) def set_Rainbow_Ladder(self): - + """ + creates a scrolling rainbow on LEDs + """ self.rainbow = self.LEDPattern.rainbow(self.saturation, self.brightness) - #scrolls the rainbow - self.scrollingRainbow = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) - - self.scrollingRainbow.applyTo(self.ledBuffer) - self.led.setData(self.ledBuffer) - - self.mode = "rainbow" + self.pattern = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) def set_Blink(self, r: int, g: int, b: int): self.base = self.LEDPattern.discontinousGradient(r,g,b) self.pattern = self.base.blink(self.blink_frequency) - - self.pattern.applyTo(self.ledBuffer) - self.led.setData(self.ledBuffer) - - self.mode = "blink" def field_position(self, r1, g1, b1, r2, b2, g2): """ @@ -112,15 +96,8 @@ def field_position(self, r1, g1, b1, r2, b2, g2): else: self.set_solid(0, 100, 0) # robot is where it needs to be - - -class SLEDS: - """ - Switchable LEDS from Switchable PDH - """ - def on(self): - PowerDistribution.setSwitchableChannel(True) + def periodic(self): - def off(self): - PowerDistribution.setSwitchableChannel(False) \ No newline at end of file + self.pattern.applyTo(self.ledBuffer) + self.led.setData(self.ledBuffer) From 656f9099ebe0ce931468607fe5ad1f0ae6c54ab4 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Thu, 13 Feb 2025 16:22:10 -0500 Subject: [PATCH 09/14] LEDs reader/writer, added alternate() --- config.py | 4 ++-- robot.py | 4 ++-- subsystem/leds.py | 52 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 42 insertions(+), 18 deletions(-) diff --git a/config.py b/config.py index eea7a55..74b022d 100644 --- a/config.py +++ b/config.py @@ -78,8 +78,8 @@ ) #Leds -leds_id = 0 #placeholder -leds_size = 0 #placeholder +leds_id = 8 #placeholder +leds_size = 27 #placeholder leds_spacing = 1/120.0 # placeholder, density of __ per meter leds_speed = 5 leds_brightness = 128 diff --git a/robot.py b/robot.py index 8fb9475..39c0c2d 100644 --- a/robot.py +++ b/robot.py @@ -6,7 +6,7 @@ import command import config import constants -from robot_systems import Robot, Pneumatics, Sensors, LEDs, PowerDistribution, Field +from robot_systems import Robot, Pneumatics, Sensors, PowerDistribution, Field import sensors import subsystem import utils @@ -65,7 +65,7 @@ def init_subsystems(): self.log.error(e) self.nt.getTable("errors").putString("subsystem init", str(e)) raise e - Robot.led.set_Solid(255,215,0) + Robot.led.set_Solid(255,215,0) #gold self.log.complete("Robot initialized") def robotPeriodic(self): diff --git a/subsystem/leds.py b/subsystem/leds.py index 1b95396..a641933 100644 --- a/subsystem/leds.py +++ b/subsystem/leds.py @@ -1,7 +1,7 @@ -from wpilib import AddressableLED, PowerDistribution, SmartDashboard -import math, config +from wpilib import AddressableLED, SmartDashboard, Color, LEDPattern +import math from toolkit.subsystem import Subsystem - +import ntcore class AddressableLEDStrip(Subsystem): @@ -27,6 +27,7 @@ def __init__(self, #self.rightlimit = rightlimit #self.leftlimit = leftlimit self.pattern = None + self.mode = "None" def init(self): """ @@ -34,8 +35,8 @@ def init(self): """ self.led = AddressableLED(self.id) - self.ledBuffer = [self.led.LEDData() for i in self.size] - + self.ledBuffer = [self.led.LEDData() for i in range(self.size)] + self.led.enable() SmartDashboard.putBoolean("LEDs Initialized", True) def enable(self): @@ -56,25 +57,40 @@ def set_speed(self, speed: float): def get_led_data(self): return [self.led.LEDData() for i in range(self.size)].copy() - # def get_current_type(self): - # return self.mode + def get_current_type(self): + #return self.pattern/mode + pass def set_Solid(self, r: int, g: int, b: int): - self.pattern = self.LEDPattern.solid(r,g,b) + self.pattern = LEDPattern.solid(Color(r,g,b)) + self.mode = f"Solid r:{r} g:{g} b:{b}" + + def set_Alternate(self, r1: int, g1: int, b1: int, r2:int, g2:int, b2: int): + + self.alternate = [] + for i in range(self.size): + if i % 2 == 0: + self.alternate.append((i/self.size, Color(r1, g1, b1))) + elif i % 2 == 1: + self.alternate.append((i/self.size, Color(r2, g2, b2))) + + self.pattern = LEDPattern.steps(self.alternate) def set_Rainbow_Ladder(self): """ creates a scrolling rainbow on LEDs """ - self.rainbow = self.LEDPattern.rainbow(self.saturation, self.brightness) + self.rainbow = LEDPattern.rainbow(self.saturation, self.brightness) self.pattern = self.rainbow.scrollAtAbsoluteSpeed(self.speed, self.LEDSpacing) - + self.mode = "Rainbow Ladder" + def set_Blink(self, r: int, g: int, b: int): - self.base = self.LEDPattern.discontinousGradient(r,g,b) - self.pattern = self.base.blink(self.blink_frequency) + self.base = LEDPattern.discontinousGradient(r,g,b) + self.pattern = self.base.blink(self.blink_frequency) + self.mode = f"Blink r:{r} g:{g} b:{b}" def field_position(self, r1, g1, b1, r2, b2, g2): """ @@ -95,9 +111,17 @@ def field_position(self, r1, g1, b1, r2, b2, g2): self.mode = "robot positioning on starting line is too far left" else: - self.set_solid(0, 100, 0) # robot is where it needs to be + self.set_Solid(0, 100, 0) # robot is where it needs to be def periodic(self): - self.pattern.applyTo(self.ledBuffer) + self.update_tables() + def set_pattern_writer(i: int, my_color: Color) -> None: + self.ledBuffer[i].setLED(my_color) + ledreader= LEDPattern.LEDReader(self.ledBuffer.__getitem__, self.size) + self.pattern.applyTo(ledreader, set_pattern_writer) self.led.setData(self.ledBuffer) + + def update_tables(self): + self.table = ntcore.NetworkTableInstance.getDefault().getTable("LEDS") + self.table.putString("mode", self.mode) \ No newline at end of file From 77ffc347c2d65469bf5eb1bec7e5b27cfbd07e35 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Fri, 14 Feb 2025 16:15:54 -0500 Subject: [PATCH 10/14] fixed colors --- subsystem/leds.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/subsystem/leds.py b/subsystem/leds.py index a641933..95958ba 100644 --- a/subsystem/leds.py +++ b/subsystem/leds.py @@ -63,7 +63,7 @@ def get_current_type(self): def set_Solid(self, r: int, g: int, b: int): - self.pattern = LEDPattern.solid(Color(r,g,b)) + self.pattern = LEDPattern.solid(Color(r/255, g/255, b/255)) self.mode = f"Solid r:{r} g:{g} b:{b}" def set_Alternate(self, r1: int, g1: int, b1: int, r2:int, g2:int, b2: int): @@ -71,11 +71,12 @@ def set_Alternate(self, r1: int, g1: int, b1: int, r2:int, g2:int, b2: int): self.alternate = [] for i in range(self.size): if i % 2 == 0: - self.alternate.append((i/self.size, Color(r1, g1, b1))) + self.alternate.append((i/self.size, Color(r1/255, g1/255, b1/255))) elif i % 2 == 1: - self.alternate.append((i/self.size, Color(r2, g2, b2))) + self.alternate.append((i/self.size, Color(r2/255, g2/255, b2/255))) self.pattern = LEDPattern.steps(self.alternate) + self.mode = f"Alternate" def set_Rainbow_Ladder(self): """ @@ -88,7 +89,7 @@ def set_Rainbow_Ladder(self): def set_Blink(self, r: int, g: int, b: int): - self.base = LEDPattern.discontinousGradient(r,g,b) + self.base = LEDPattern.discontinousGradient(r/255, g/255, b/255) self.pattern = self.base.blink(self.blink_frequency) self.mode = f"Blink r:{r} g:{g} b:{b}" From 4b274f40ad4e6d585b24b9bbd7ccd6e2d722cade Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Tue, 18 Feb 2025 17:18:32 -0500 Subject: [PATCH 11/14] updated --- config.py | 3 ++- robot_systems.py | 1 + subsystem/leds.py | 42 ++++++++++-------------------------------- 3 files changed, 13 insertions(+), 33 deletions(-) diff --git a/config.py b/config.py index 74b022d..991044b 100644 --- a/config.py +++ b/config.py @@ -83,4 +83,5 @@ leds_spacing = 1/120.0 # placeholder, density of __ per meter leds_speed = 5 leds_brightness = 128 -leds_saturation = 255 \ No newline at end of file +leds_saturation = 255 +leds_blink_frequency = 0.5 \ No newline at end of file diff --git a/robot_systems.py b/robot_systems.py index 0214d6c..882971a 100644 --- a/robot_systems.py +++ b/robot_systems.py @@ -13,6 +13,7 @@ class Robot: config.leds_brightness, config.leds_saturation, config.leds_spacing, + config.leds_blink_frequency ) diff --git a/subsystem/leds.py b/subsystem/leds.py index 95958ba..6673a35 100644 --- a/subsystem/leds.py +++ b/subsystem/leds.py @@ -12,20 +12,16 @@ def __init__(self, brightness: int, saturation: int, spacing: int, - # blink_frequency: int, - # rightlimit, - # leftlimit + blink_frequency: float, ): self.size = size self.id = id - #self.speed = speed + self.speed = speed self.brightness = brightness self.saturation = saturation self.LEDSpacing = spacing - #self.blink_frequency = blink_frequency #seconds - #self.rightlimit = rightlimit - #self.leftlimit = leftlimit + self.blink_frequency = blink_frequency #seconds self.pattern = None self.mode = "None" @@ -37,6 +33,8 @@ def init(self): self.ledBuffer = [self.led.LEDData() for i in range(self.size)] self.led.enable() + self.led.set_brightness() + self.led.set_speed() SmartDashboard.putBoolean("LEDs Initialized", True) def enable(self): @@ -63,17 +61,18 @@ def get_current_type(self): def set_Solid(self, r: int, g: int, b: int): - self.pattern = LEDPattern.solid(Color(r/255, g/255, b/255)) + self.pattern = LEDPattern.solid(Color(g/255, r/255, b/255)) self.mode = f"Solid r:{r} g:{g} b:{b}" def set_Alternate(self, r1: int, g1: int, b1: int, r2:int, g2:int, b2: int): self.alternate = [] + #red and green are switched for an unknown reason for i in range(self.size): if i % 2 == 0: - self.alternate.append((i/self.size, Color(r1/255, g1/255, b1/255))) + self.alternate.append((i/self.size, Color(g1/255, r1/255, b1/255))) elif i % 2 == 1: - self.alternate.append((i/self.size, Color(r2/255, g2/255, b2/255))) + self.alternate.append((i/self.size, Color(g2/255, r2/255, b2/255))) self.pattern = LEDPattern.steps(self.alternate) self.mode = f"Alternate" @@ -89,30 +88,9 @@ def set_Rainbow_Ladder(self): def set_Blink(self, r: int, g: int, b: int): - self.base = LEDPattern.discontinousGradient(r/255, g/255, b/255) + self.base = LEDPattern.solid((r/255, g/255, b/255)) self.pattern = self.base.blink(self.blink_frequency) self.mode = f"Blink r:{r} g:{g} b:{b}" - - def field_position(self, r1, g1, b1, r2, b2, g2): - """ - identify where the robot is on the field - - """ - self.robotposition = 0 - - if self.robotposition > self.rightlimit: - - #to do: left side green, right side red - - self.mode = "robot position on starting line is too far right" - - elif self.robotposition < self.leftlimit: - - #to do: left side red, right side green - self.mode = "robot positioning on starting line is too far left" - - else: - self.set_Solid(0, 100, 0) # robot is where it needs to be def periodic(self): From 623123a967f3e479a92bd4faa39102420807b791 Mon Sep 17 00:00:00 2001 From: Matthew Bardoe Date: Wed, 19 Feb 2025 11:32:59 -0500 Subject: [PATCH 12/14] Merging Dev into LEDSubsystem --- ctre_sim/Pigeon 2 - 020 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 015 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 06 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat | Bin 2048 -> 0 bytes ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat | Bin 2048 -> 0 bytes 15 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ctre_sim/Pigeon 2 - 020 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 015 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 06 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat delete mode 100644 ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat diff --git a/ctre_sim/Pigeon 2 - 020 - 0 - ext.dat b/ctre_sim/Pigeon 2 - 020 - 0 - ext.dat deleted file mode 100644 index 347382a54b872bf09a1e18e310d1bf48a4e29a2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmeHHO-Phc6ut9}Vxq(Z8WB@`6lEfUNQ7XEfeHyC31KK`HZc(;QVT<9VQ!=eBBza1 z22DgE5hb+9pv6#ARs=;LNKmP*f#ca~^PJe}m7=&29I1+df%QvkDpNRR1s+LwCN2GB&TAYtXwL!j8^VQZ5`tKs0rJTBF z`Pi2M(MSDpWTCZwM?UXN@Px1(+QueUhJoyciSR; zzd!qi1^!@->ccPe>)X90HQGXy%O3s2=Nq?sX6hO{Bpy-SoasRy{Ll%VE)VAUxDVTi z`}%eC=kxjZUMdbsqjz}05A?^*Jhwu5y2tgrzBX;xUNkS?AIADIGvE(&5Z~XW{xHX_ zuu69t+;s3G-w(e(d-gzw2Bk$p8QV diff --git a/ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat deleted file mode 100644 index 5b3181bcbb6fee5b5d4e659f691193be51b461db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^Ur3Wt6hCegRyLHfg`!{)s7SDaf*xj{F{_8bl|Iy4S!A%FKQMbR+y_DK%@HJ( zgbS5ckqA*udNElP!>C^CL9K_3427&rs&&sj=j_`)h7k19g>moi{LcBEKlgt74DBN$ zduRN>t9Rn7|N6CxM!^7O*72X6%v}KZ^9BIoO{)s%2C54f&Bx7R#X4V1PWtEI*neIB z6KMQZgiSf5v%lSccZQXK6HHi&s91O5c-NPXwh&WJwU64|#>e}*P{+PT*?v|LxqJjg z)Cv|+{@G9KDlxy0%#dMT;>#+As*snwi6rGKW&bzpZ=^DcFJWxoVq(blM|q{+?!~y) zf0ZKLQ$qt9?>J1-NT##{WjQVL|jGMlP6X(~WpS1|5 z9Ac+D(pQa#?1HU0I*C2Xg!LS|be^5xY6F#ulYXAvr}_a%7ya>mB_3t$7;VT~+6t)l z5ijt2!IpA)L*e|z_s&L%%l848KJd_s^KpBKnLU_~*VG?=i|y2ydLsM*dFdPd�dr`_l9tWgen0yQA27 z2N%Y#wDwgW%DW%?eb}+g3pMe61YfDAc?p(JBC%=eHTF}^MTkAd_hnX5ezE(0&^@v{ zv~^Ov@VKL%VDT4ygX6s{5M*pzn%8~q@X`O{Bj)8UB%kbN-&K8_-$L&r$vTo3fa(%| nLme_1fVqCMcbh-cdy0is??oMR@yqY6?}z(SH9gyB^nCsR{X9aR diff --git a/ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat deleted file mode 100644 index af425b7a41c74ccbcfda55c17d68f6004b991291..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^J!n%=6h8SW#3ZFbQiYQ0vmmvIPzA^0Q`4f8sddmv7X_)*AgF_bPaGOlFcmC9 zhf<>$aH)t=&`AqwNf5z7aA=Bx3iSs>ty8?`p7W)7kK*Lwg}i&u-}jxLd-IukM~FO^ z%&Jx@eY|6>51CUg2Js*6-VVcQe&f4|9`9PU0&;%c3QF%$KeSh${OIF+7isH%oqvct zlw|ix3%%e&Rkb_sJirYF)+?vdAKb(m8BcA!D+B4I`GgH={3SDFseXw8ou>E97;-OBZocI2ec_H6t_obiUVSlb4@xTwttY_cjV-nBZSmq*(m)&G7 z2`@zK&GFp3+Tg=A+=rMBASi#_@3$v=4!y10_aunh=1TT{WWQw7qehjR9JY9_m?=FF zZRg`R#qstDUP|*T`~@HHusOcmE&S*Y@E&a1aO&D~bB~`Mo#*^q#Vu^^KW$~LlZO2K zh<6PM^C2GfaF0;$owjhp4t%HBvB37cz9-{O+=rm-mE}I8AHc`Xapu3?e$6L}!=BEA zzWD_E-z>W(2>k&MxqSuQ>m-62^5e>U_M6@Wa3NxBp%pI3w|h z#@!(?xkYZR!7ZQl3|-stNVxeqg%7kG&zuj*jU*5_Jp lqQwc(k9qgz23m+-Pm3&OPrWGm^4HM2+Y__S==KF0{|CeFHoO1; diff --git a/ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat deleted file mode 100644 index 37e5e93d987b653d4d99929e4d3d9671e08edceb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^T}YE*6h7M;B?>K^QDS0-f5>QvjzYvyhV)}5${@-p>mn_wi+(N&`??seE7wg} zyKs`i=t}9rA_!ZO7D{yyNKh?;FtQX(&6{lJyzeu&vAn3OUf9leexB$2z2EnZ7WWd7 zJNip~jJf61j(@Ql)kOT;SVI)vm6n3)d~OP(@n{dMUE%qviShBO@3in=*Z+jJ%Y1EU z?60NO{_`4_gpCUo*2gKap!K z%gQ58(T7`i3eL8G)b|w89 zhy2jBIVNEDX$$%%Iv{nI%&EQOT^+rz=7+otZo4YwIc<}AN zx<<_^`mA3q1^&g)NQE|>@SA2bBFvg=5wwUlipqw%D8a9z8yx;$JQ{e(Dd5F6;u)c diff --git a/ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat deleted file mode 100644 index 9a4575fc8392976479cae419d0a3a246f14e77c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^T}YEr7(Sbg5{(va{fNjiOhqIKTSbVA6eBY8he4F0){W&TBJ0l9#c*A<2*TQh z6BI^QlP*kxSZic~QeFrWRLdZY786PBA}`cTc^ivVzBtLa9d~5hlk<~U zk_&pyV&o4VCH&d@Bh2R%-#NEZAwrWExnAHfuf2r|AE*Ie5N(&G-!NPR6O?}zfK`S#wB z^{i8F_tV>a4)Gr8@IK45^DCnBeBV@luuR%FTRR6ln$OV@VZ1}d4>hdevV4li_C)fb zp7KBN<9|g|z(Wu70$-xOv}3MOJKvgxS*kCl`tVlna48(ryIYsZq!)}@X{A=4g>SJ*CTgLwa$iz?j diff --git a/ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat deleted file mode 100644 index f9f2e82b98cecbd4b3dc4d62d2273eee8bc3d595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^Ur5tY6h5;Ng<6AB$|CF!M8wdFdXs)Ee3e-~__+Q+f{{ikQjjB~gdX%sf)Op6 zU{4LAG9p;I2ujJG3hTiNDlll2;%PhYu3*=k6g2j|Ns1QEJ~(#29{D4{P7ZY~A?SSltwD`mgJMN;Mh2lMfeL z<~~CHMGwc9EHlvMo=6N_=wKn&imUyMvFG#MIu=3CpH8-aonBX!?k1|$_>A(1_ic=A zWo4Ld1Tzw1n-r)C?-m>~TqEc7LODDK5tJT5LJy{}gt;6D9 zrixdT?|&rqUv}Xh#k{eu(^{C{RA}pgJ}~YzRW3Ymo}4|x-m64zoa8?9vnQKc4Tt+Y zzbEx0&q~Ab`y!rY+?Z|5=d=y*3Qp;~n5z}=j=_aX-(8J}EA$}>zN@kG9BUG$`F$ZS z+co`}=M5`8DSXShhQ@Yd3{^JTct;%?>bh|t#K5Mbo*{*dUKjIyei1Q&H_u=;9zE2)_vOM%dqa9zE z55AQ7<9FcY#?{Y+M?avC-GoeWoLS+m8`jII$al-n*XMbT@jm(eVs|%2znJ6q0lu^- z{Q|~p4Q+d2`&Z5ZX04Hpf@yiL=nu&c|CHL*jhZ?o9&x;Le}Lf+eVP~DN)_-a_Ens= zb9A6q{vRJIkGDWR?BRjy_W0c|^U2`EyE3L;vJg5HWxvEIZKbLcVtfI>tg(jp4xsRs)psh~wD zV$>AkE#MCk5lRUtHDWy})kEbDd2*-P<}un2yI{?Xe(!u%E_c4CEC2QVePp8~vxgQ5l-=ie|Mc}L za7OU1yEj%;(;Be7S?L%IzQf~#fBIlNDYj;{7d-xvk-<}1-@6K8Kc*aRe_D&E74vca z&r?g6>- zt{c34FB7fdd(tnWO#0kg+%GHlaP(EU_8+~)e59S*H*;H`>-U>8?*aeD7JiS_S-w}o zPX~0rFx!>{mYSHCEOLA+EifM7#lnb5{J;aQXSWAi$;SL{%U(?#^T@ioDm@S2gYL!TC(_y#nHN2R^;|?2h|VtWE*Lz=Er;0a z4Q8HmaW;5y&znYn>)NT0dj7ETYZ$j>y1G-!n22;6Jxc%KlIx#T{QWkWA*<9-3KqWpRgbOfIfCbQOh>p>Px*guS3%>PU<> z5jp{%{muOW#_Z%*j=j|N1%-hBnOK$IC;N@_BfcVb=*Rn*51!t&9x&pePd`~VA_5`7 zq3{tiH(R3o{|J5b9vHhlc-0)gcJTb25FO+t;(H<9QiocN=*tk>7Y2&!_d8wY-;WzV RpWX9rc&OBVeskIM=P#7VTV((M diff --git a/ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat deleted file mode 100644 index c8859f310ef8ad0b507a0b5a150aae44d4a6cf6c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^Ur1A76hGe0Sks}D8Ht5Opd*46^bllSL#2nnnLgB8Mr5!c3uX^SyU>G!0!NSp z5-z5=ia>~DB817LFr|75>Y-T=83hShnNaqf@0_#iE<^C4hYpNy=g;qV{%*5yZ3G}= zf)elR!~uN&y;z3;@Kat75U*RGCt=67JVtA*L99I!-)m>4r)x8C{lBjN2^{=gfK3_F z*;?N}onb}b0t*%+3hT*_cYkYd4YA9m-eE`B_;_y@@;GIf?H80|r9XlsN`eKHf9~_f z3d|oMGc2=T@TFS@D$y@_lPStq!trl5-A*qne-Z1>Cnkn$f0S4Hy|NJ3{4dkQdv2g# z>xbJ2XbwKoI%++UtM8@0IM|rNBYjo* z$S%5#qidE}dupkLvmg<&%D%KBW2qh!^8=zk){^r;axC+uTY~?V~==_ku00 z^qWf072Z1=1(zG6{?VF8%5gp(A9?1EJO|WW zcI&d{na64(K3Jr=L|5U*xrqoqSxxz6Ucxt7v;E?YX8>nMYxEtM%p2X+5XO2yhIO-`SskAJKnv*e#*EAxv3cM%c`XO5+C?Qd*pCv?IgV5 z@I^k+CBC$Havh(TK-cu*z6`!C1X{hfH2&*ux{nmsC3yj;u9@bH?$6ZG0AKpZKGf)a c-dISS$Sw6fZlm}YKU+Qw_NA-3_swejUximbH2?qr diff --git a/ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat deleted file mode 100644 index 4b8cc3ec554f9714b24cf99ac73d7ca95d7dc8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT_Ur1A76hF=dmWpDgC>kpQ6AP9}Q82s8R?*95`CxBlQ4a?Ff!Tx5ZuHRJ96?e^ zxNy=c5Fv_1FH07MDOf#K4^3Y(G7_>dq3k=~IcImfj3DTx4=&$5e}2F7_imq|dvtW) zj0gDikAL&rxL(sLGC;ZY`p@3XJplMrc>$trtMl-B>+>kh$3D?wo>P;Po_RR-U+4b> zT7MQ`Q4Xo>Z|`5dK}ApqCM<;%wkSW|`SoOH51R_rJ!W%DCI|YE$9~3Ge^wc??I9#l zCs07~=RU2i#rSSg!wTC4UtSZdL%YO{Cn#PS`@daxGqs}Z#Vp&eh$u4kQCz9_!eUhO zPp63YRBTAg?MDe{j6BdXO8ucrvyxww^T_bC{q!*52@SB^y?6)Tt^AgC-^ISI_?G71 z6s5e5IN><!))&ldGe&T~A>Pz?!{Ma`+f{!;)eCe0)J>9(F+?D6**KzyoOU%z;-f)vI zsAaAT4&}xdyrBZ&cP@CT2iq(4-Y#=w?82WO4}L&}D&UQBhc%uwNb&3x{i)CU*alg)&KmMywJcX!NazTXKHR5$^RBOsTG-y2#drMu9?BCY8PCJ?HG_V+37v(F^na&d>9lU*8$HI0i6n zfI5XQBfIhb_s47mz@MWTAiQ^Fj)2{3b12RGZqfFSe`%PSoNSnd3;%Wg4`I*GJS@s4 zmHqAgtH-Yh^1+0~fWj8!#@jz1Z}YJ!U)`e?w|IP@7kR8_l=Y{TA=4f}5_PlG43sy>P<^`2V@YyRg6;ypP$ zq~)eg0vaQCw2V@J;Cxc@3v(VRezu>A5T4KgOI-^$@jIR0lJ2|Mw-jC1{2RiQSBD*r zV!vd!4R%b}29@XPv881DDV`t0JFMUW(*hEipq^_D0 z(uI>bH@I(dwoXL!{Nk@X6@5zS9r9_s!46Gs zyH0DKc}x%S!6Nk~_y>OMn;gMMYbn0;OZXmbTzBU36ZJZ7OTNJT4CW2iyZu_`x}Y^X zzTgcN2>;IoFZE!1rQRE*wv=7?r^o#>Xb%n3{wa6pRzIuknxK7@eh9zZ3X+5}M5`WF zR?tU|zx%5XXU!*b9)|Kqe#}SWNWZLcuGCS#B!uivbp2c1Kh~RS&GZTJyi6y>7k}4x znj^bGTMyv{hxf=}qDEx#m!1ml$BF8LM;s&_=;~-RF3ssWcev<%yvvSOoZ!uYtNL?p z6YWQg^OCp#l-E?tH0=iiKMj)J*}nPdz7@iz-s7G1`aOBjN&e5iwZ6wX`nJE*_}|DN BMX~?@ diff --git a/ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat deleted file mode 100644 index 14fb97042908d18162e992cd55ada0090065358a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT@T}V_>5FXbJtW~_!YPcv^1STOEMi0T-O;-DPX)Pgp(w;2|P-5=GJeg{|L zT7N!8y1nCL8n<*4(R?tiF`}X9A6dMx9^_T z-w~&Cb$Q`5&P(35$%!cs@ghmeFXf9D>|@3?&JRD{wDp71x$45ub8$2J?UjScPw|vT z^2kb`wPpF(*5Qrh#TYx!b3oTU{H-n&P%-K6)f4ImfOIh*?_2mR^BV>)J^f{VFW8b( z3&0ejZTa3A3(pSoCf)wD66a7-Mh-V#I+h62GYfb=lXYXeTKhESKH+$N zec_v`5Y`jE^n>G;ejk>5?6~O1uLm+1w-WUJR65`s+}N0)xXeTJ#Uf9!^jCe&eeIzMN@_aHvq(AxGNiXiq!pIL{FK&#S=7coap{2^CQN znNRD3SihRwu*`Ac`#1KNV_fPcQ&g{n^WT-;NiVCom$B1yi^HCe>dL%V77|+jb((a~ z_V;SMznO^Uz_7-Mx}qH)q`w6BVe51JTp#g?4X|`#VGzHw{VnOeOMI92uGZg{puUb9 za1!?=Z`x+_lq{nDxGT%45u%yL%)4iVDeKu?UFpQGG|3` zF1B^}L-Jybv(K|#*FE^HvM#7%GT-wDG!FpjVm{ut@LA>$3@d44ZAQnnU=DMZ`y zy)zb`9p;Zrc%%&X;3+1D6VDvZjr*#Oy~p<_Cs|226h9K^RL)RuMC+NH5NI$;@pGPa ztV5*dU!=Xn{-Te2lOueoC;Jk;;q6;4+mCA zPxvwqu3P54SK_kcqMx`CoWi)3r1z)N0r%j<{y~b%K15$E@)S$|R=?D3(>bu|XwLmO z_wU5AAK?qWRYm&|Y=vv|-%E1q@0UwYZFhBQ%I W`g_z&`LDh=P7lP>6`eIxn*SROBt@G5 diff --git a/ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat deleted file mode 100644 index 8c03127865b28e40b25e107ea9377b50608cfb7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT_Ur1A76hF>ImWpCFQ5;wVCQ+=Spoi&AHtV5srVsTJxuPJ0{=n=(XcvMMdTzJi$H{^j37)FhAGu!_0U`o85s&$nN;?j@0_!_%LsyA`rz_?=g;qV{(bk}PvGzG z-!b6^UY)~V+}Ey_R*MW!m^%KmlUW0RkHZ5H-o7jYug94|X+HFd7V{h*8*@*=q5nGn z$58z<3yZQzWq-T>Y7HoYY%pOisIWPi@%GP0n_AeEt@Z(n+t5%~8}eA!0P9aF!(w|7 zN!0RXQT)k|E6Omwi`1~dcEJ~xM#|AHaifD2uYmnuue=^xQ1)Dwty@SG$@(a+)O&U| ztodKWi1&D;N6WR%1T^~YY8j=@;JJk47v?;Y{A@qbOL#&9%=>3=;W?GxyzaZ$H|E~Z z{AZ!K9I2}!pY$T9aC8!V2OCn?u}#O>_O;SerfgEr$Q{ZbfOyd#=PP)mvC61Jdx~2L zc9LiKzFWkZz z($~|X@di88dhI%`8RjwTi4W$eFCBm2$G*uDe6*6{OTUEg$=X$?FFsXY$IXeCn4iJC z9qYUSEpuJam>ys7h6;r5x!|Q9Y_HUNv%r?L3x9k#@E+}<2;D#B4ky)Pm0hEBAEh6{ zFS~*y7PPso;JbbM86dAZfSXS7V%?)^%=m(f9E_J6dsq zH@mLrYmjt5jOQ6T-cz$Cy$!R|M|DZcUVXJ ImI;mj4Q3imGynhq diff --git a/ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat deleted file mode 100644 index a94583e10e0dbea86d8f7d5e48fa162516f31aeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^Ur1A76hF=d%ReY)N@B4hFo|dy1Vz?OTtqLM<%7}7il~PLSulGL+69C5<_eNP z!o?=7dJ!U7^s;18m_j{;_0aO6CItztFrn-_-#KS@yNsZR9{OPW?)mfkoxk@k!tfM8 z)&O;?UdQ+0{qK)?004hYJpi$TYs&;2*i=SoKK6=sWcpjz-0W;u4zB#y`9FdEKP#{( zhg9~r_piZ_BB%rtmct6`Dvx)5J=+&#Q>D5mZEorG=n(SQ&m`+FC_}M5j3ny#D=2>M z)4CRn?;$m;vR&}?8xpN(m$=Ck#j9igH|uX@R+YV)W&0HsMWH^5EA?K^$29-T4Dp^z zjBC03Bms?yhgwEyBs{zz`NcSo0zcc&#|ckpfR$7EyZCJ7x1#$l_Kxb?ntyAI@(MWN zH1Fw=gvyOmHMbJTJKa7_QzFAmfX=&xu*U2TiiD}oilMgzx2GX@v2h#$AcPgutT@k zsnc3w9@9sBuuOf4{DB|)CP(neHi|F(627O~HebB{TzwsPExf|~4Cak&_lC60b-}UH z_<}c7AbigSFZE!1rQSPrj)GnIv(urEXpbgn|CBonsGnW-%+NkcKZIXy1zCW4M5`V) zH_}6y|HB*mOXgEN4@3DQKjtHGq+j+pH`=LR5+acA(C<%j%RAja)|)PVi1NJ5R*EnF zo*y(v;prPByx{Pj7|Xat7JqZ}riOgkLG$dlc#7B96kfiapT~%Q=d}|r4z01QcD@wz m9od`J^`v<(=6Xps7;5JWEK(obY?poTeCX8uxwreh=KBqFDNu_5 diff --git a/ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat deleted file mode 100644 index 2775bff63a4d105421abcf5c2e4988ca1ac601fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 zcmdT^O-NKx6h7~b!sv`RX5XcI&s)T)Gj7>Ra43zdR?!5}JIP50b$zH#Out=e?Kch7gu`Mz`Rxp(|R+fNaN zKAAONEOzmZwb3zF5C{B+d$`NgG=HOeh#q&>t)V=)VGU>as0ZF_PkwZ9zn^Kxf8D=B zA&zACVlBO3V_v;{1-#h*$$*Oj$t7}EE-*O1j{PyCW3gTrbTr-aGYVp6uQvjf%WKT7 zXB{k&SaHKx^xT3@o7cmQbSNn_Bl`Nw7-&^-`f2_+?M|GeN-kV!e4}Q|~ zCbXV6Rd3I6a(W`m^YCJl4?fqMY|h>rn4Prolyiw)^ud1R!|~Ho!iPJR5^K&qXXl;N zfay2Eb6Z5>;FjI?95IS>{RZ{(eX$wbmHtpaX-`W8TqkLiQy%iO5lqLW4|P)|mV1;q z`Xv%vP=eP`jmtV}ATO_Y_4;L=`+v%P;kWzjzRVMKIG@iCKJ=rQ{hWK^y6}0ftF;K% z%W1M!q%I)#NFzdJo_T*1VE)$=7x z>E4=VHovJ(ctG@0+F$-J`uH7I@=*`-f!>3*O+zEkiEcjaU*P_H)y;41Ib*S&llrRb zgYTOnTn~Jlhi8QI-f48pap-#^nI(=FrschwbmBQgF=-t0fIfESng8|nYd$qF_T`RL z-A{D>QH=S34}7Ct<^znkGqZW&HTR!Z0^Vss?3 z-=g&b#s1}Gd(NF5O&Ru?!!txf5j#+zoo4mhS)j?e%=?etk7^M=?*KzT89vgev aTZ^c9FUG9IuYUEtyFEVV4Rc From 6fb75339a3ca42426dc08bc12ea39b27ca3dd7bc Mon Sep 17 00:00:00 2001 From: Matthew Bardoe Date: Wed, 19 Feb 2025 11:40:02 -0500 Subject: [PATCH 13/14] update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ce25c80..7c74bfb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ [tool.robotpy] # Version of robotpy this project depends on -robotpy_version = "2025.3.1.0" +robotpy_version = "2025.3.1.1" # Which extra RobotPy components should be installed # -> equivalent to `pip install robotpy[extra1, ...] From 3458f8bc2e3f5fecced0bec0fde9050b29918953 Mon Sep 17 00:00:00 2001 From: Adi <112349665+avariar27@users.noreply.github.com> Date: Wed, 19 Feb 2025 15:07:19 -0500 Subject: [PATCH 14/14] leds in robotpy --- command/drivetrain.py | 5 ++++- command/wrist.py | 3 ++- config.py | 3 +++ ctre_sim/CANCoder vers. H - 021 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/CANCoder vers. H - 022 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Pigeon 2 - 020 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 015 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 06 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat | Bin 0 -> 2048 bytes ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat | Bin 0 -> 2048 bytes robot.py | 17 +++++++++++++++++ subsystem/drivetrain.py | 6 +++++- 22 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 ctre_sim/CANCoder vers. H - 021 - 0 - ext.dat create mode 100644 ctre_sim/CANCoder vers. H - 022 - 0 - ext.dat create mode 100644 ctre_sim/Pigeon 2 - 020 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 013 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 015 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 02 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 03 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 06 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat create mode 100644 ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat diff --git a/command/drivetrain.py b/command/drivetrain.py index 026076b..1b32bb8 100644 --- a/command/drivetrain.py +++ b/command/drivetrain.py @@ -61,6 +61,7 @@ def initialize(self) -> None: self.table.putBoolean("DriveSwerveCustom", True) def execute(self) -> None: + self.subsystem.aligned=False dx, dy, d_theta = ( self.subsystem.axis_dx.value * -1, self.subsystem.axis_dy.value * 1, @@ -232,6 +233,7 @@ def __init__(self, subsystem: Drivetrain, poses: list[Pose2d] = None): self.nt = ntcore.NetworkTableInstance.getDefault().getTable("drive to pose") def initialize(self): + self.subsystem.aligned=False self.current_pose = self.subsystem.get_estimated_pose() pose = self.current_pose.nearest(self.poses) @@ -274,11 +276,12 @@ def execute(self): ) def isFinished(self) -> bool: - return ( + self.subsystem.aligned= ( self.x_controller.atSetpoint() and self.y_controller.atSetpoint() and self.theta_controller.atSetpoint() ) + return self.subsystem.aligned def end(self, interrupted): self.subsystem.set_driver_centric((0, 0), 0) diff --git a/command/wrist.py b/command/wrist.py index d9faef6..9668384 100644 --- a/command/wrist.py +++ b/command/wrist.py @@ -81,10 +81,11 @@ def execute(self) -> None: pass def isFinished(self) -> bool: - return self.debouncer.calculate( + self.subsystem.coral_in_feed = self.debouncer.calculate( self.subsystem.feed_motor.get_motor_current() > config.back_current_threshold ) + return self.subsystem.coral_in_feed def end(self, interrupted) -> None: if interrupted: diff --git a/config.py b/config.py index 87932f8..4dc311a 100644 --- a/config.py +++ b/config.py @@ -82,6 +82,9 @@ auto_translation_pid = PIDConstants(6, 0.0, 0.1) auto_rotation_pid = PIDConstants(5.0, 0.0, 0.0) +speed_tolerance = .1 # feet_per_second +rotation_speed_tolerance = 5 # degrees per second + # odometry odometry_tag_distance_threshold: meters = 2.5 diff --git a/ctre_sim/CANCoder vers. H - 021 - 0 - ext.dat b/ctre_sim/CANCoder vers. H - 021 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..ddcf9219d95227ae835e0bb0ce9810831789a9d5 GIT binary patch literal 2048 zcmd5+O=uHQ5T4!C)Igw1NrQN*ry^eLA?U5ERE>xj^dg@2pcW5G3LZo(*;B2Tvd}{{ zf_R8A2-@n&s)s18KPV{pb2YTkf_PAB)p~G!GxH{!ebs{0gAX?IzL|O7%=;$00LJnc zL&NhApx+08PqrW6(auzy@hQUY1hmE73i%MYv0_3 z?V+=FnizwnP`NX;a2hvTICNF8&fKSM6+&9R#%R(ld&ih!VDPl0#hMp-_KM3D+A<_{ttqUbl@a7@l{WQcp2gE_>LbXfZ~@uPl}Nf+{_&1 zMSjjZnqa@oq@HH1WrVCXkVKmDyE5@+t^OF!SjPwlx|TPQqdAxux|kQ!=$?PT(>CYH zdFjW*Bf6d#i3>K~QP{gEda(XCUhsVYqP|eKR^H!XTNM~r&$A&ukN9uaPxbG^(S53R zkWPM*#<>E2zaEdLH&;{GkE}qS|BxOY#D2Wb$BEC?37LFb7j0{rr^41*VjV87!e7)J zt>pmUbht!wzt}24{PLilUh3@={n1yrQX)O1AIkIbH=|BRYrWojC%L|pZ;#D~zrFyE ePjNk0<>U8Y;}YY^hYu)UY{bkv@%JVtsNY}0fkkNm literal 0 HcmV?d00001 diff --git a/ctre_sim/CANCoder vers. H - 022 - 0 - ext.dat b/ctre_sim/CANCoder vers. H - 022 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..78bcadb32a345523a7ec8341aa225a23b572faf4 GIT binary patch literal 2048 zcmd5+O=uHQ5T4!i$3UPT zHG+7EF$ik(qV)%&wEm!=p!RBLp@rf>sekq0`sU4>Z1z%a6a!7Cfg0N~&yRTlZo$?N z%Q~_C%_P?68e}z^fbXYe{R`~8PH@sw zk{9`jcOXH2o=G)DShW#sqpt;J3KIpXYa6{WoHh9S^H~Z1|k9_Kw2#IqnDb|JqBs4?t8G_N`I(ci0pOM#S&=AjKp8oApyXeK@+0 zr8e0ozeSF70sek9ex6!cN@6{{0u?`-8tTV-yibRuo}&oqY*UBamX%JCto4QZaDEZ} zoYH8FFLzUZ?vJnZPBx!4Ka2y^Zog~A`dp>E&pVTu7dWfxv{W6OpW_{o1oLq`-v@id z_dU1Ute>-fH8?H%5nSk__g?UE>3B_<&bc3~&z7QmG7x>khim<@`RM&$KC}2a_iMjN z{b5{L_fYC)yRMI8f9@sdyiHYLE1T^alJ{di`zvaG?lk3RzxS2q`s&->sVf)9I*X?$ zp3l)@KN&NBbk}6nwnX0!-;nj(QTbow*Y+Tvv3n^m>!znwk$kji5gn~%YU>@L{O*d@ p*nH^g3-IJ9<#PldzXv-9h`+kF@z`uLK;_YcSR7~I`^`@f{}-l*O&|aO literal 0 HcmV?d00001 diff --git a/ctre_sim/Pigeon 2 - 020 - 0 - ext.dat b/ctre_sim/Pigeon 2 - 020 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..516f948da3aa4f091093860b63f612352fe6759d GIT binary patch literal 2048 zcmeHHJ4jqX6utZWi;#z?wW(wwV&nE&?M4IzE$nbus(jb*-eZIMC4{kf$K$rAC;@|uFz!;$7YkWwRZzV9ie-R z$27tF68Xh^LHv0~&hs&jQ)xg)al(;(G{L%a4*;6U9{PJ+_UDlTF;vDEXnL@eKSw+i%+Vg`D+!T4?p6{_c3SGIsHi# z`!H$s8r{a9>mx4PmcQ4se; zB@REpkJ;$MGHv+()8<`o+VcrMk06F$&;hP<#4o6n=py!VKacw@Q;hvZ+$Yt?e&dzg zv)${acG=)i%gncQb&9YRr=H_X(-@)4}|^6QfxFelYER|8~2q-{`Nc_`v#8s8qK}IsX7F C0u5vU literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 01 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..582771fe20f51c6a8fbf762a51bc1a3225e7ec95 GIT binary patch literal 2048 zcmdT^OK1~O6utSh8Vq$TX~B)yg|s4yAg!y`30NByG3dsHUPi?p~9KR7$%Mx&sq zDM%5U7Qxoy(uF}-;BR zO{v~n)F0piw3Pnlgmz-AV?F?ybs&UnedsmWVVzj}6&sTBb5P>p7&}d2*V^)&V%nqQ zqE;=H=Tun%Mqyit(mKBR@igTZ_sQ&`A)I=}`Tyu(i{`%v{3HifK!}f;i>xb%-kIpv zGXTkjt_R7A5$wne^D1`X9SVqD&m$Ue)m?h0R1Eg2Qp`3^Ep8)jmpmCwP8 zp+R(s#&!MzkNJhC`!ydgPMLT*sb8_@8-?v3v>(#{o0C!xKqW8gn_D-DVu~kD3*V2n z3_fnGF?n9pI8|0~YWdjU8{R%Ty7#%|+^0w^*g#Ch%KJPhe#POnxe(pk@m_N*VHW6^BE({r+8!}razuw>IQ{ClZ_G>)thhy|k)SUOf9ml`o=+h;XU)<>K zOPp){f;eXCw2Y3%*ZnpIqIkMr>!BWLy_a_T%YN0jFP`Oo#4|_ayGK6t!Hd(^#jpKP zeVuU&4u{|PDu4Z{VmIsltp7xIpNEZD`$Ik&vytI(s(*SgU(S!>Y`k`lajfYU`y)b! zp2!H}v^k&rl*CuQ{jqYd<^#K+1!RAsZNuaN{5jC=(teTTlO3X`|2EAddMZd)81Ts4 z!*KTw+2zm0%;ciY4P6SrvUa<269)_3dWJ{DYgk|RDK^*5%ZA56yA{yxdSb6L;P eH#L~=9l_#vU=?Qx!H1vr&J6U8t!~>S`FsbWVq1Fv literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 010 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..a7121c017bae12b502506c9856230eb96c04165f GIT binary patch literal 2048 zcmdT^Pe@c@5TAXkw!19#kj+B}TZ7Vw><}6qqP3{Zh?cqp1??g05WyN9f|A~?^%9Q` zD(gj}HW5lKsDmCnD6Ozj&>y?GWE4bDQugn%eKYgT?t5P-30?YN-@N(vo8QcQ`)1)m z9>7U}I!_9PT`1+O52&|fNYsBQo!zRY`t|MwnAj8cBP%`t@gP+B%}R5|_nEfWaR0yN zKLZ;}wPsT*(DTq#vR4pqh8|Lei)zm(<>1=0wc+<@hb?R!6kP{Nd=5%<9BoGt^}O50 z7F`3!6Y6`FILBuN7=!&Kq;+Y>^Eb#Z8DMFIDRu50@&D677U6#sEQA9)$bruqi-gM> zKKt5!T?I&gJ@7bPF+w6XPjMAH$DIzcU3M}VWnGW4jF5emCEQJcx*9aP+LIb-p}8-m zV;J?dmT^se%3{0ZOMO$%=z1c=FS_xcgq>fcf1dYnf%yYec;KA8xTc;~;Fc6n68)(6 zsozXD<9YoQx+rx?Tk`Qaw}$5C)X+NN#~r^O-JAf+RJ4yHb;{W1^17pYSI>ST&tzWsRj zfjuBT@{u|+F9ClWyEl#VxY;v7IAV9Z$4PH*xJ!PqUxkjI^oZf!I z`LvbqOWwm19riWuzb?b`pkVblIl%l^H_x8?Pz|tdk^K$a+;F}1kmmIC`?2}k15@$V H?ab#l;W$I7 literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 011 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..144e92ee58eac803b89ab39fdb0b149139313fa6 GIT binary patch literal 2048 zcmdT_O=uHQ5dOMpi?LCoR6Tf!rz)W*t>Vd5t1Wmi*o%mV9z^k=q_hVwwd*ZjBp}+7 ziYV5!2vS85!AmGDjUXsAcx`DxK?Ifhe{g*>^CsC{L$P@B!DjZG_suu+X5NxHTp9!5 zny3Eqmi_u0|Kj!b1N3a^1f~wg!%}5}sTdl=ZiBpMhoim<2LJ2&XOZ^TM-R0MT*eMR zxe9)idek@u8UV7o3`Aj5{4M#B7VmAvmZbb5d|saQlSu^LlaVRrBRTdQ2UjnE97f5Y|vxxpT-|2Q0yLoz1BS8WTdD~NuF5BwYgvY)$Vvo$B& z)+OfE{K7jO6Ti-+ln`v&SXC&zF0gJ3TG*GjJH0*q-1jP;>ZIWO6<5|76O;?@wGiIK<^H5Lp{$D%hRQFXsH-4SZtLHX!oRH_bKpkU4AS))3cCm{xmM@_RQ%7=LJ&`%<=b%5AUx rQTwJgT6w#FYE9@MjWUu|pT>8{^Ujp+CeT z6(lW!v@R|#K`f2nP-qdI8WbvspyChJ!RI}H=Dn*ebP>Feoco>oo$s7`&Lw#T6PMwi zuizK}e)b**nC(x*^Vbn}CLtAf8x%YquzfFK^1rTs8M?!E`%*i=bvPKhJK)>Ylg2S@ z27p!<&ZDv?{TBVu&E8qXLQ;MeLRx|N(PScf*P3G4(uq)GTjd2YFTg`M5n@>*y{oUW zzCwbnMKf@HgX;hDfIM3N8E{Yz+$0lMx*DX*2*0QLe~be7Uj~=`rW3sE8{#$n%)69i zzs{tVVJvO@tx$PUA>Fpb^;UG2<)pZfqrPv2kw*9GU|kzOb=a@*n%~AH$)`ro6{mG0 zw(qmvpZk6PIoA)+tONTL)%_cGMDN)Rjz>IYK2a=`ZB5WhV}qaO_2K9~R(Dh1)W10w z$C*RbG}fc*$)g$Se`WFF5aus_x*<|ynj>4T$sv9w`9-s3ElhcGh^zeJBOPwn0(J4SEZ@Dbz7jAR>$i~XG ccP#*(%Y6xQ{H_kSuTj3uG4`K3vOxX%1w8*YO8@`> literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 014 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..08deca9bdfee04c7a10fb187a9ecee64b82c5e3d GIT binary patch literal 2048 zcmdT^O=uHQ5T0zd)kx5#q$fe5Ahnc&2V1QkTq|lo(BetOLk^-I1XJvxhl+cw7gcW}cp}i)QE^_(3veIy z2iVr|_PICM-#~)30SnEAchvu%0rF`7N5DclaO9cKcGQTskv6vH*F}KBw*$`$4JWvn zw}fl>8Fw%xl`uEcR=@);H}@ zsi#WgYNzxdy6>yb&-*v3mqI~@p9U8H@l}X{b$r_}e@n!gN&bmnc zWCz#R{dmH+rscBrX&T_+?Z;GqKzNVlFZKKk`^`z8j__!G&BuPRp62U3SYPM8a@eZJ zl|TF7)hdkF&Yz~bh{rvc_To8?>pqlU^;Uo>6wF^vMr(ty`-$EM&Vc;bkJizBnRSj^ zyf3Xav5WVX+jwUh_ocE{4!+!1Wr6D}-u)4OSMx)huX(8Pf2MXE?`av^yFO0m&)s~# zXAE8e;#ctFj_{?q;USZ=+fUr!ddc-W&wgkD=q|8r@>PXzL+@RhuhM&ubRe_(5?4N3 Y__AHR7gz93=M&ohlDxBH+sefA8`6Y9yE?#Cnr>&_;?PXeyq%0kuVu6iM%Bp&dHeS{AHH!mofw%hh(=qP}P;L>kIL2&=j2hNcI2iAdA$02rQHXJIurv9W$iM2%p25Uqb--Z#~cQO(Qso_rz=3 znb#j?yPQca%2NjzL_56OKewVz2mVC@tVl+3m zjgAw3+z8_6mP!Qk$$E0{8qGf**)f3ma|kyM7l%s}9L{O92)Kk8#W zl1JvHT(mwUZqt0McMnNN?AxC|Al$q07Wu_~CNW01sL!i5&H07zEH>}eLiix0fa7yr z+a`~zk3&oe`M)2p_OqUR+oX={dA=v=2$x;wG915Jv0^Hws`G%(3%W1&$_VMqZRPt? v_tlAx{1o@!Uf_8USv`(j<@&pi{yz1&6`=Z<=K}g(l^=0j%HjRUPOj$&gFn^EU#}Z~10`$^Lk_VU=K46k_2pBLCVJJN6jr?*BahJglsD*qizTT!mF6 zz+c-ATsas4Ag_iHN*(d%6o)kuom6a!w7v{=Hs8d_B?9lRb&3UxCr}!C)jB^E1(<=Y zbsB4E-JK^iUp6A%Dnq#NjOYI`!4aK*7dS)*Zd3|y_tcnI5Iu|iUycIg-)*~*ZwA3j zEplBmE_DZ@64x`SBm^578w{oUCFV^=x?3rzxGl1ualusPru+CDYz&>kOJ%&zU*K6s z>U6!%W8*Q?Po3r!Ti+;bf2(?k{+DjbegK+tk#0fWJd!D%AC-CsV@3Q0vG!#DUi*Zi z;J5Oz!8g2pbab!F?W|KO6YHc(#aj32qU04PR+r;69~tR4)g!p=^o9YNC->$c^LbQ& zro1p^c+QJ=&3xm(;ir8!%&gabs)uj*Mp{ldFX!-Iapv93&b`bQ*c(_f8&TJ+j3^^4()S>0sl+S;?y&%C8=mp!xj7N8{@s zs|_&k&-AC_;CXn6RUgWcJxyJiqy6u7L?4OzkZZrryqWIHoKHyt=w6W(%=uInq`%gC zAHw(Q?x3vKb>vAe#o>CNsL5jfnQ?x3)hqYsu*J(s(IL4BZk%!Gq!)>qS=& zwx*XHG?uE-p1p+HVhTb9|9Y~2{(uN7wzYb2-8b*OWOu3su@?t6GvAwUzVE#^yLkm~ zYYJ`CEx_Z-@O(@5#-_c30b-TqimlW>0DLwc0LZmQg1RMyb0G)^!yZx(51O$Fc=KQ9 zKL%UfTC=FXz$Mt`{>u#=@w_r20Gwrb5VEzA_ZWvA6wL`{lJN83>Y+G}Q`EPP8Mo*d zIzDP(DLfU30t~?+7t=bo``HZUmkQBr&^$Q#PUpXLLq{b4qhO&N#Hxt+w0=tK62jl! z)*lxE?76nbb|naj_^jqt;>0^uMRB>4Vw5nqv8<4Nnbo>c(DvZ)PP*f)?)#rG(y%Ud zhICClVo_Yqr`G-+_pqN#!WV3Old$Kj)KC2$d_wsHkUq8#`{dU(vF&jzFQR}FP-{)4HNdC z4^t`wtaFoQ;C%X)(Z@Q=gU=7tlfU#wvEG{M%htzHfQj*8?Vn=ZW9dt~zI*v5InNmD zh`*f2e9=$NOFif>^u6gHut@8^AU|LTA literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 04 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..4b1dee695405d6494eef08182acfdd0f48ce333d GIT binary patch literal 2048 zcmdT^O=uHQ5T4z%l}M;*NjP2)5{zMcEdJ*vuLG&bSp$8G9?`FM76f`9T zDgMMFXel0h>7l_CgbG$gFAY`{L{Ra!9$e?=&1QG~0R;~ZWM{vb?|n0G-rGC@=m2PV zfVTSa)h*=zy_szQ^jo_fU}7*GFIXqoor0El7?GLTk&HcsAp1Y}KM(7I&g7>40M}tX z4dAbB53U?`0LZH$gi2@nCBw7|mn^e5HNfYP#Ly+WMB{z_0?)a^ z)Aia<5|7$?>NKx7@r}an_c{-m|IK@{AAn|GG`Fa(k7A1FPYd70SQ&p&tTowx)H<;! zm^MB(_=dNSj_z%B4bLf;Z|NeYVgA$i4_zG|BKBcu6E_6lylxOIs7DZV?#dL9wb zR2L?#&NcB_+uzu4^l9Ir+4Wja=V7egsn&Du>l*$mPCr~l{S~b4!Q$D06~uYF&#cwa z`nul3LR3%J>waiPy59@?+%T{D-uW{;k3#vleD}zwIV5rEisW@3s;?fGpc#JRBmDYD z8$+!7v-uM_dLABPoe$;6p671YX#a;?nU6#b`1u;^=6h~&J|~H=aLJy}?2^=1zV|79 zuNH@8y*5mq=A}5!H?~TcCQMgZE+v4WK*UI9VK3e+4_|0@h07zc`_=DDeRFAym%Zti z`&hSqwsI7BJ-r6l8(GQb50A_Gz8UAlDe_)-vK!T BKe+$^ literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 05 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..2f7bbda54d9262ec6c8e68749d97fe852c3a6039 GIT binary patch literal 2048 zcmdT_J7`m36h66q*hs2Ds^TJwNR(0#G>Sv@2C6AI7!<@8n4wgcLW&(66z^CU4GOkK zhYTea(Z((=E}>W&AA{fnotn0yAVMp)q7GjF^Gfc$0YP-}hkMWeoyT`xH{>nMwTvZa zIzi5riKWimjdgnz14L`re|B^B0^qZz3m~5e`+3U<7emnKR~zI!+!xfnfp`CP{Zr8H zt_U{u2e=Gd+`rk-0h4PW1b|YHfsk7j{(yRDXKh}wIH`XDTsn^EQA9lVXkd%k0FTGj zcU3>frv(^?{VtYuZr6)htS=Q}8E`Xj`aRWOZy=4DjNRf%UqRQiQRLvC5Epog?1X(1~VLX2p^&#%bEd0o>pYZS zr3ssrzlf5%whd|O&IY3ytn~Z#aQfOzW(fInOaDRv=(be7eHL_u3p z(28vu1S#UuO~95$6ch{!y69j*K?D_l)kVj5f6bc_3koiLklZ=#!j&q)3K&Fm4;d9Sip^*fy zWr28&JoAnwIj?6@%`g@lmlaCSN~8;klg*e^ya=ZW7loOh?xb^wV`ybvq|tl+2G2Om z(|VmJj)$e62HjU2`$l2!C-sB+DADm;pV;YQ@pN+NWO3`noV}m7g z`|#)#*ZWefSofj4j(pSn;#3r8wwBX44=(ht(#F`C>>t2+@*j^={c2(W96ZLlP!XL8 zj_w!sVRQxkf@n~XdhMtF_@Z~V>7w&)*7!Dch5F}2_fYOk$w-C`<&%{)vs(`Mg0mlPEbU5(T6zBUgCZAL-jS9{%V=2Zmi*8fOPddZ2ysE zV-!$-w2$I`hyBUl=lkOwc}Tjwn{LmdKP}RdJ|gp6l=G?1bARP~U-kZSL4A%QJi3Jt-%5ZHVSZjH{!-{r#(>gx`1YeXPlxeA|KQ tkr2w=Ez17kF|N-{TsZZ%37~$Lv7rXYH;d+d{O!QPnAz$La+b; literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 07 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..97a3fca308a59a9ef76a0c118172ce7a18cc740a GIT binary patch literal 2048 zcmdT^J!n%=6h3)PZBwEKiGtwb)JiEhSj3^4ikg5!AG)YGWDvJPiX9v*ePdnpA=1_q zG((A{s7+^=AeKaM5c~mMT3b*MLB&?o!RI}H$$Ph25M8{G-20vTo$ovM+?%|FmG*nt z*L@)4>Vvhu;*FgL6$7N2%YU}=4guh2#}R;1eleA2l@x{UC9qW}9S zKw&joD>Q?UNv{yE8E4+P7LMzkRFjOQjSYq3iz4YJp@U++?Bq{gpuYbOBMr~x4YIC{ zA37Y@e0TG&@tFAOq}z3}5RZB&BH$n)`~Wy~U-i*I*tj#Ax-ar6|}-y5GK{Go^6OI_-0r6^E7 pE(1BMFZ*YwIR9{Z*Wf!tcE`Cd)!qvAC3BtMS5Ds9>3wq){|U}SMMVGr literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 08 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..908d8acfa6c9ad0aa26ce12fd7b6ef81c0b830c0 GIT binary patch literal 2048 zcmdT@O=uHQ5T0z()|8-YiF%W$hbpBYNK*=eTTt67Xt5U&4>^c>k)~MCgQa_{7g;>m zkY0j6u@*GyNf0E5mZl&m_=jE^T2K(dia%8^>zkQ3$?lUD6g)Vvnf>PH`{vEtyareg zP<23A^Q&vS(f@mM_Wc4yxYbtdInFRH1sNUZYTw*7?q73pihYguPLw;QU*f|Mvt%Wd0*yAsyIJE_~WrC0<7OJKp_s6d?PhXEs|8 zf|FdNx_X@JPDD8_cT!F;)@!UWynr$`s;aStY58sxm}L-@t-1eij@{?%-(IuyDe^FB;0`$A5fOYkv^ z_a(T{G)KI>TW-(bzLI(fxkpdmS9zZGrQZ1#{;r-6bHDVV$NdNn)GvTdB4vM565J~} z0w3G?eoq^`(yxlP4X7{8Q7?TxG3)pQ>-AlA&b)5`XwNb>`6`-kbNUXQubjS1-dD4s gc{(qA2Q;7Py34$u+&T77mIoGZOiZWJyGq3K3zV%(PXGV_ literal 0 HcmV?d00001 diff --git a/ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat b/ctre_sim/Talon FX vers. C - 09 - 0 - ext.dat new file mode 100644 index 0000000000000000000000000000000000000000..ba177705457d1c52061006411976c7662fe26cb9 GIT binary patch literal 2048 zcmdT@OK1~O6up@=wUL0K#BPlXX{B}{Qbj=;6@RE0bfe-Tf+*63DHIe`G8?6CB)Dix zD&j(8DQLAqi>MH!#S|k7esR;%f`SNE{JR<7{UwlFS&>$aJm=GVOm;Qq$2pV{aEhzFs@?>5N2x7qf+fua9e|2Qo3 z>g`L-0~evmi_Rn8PTgS~oo3Hy_2Alb_2KvEhi3L(Q7lQCp9hbQD}FSQs^_S+#jM3s zmFj!cJlE$1xD8u8ly!2=^C{Gq46wD*44imJ`u`4)NA>Rk2k9Uh^=~G>i00-9d^U+;Tyw^NQQe|+fW0*vduF~52aif4`=C0#lX7fypR)hDL&xvycF}c&779r7{htRM1;P-S=m=%g8OTJ;=BL7deO=CT89?rqgeBm zKPmMM(k~_W?yjjqL)3iF$8M6I5s5#}tZYL*#mUPVnnyz7EotuWcK4F!QwzT@MN22< td!7^-qxfJS*RMPDp#4J#VCRW*zW4ps+hOYW^vB-mYki~f)vE?c-ygkbLrwqy literal 0 HcmV?d00001 diff --git a/robot.py b/robot.py index 2e22ea2..b58587d 100644 --- a/robot.py +++ b/robot.py @@ -91,6 +91,9 @@ def init_subsystems(): ctre.hardware.ParentDevice.optimize_bus_utilization_for_all() Field.update_field_table() + #alternates blue and gold on leds + Robot.led.set_Alternate(255,190,0,0,0,255) + self.log.complete("Robot initialized") def robotPeriodic(self): @@ -133,6 +136,17 @@ def robotPeriodic(self): "Estimated pose", [pose.X(), pose.Y(), pose.rotation().radians()] ) + if Robot.wrist.coral_in_feed: + Robot.led.set_Blink(0,255,0) #if coral is in the intake, blinking green + elif Robot.intake.intake_running: + Robot.led.set_Solid(250, 106, 20) #if intake is running but coral is not yet intook, solid orange + elif Robot.wrist.wrist_ejecting: + Robot.led.set_Solid(0,200,255) #if extaking, cyan + elif Robot.drivetrain.is_moving() and Robot.drivetrain.aligned: + Robot.led.set_Solid(255,0,255) #if aligned to score, purple + else: + Robot.led.set_Alternate(255,190,0,0,0,255) #idling is blue and gold + Robot.drivetrain.update_tables() # Sensors.cam_controller.update_tables() ... @@ -186,6 +200,9 @@ def autonomousInit(self): # command.FindWheelRadius(Robot.drivetrain) # )) + #scrolling rainbow on leds + Robot.led.set_Rainbow_Ladder() + self.log.info("Autonomous initialized") def autonomousPeriodic(self): diff --git a/subsystem/drivetrain.py b/subsystem/drivetrain.py index 1170635..05ae261 100644 --- a/subsystem/drivetrain.py +++ b/subsystem/drivetrain.py @@ -98,7 +98,7 @@ def __init__(self): self.sim_node_states: tuple[SwerveModuleState, SwerveModuleState, SwerveModuleState, SwerveModuleState] = None self.node_translations: tuple[Translation2d] | None = None self.nt = ntcore.NetworkTableInstance.getDefault().getTable("Drivetrain") - + self.aligned=False # auto setup self.pp_config = constants.auto_config @@ -255,6 +255,10 @@ def get_estimated_pose(self) -> Pose2d: pose = self.odometry_estimator.getEstimatedPosition() return pose + def is_moving(self)->bool: + speeds=self.get_speeds() + return abs(speeds.vx_fps)>config.speed_tolerance or abs(speeds.vy_fps)>config.speed_tolerance or abs(speeds.omega_dps)>config.rotation_speed_tolerance + def get_speeds(self) -> ChassisSpeeds: return self.chassis_speeds