movement_playground.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import asyncio
  2. from dataclasses import dataclass
  3. from robot_control.src.robot.movement import RobotMovement
  4. from robot_control.src.api.grbl_handler import GRBLHandler
  5. from robot_control.src.utils.config import RobotConfig, GRBLConfig, MovementConfig, GPIOConfig, MQTTConfig
  6. # grbl_config = GRBLConfig(port="debug", baudrate=115200)
  7. grbl_config = GRBLConfig(port="/dev/ttyACM1", baudrate=115200)
  8. test_config = MovementConfig(
  9. speed=1000,
  10. safe_height=10,
  11. work_height=0
  12. )
  13. grbl_handler = GRBLHandler(
  14. grbl_config.port,
  15. grbl_config.baudrate
  16. )
  17. movement = RobotMovement(test_config, grbl_handler)
  18. y_offset = 130
  19. positions = [
  20. (453, 1028 - y_offset, 0),
  21. (453, 1028 - y_offset, 107),
  22. (453, 1028 - y_offset, 0),
  23. (170, 760 - y_offset, 0),
  24. (170, 760 - y_offset, 40),
  25. (170, 760 - y_offset, 0),
  26. (453, 600 - y_offset, 0), # neutral pos
  27. ]
  28. async def wait_for_enter():
  29. # Use asyncio.Event to coordinate between input and async code
  30. event = asyncio.Event()
  31. def input_callback():
  32. input() # Wait for Enter
  33. event.set()
  34. # Run input in a separate thread to not block the event loop
  35. loop = asyncio.get_running_loop()
  36. await loop.run_in_executor(None, input_callback)
  37. await event.wait()
  38. async def perform_movement_sequence():
  39. for pos in positions:
  40. print(f"Moving to position {pos}...")
  41. await movement.move_to_position(*pos)
  42. async def test_movement():
  43. await grbl_handler.connect()
  44. await movement.perform_homing()
  45. print("Press Enter to start movement sequence (or Ctrl+C to exit)...")
  46. while True:
  47. await wait_for_enter()
  48. print("Starting movement sequence...")
  49. await perform_movement_sequence()
  50. print("\nPress Enter to repeat sequence (or Ctrl+C to exit)...")
  51. if __name__ == "__main__":
  52. try:
  53. asyncio.run(test_movement())
  54. except KeyboardInterrupt:
  55. print("\nExiting...")