Skip to content

Commit 02257c7

Browse files
committed
potential digging speed curve
1 parent 2310108 commit 02257c7

2 files changed

Lines changed: 26 additions & 1 deletion

File tree

config/rovr_control.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
digger_lift_manual_power_up: 0.5 # Measured in Duty Cycle (0.0-1.0)
88
autonomous_field_type: "cosmic" # The type of field ("cosmic", "top", "bottom", "nasa")
99
lift_digging_start_position: 125.0 # Measured in potentiometer units (0 to 1023)
10+
lift_digging_end_position: 900.0 # Measured in potentiometer units (0 to 1023) # TODO: Measure this!
11+
auto_dig_final_lift_speed: 0.08 # Measured in Duty Cycle (0.0-1.0)
1012

1113
# Auto Dig cost starts at max_dig_cost, and increases to absolute_max_dig_cost
1214
absolute_max_dig_cost: 200 # Measured as a Costmap grid value (0-255) # TODO: tune this

src/digger/digger/digger_node.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,31 @@ def __init__(self):
7575

7676
# Define default values for our ROS parameters below #
7777
self.declare_parameter("digger_lift_manual_power_down", 0.12)
78+
self.declare_parameter("auto_dig_final_lift_speed", 0.08)
7879
self.declare_parameter("digger_lift_manual_power_up", 0.5)
7980
self.declare_parameter("DIGGER_MOTOR", 3)
8081
self.declare_parameter("DIGGER_ACTUATORS_OFFSET", 12)
8182
self.declare_parameter("DIGGER_SAFETY_ZONE", 120) # Measured in potentiometer units (0 to 1023)
83+
self.declare_parameter("lift_digging_end_position", 900) # Measured in potentiometer units (0 to 1023)
8284
# Assign the ROS Parameters to member variables below #
8385
self.digger_lift_manual_power_down = self.get_parameter("digger_lift_manual_power_down").value
86+
self.auto_dig_final_lift_speed = self.get_parameter("auto_dig_final_lift_speed").value
8487
self.digger_lift_manual_power_up = self.get_parameter("digger_lift_manual_power_up").value
8588
self.DIGGER_MOTOR = self.get_parameter("DIGGER_MOTOR").value
8689
self.DIGGER_ACTUATORS_OFFSET = self.get_parameter("DIGGER_ACTUATORS_OFFSET").value
8790
self.DIGGER_SAFETY_ZONE = self.get_parameter("DIGGER_SAFETY_ZONE").value
91+
self.lift_digging_end_position = self.get_parameter("lift_digging_end_position").value
8892
# Print the ROS Parameters to the terminal below #
8993
self.get_logger().info(
9094
"digger_lift_manual_power_down has been set to: " + str(self.digger_lift_manual_power_down)
9195
)
96+
self.get_logger().info("auto_dig_final_lift_speed has been set to: " + str(self.auto_dig_final_lift_speed))
9297
self.get_logger().info("digger_lift_manual_power_up has been set to: " + str(self.digger_lift_manual_power_up))
9398
self.get_logger().info("DIGGER_MOTOR has been set to: " + str(self.DIGGER_MOTOR))
9499
self.get_logger().info("DIGGER_ACTUATORS_OFFSET has been set to: " + str(self.DIGGER_ACTUATORS_OFFSET))
95100
self.get_logger().info("DIGGER_SAFETY_ZONE has been set to: " + str(self.DIGGER_SAFETY_ZONE))
101+
self.get_logger().info("lift_digging_end_position has been set to: " + str(self.lift_digging_end_position))
102+
96103
# Current state of the digger chain
97104
self.running = False
98105
# Current position of the lift motor in potentiometer units (0 to 1023)
@@ -209,10 +216,26 @@ def bottom_lift(self) -> None:
209216
"""This method bottoms out the lift system by slowly lowering it until the duty cycle is 0."""
210217
self.get_logger().info("Bottoming out the lift system")
211218
self.long_service_running = True
212-
self.lift_set_power(-self.digger_lift_manual_power_down)
219+
current_power = self.digger_lift_manual_power_down
220+
self.lift_set_power(-current_power)
221+
# Store the initial position for Linear Interpolation
222+
initial_position = self.current_lift_position
213223
lastPowerTime = time.time()
214224
# Wait 0.5 seconds after the current goes below the threshold before stopping the motor
215225
while time.time() - lastPowerTime < 0.5:
226+
# Calculate interpolated power (only if positions are different to avoid division by zero)
227+
if initial_position != self.lift_digging_end_position and self.current_lift_position != initial_position:
228+
progress = (self.current_lift_position - initial_position) / (
229+
self.lift_digging_end_position - initial_position
230+
)
231+
# Constrain progress between 0 and 1
232+
progress = max(0, min(1, progress))
233+
self.get_logger().info("Progress is currently: " + str(progress))
234+
current_power = self.digger_lift_manual_power_down - progress * (
235+
self.digger_lift_manual_power_down - self.auto_dig_final_lift_speed
236+
)
237+
self.get_logger().info("Power is currently: " + str(current_power))
238+
self.lift_set_power(-current_power)
216239
if self.cancel_current_srv:
217240
self.cancel_current_srv = False
218241
break

0 commit comments

Comments
 (0)