import threading import turtle import argparse from pythonosc import udp_client from pythonosc.dispatcher import Dispatcher from pythonosc import osc_server t = turtle.Turtle() screen = turtle.Screen() screen.title("Painting robot sim") COLORS = [ "black", "yellow", "red", "blue" ] def color_handler(unused_addr, c): if c in COLORS: t.pencolor(c) def coordinate_handler(unused_addr, x, y, z, roll, pitch, yaw): prev_size = t.pensize t.pen(pensize=z) if z <= 0: t.penup() else: t.pendown() if prev_size == 0: t.dot() t.goto(x, y) if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--ip", default="127.0.0.1", help="The ip to listen on") parser.add_argument("--port", type=int, default=5005, help="The port to listen on") args = parser.parse_args() dispatcher = Dispatcher() dispatcher.map("/tcp_coordinates", coordinate_handler) dispatcher.map("/color", color_handler) server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcher) print(f"Serving on {server.server_address}") osc_thread = threading.Thread(target = server.serve_forever, daemon=True) osc_thread.start() turtle.done()