BouncingBall.py 1.0 KB

12345678910111213141516171819202122232425262728293031
  1. from CBD.Core import *
  2. from CBD.lib.std import *
  3. from CBD.lib.endpoints import SignalCollectorBlock
  4. class BouncingBall(CBD):
  5. def __init__(self, k=0.7):
  6. super(BouncingBall, self).__init__("BouncingBall", output_ports=["height", "velocity"])
  7. self.k = k
  8. self.addBlock(ConstantBlock("g", -9.81))
  9. self.addBlock(ConstantBlock("v0", 3))
  10. self.addBlock(ConstantBlock("y0", 100))
  11. self.addBlock(IntegratorBlock("v"))
  12. self.addBlock(IntegratorBlock("y"))
  13. self.addBlock(SignalCollectorBlock("plot1"))
  14. self.addBlock(SignalCollectorBlock("plot2"))
  15. self.addConnection("g", "v")
  16. self.addConnection("v", "y")
  17. self.addConnection("v", "velocity")
  18. self.addConnection("y", "height")
  19. self.addConnection("y", "plot1")
  20. self.addConnection("v", "plot2")
  21. self.addConnection("v0", "v", input_port_name="IC")
  22. self.addConnection("y0", "y", input_port_name="IC")
  23. def bounce(self):
  24. v_pre = self.getSignalHistory("velocity")[-1].value
  25. v_new = -v_pre * self.k
  26. self.getBlockByName("v0").setValue(v_new)
  27. self.getBlockByName("y0").setValue(0.0)