| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- import asyncio
- from robot_control.src.robot.movement import RobotMovement
- from robot_control.src.api.grbl_handler import GRBLHandler
- from robot_control.src.utils.config import GRBLConfig, MovementConfig
- from robot_control.src.api.gpio import PiGPIO
- """
- Interactive movement script for the robot.
- - Homes only once at startup.
- - Lets you enter X, Y, Z positions in a loop.
- - No restart or re-homing between moves.
- - Type 'exit' to quit.
- """
- grbl_config = GRBLConfig(port="/dev/ttyUSB0", baudrate=115200)
- test_config = MovementConfig(
- speed_mmmin=15000,
- safe_height=10
- )
- grbl_handler = GRBLHandler(
- grbl_config.port,
- grbl_config.baudrate
- )
- movement = RobotMovement(test_config, grbl_handler)
- pump_pin = 17
- valve_pin = 27
- gpio = PiGPIO([pump_pin, valve_pin], [])
- pump_state = 0
- valve_state = 0
- async def main():
- await grbl_handler.connect()
- print("Robot ready. Enter X Y Z [speed_mmmin], 'p' to toggle pump, 'v' to toggle valve (or 'exit' to quit):")
- global pump_state, valve_state
- while True:
- user_input = input("Target position (X Y Z [speed] | p | v): ").strip().lower()
- if user_input in ("exit", "quit"):
- print("Exiting...")
- break
- elif user_input == "p":
- pump_state ^= 1
- gpio.set_pin(pump_pin, pump_state)
- print(f"Pump {'ON' if pump_state else 'OFF'}")
- continue
- elif user_input == "v":
- valve_state ^= 1
- gpio.set_pin(valve_pin, valve_state)
- print(f"Valve {'ON' if valve_state else 'OFF'}")
- continue
- try:
- parts = user_input.split()
- if len(parts) not in (3, 4):
- raise ValueError
- x, y, z = map(float, parts[:3])
- if len(parts) == 4:
- speed = int(parts[3])
- else:
- speed = test_config.speed_mmmin
- except Exception:
- print("Invalid input. Please enter three or four numbers separated by spaces, 'p', 'v', or 'exit'.")
- continue
- print(f"Moving to ({x}, {y}, {z}) at {speed} mm/min...")
- await movement.move_to_position(x, y, z, speed_mmmin=speed)
- print("Move complete. Enter next position, 'p', 'v', or 'exit'.")
- if __name__ == "__main__":
- try:
- asyncio.run(main())
- except KeyboardInterrupt:
- print("\nExiting...")
|