Actuator-Controller-HITL/code/deprecated/1d_Mass_Spring.py
SchrodingerError 482d724e20 Initial Commit
2024-08-14 14:42:16 -05:00

112 lines
2.7 KiB
Python

import matplotlib.pyplot as plt
from copy import deepcopy
class StateSpace():
def __init__(self, pos, vel, accel):
self.pos = pos
self.vel = vel
self.accel = accel
def print(self):
print(f"Pos: {self.pos}, Vel: {self.vel}, Accel: {self.accel}")
class Block():
def __init__(self):
self.mass = 5
self.statespace = StateSpace(5,0,0)
self.net_force = 0
class Spring():
def __init__(self):
self.mass = 1
self.pos1 = 0
self.pos2 = 10
self.vel = 0
self.accel = 0
self.length = self.pos2 - self.pos1
self.zero_length = 10
self.k = 10
self.del_l = self.length - self.zero_length
self.force = self.del_l * self.k
def get_force(self):
self.length = self.pos2 - self.pos1
self.del_l = self.length - self.zero_length
self.force = self.del_l * self.k
return self.force
applied_force = 0
block = Block()
spring = Spring()
# Initialize lists to store data for plotting
t_values = []
pos_values = []
vel_values = []
accel_values = []
force_net_values = []
spring_force_values = []
del_l_values = []
del_t = 0.1
t = 0
while t < 10:
spring.pos1 = block.statespace.pos
spring.force = spring.get_force()
block.net_force = applied_force + spring.force
block.statespace.accel = block.net_force / block.mass
block.statespace.vel += block.statespace.accel * del_t
block.statespace.pos += block.statespace.vel * del_t
# Store data for plotting
t_values.append(t)
pos_values.append(block.statespace.pos)
vel_values.append(block.statespace.vel)
accel_values.append(block.statespace.accel)
force_net_values.append(block.net_force)
spring_force_values.append(spring.force)
del_l_values.append(spring.del_l)
t += del_t
print(max(pos_values))
# Plot the data
plt.figure(figsize=(12, 8))
plt.subplot(3, 1, 1)
plt.plot(t_values, pos_values)
plt.plot(t_values, del_l_values)
plt.title('Position vs Time')
plt.legend(['Position', 'Delta Length'])
plt.xlabel('Time (s)')
plt.ylabel('Position')
plt.subplot(3, 1, 2)
plt.plot(t_values, vel_values)
plt.title('Velocity vs Time')
plt.xlabel('Time (s)')
plt.ylabel('Velocity')
plt.subplot(3, 1, 3)
plt.plot(t_values, accel_values)
plt.plot(t_values, force_net_values)
plt.plot(t_values, spring_force_values)
plt.legend(['Acceleration', 'Net Force', 'Spring Force'])
plt.title('Acceleration, Net Force, and Spring Force vs Time')
plt.xlabel('Time (s)')
plt.ylabel('Value')
plt.tight_layout()
plt.show()