mag_dist_playground.py 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import sys
  2. import time
  3. from robot_control.src.robot.mag_distributor import MagDistributor
  4. from robot_control.src.utils.config import ConfigParser
  5. from robot_control.src.api.gpio import GPIOInterface, MockGPIO, PiGPIO
  6. def main():
  7. # You may need to adjust these to your environment
  8. config = ConfigParser().config
  9. gpio_config = config.gpio
  10. gpio_config.mag_dist_rot_servo_pin = 6
  11. if gpio_config.debug:
  12. gpio = MockGPIO()
  13. else:
  14. gpio = PiGPIO()
  15. mag_dist = MagDistributor(config, gpio)
  16. print("MagDistributor Playground")
  17. print("Commands:")
  18. print(" h - home")
  19. print(" m <pos_mm> <rot_deg> [speed_mmmin] [servo_speed_ms] - move to position")
  20. print(" s <servo_id> <angle> [speed_ms] - move servo (1: pin 6, 2: pin 13)")
  21. print(" q - quit")
  22. print("Examples:")
  23. print(" m -50 60 - move to -50mm, 60° with default speeds")
  24. print(" m -50 60 1000 - move to -50mm, 60° at 1000 mm/min")
  25. print(" m -50 60 1000 500 - move to -50mm, 60° at 1000 mm/min, servo 500ms")
  26. print(" s 1 90 1000 - move servo 1 to 90° in 1000ms")
  27. print(" s 2 45 - move servo 2 to 45° with default speed")
  28. while True:
  29. cmd = input("Enter command: ").strip()
  30. if cmd == "q":
  31. print("Exiting.")
  32. break
  33. elif cmd == "h":
  34. print("Homing...")
  35. import asyncio
  36. asyncio.run(mag_dist.home())
  37. print("Homed.")
  38. elif cmd.startswith("m "):
  39. try:
  40. parts = cmd.split()
  41. if len(parts) < 3:
  42. print("Usage: m <pos_mm> <rot_deg> [speed_mmmin] [servo_speed_ms]")
  43. continue
  44. pos_mm = float(parts[1])
  45. rot_deg = float(parts[2])
  46. speed_mmmin = float(parts[3]) if len(parts) > 3 else None
  47. servo_speed_ms = float(parts[4]) if len(parts) > 4 else 1000
  48. print(f"Moving to {pos_mm} mm, {rot_deg}°" +
  49. (f" at {speed_mmmin} mm/min" if speed_mmmin else " (default speed)") +
  50. f" (servo: {servo_speed_ms}ms)")
  51. if speed_mmmin:
  52. step_delay = mag_dist._speed_to_step_delay(speed_mmmin)
  53. mag_dist.move_mag_distributor_at_pos(pos_mm, rot_deg, servo_speed_ms, step_delay)
  54. else:
  55. mag_dist.move_mag_distributor_at_pos(pos_mm, rot_deg, servo_speed_ms)
  56. print(f"✓ Moved to {pos_mm} mm, {rot_deg}°")
  57. except Exception as e:
  58. print(f"Invalid move command: {e}")
  59. print("Usage: m <pos_mm> <rot_deg> [speed_mmmin] [servo_speed_ms]")
  60. elif cmd.startswith("s "):
  61. try:
  62. parts = cmd.split()
  63. if len(parts) < 3:
  64. print("Usage: s <servo_id> <angle> [speed_ms]")
  65. continue
  66. servo_id = int(parts[1])
  67. angle = float(parts[2])
  68. speed_ms = float(parts[3]) if len(parts) > 3 else 1000
  69. if servo_id == 1:
  70. servo_pin = 6
  71. elif servo_id == 2:
  72. servo_pin = 13
  73. else:
  74. print(f"Unknown servo_id: {servo_id}. Use 1 or 2.")
  75. continue
  76. gpio.set_servo_angle_smooth(servo_pin, angle, speed_ms)
  77. print(f"✓ Moved servo {servo_id} (pin {servo_pin}) to {angle}° in {speed_ms}ms")
  78. except Exception as e:
  79. print(f"Invalid servo command: {e}")
  80. print("Usage: s <servo_id> <angle> [speed_ms]")
  81. else:
  82. print("Unknown command.")
  83. if __name__ == "__main__":
  84. main()