Compare commits

...

4 Commits

Author SHA1 Message Date
06524577ff finished gelb 2025-09-30 11:13:50 +02:00
44b7caed76 Merge branch 'master' into mussorgsky 2025-09-09 10:37:08 +02:00
3bd7de9042 colors 2025-09-09 10:35:52 +02:00
1a07709d39 almost finished gelb 2025-09-09 10:16:11 +02:00
3 changed files with 31 additions and 12 deletions

View File

@ -1,4 +1,4 @@
#N canvas 155 110 562 769 12; #N canvas 1091 134 562 769 12;
#X obj 95 418 netsend -u -b; #X obj 95 418 netsend -u -b;
#X obj 87 252 oscformat tcp_coordinates; #X obj 87 252 oscformat tcp_coordinates;
#X msg 233 363 disconnect; #X msg 233 363 disconnect;
@ -7,6 +7,9 @@
#X msg 307 289 connect localhost 5005; #X msg 307 289 connect localhost 5005;
#X obj 325 262 loadbang; #X obj 325 262 loadbang;
#X msg 82 214 242 29 2 0 0 0; #X msg 82 214 242 29 2 0 0 0;
#X msg 222 122 yellow;
#X obj 226 152 list;
#X obj 238 182 oscformat color;
#X connect 1 0 4 0; #X connect 1 0 4 0;
#X connect 2 0 0 0; #X connect 2 0 0 0;
#X connect 3 0 0 0; #X connect 3 0 0 0;
@ -14,3 +17,6 @@
#X connect 5 0 0 0; #X connect 5 0 0 0;
#X connect 6 0 5 0; #X connect 6 0 5 0;
#X connect 7 0 1 0; #X connect 7 0 1 0;
#X connect 8 0 9 0;
#X connect 9 0 10 0;
#X connect 10 0 4 0;

11
main.py
View File

@ -8,6 +8,16 @@ from pythonosc import osc_server
t = turtle.Turtle() t = turtle.Turtle()
screen = turtle.Screen() screen = turtle.Screen()
screen.title("Painting robot sim") 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): def coordinate_handler(unused_addr, x, y, z, roll, pitch, yaw):
t.pen(pensize=z) t.pen(pensize=z)
@ -26,6 +36,7 @@ if __name__ == "__main__":
dispatcher = Dispatcher() dispatcher = Dispatcher()
dispatcher.map("/tcp_coordinates", coordinate_handler) dispatcher.map("/tcp_coordinates", coordinate_handler)
dispatcher.map("/color", color_handler)
server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcher) server = osc_server.ThreadingOSCUDPServer((args.ip, args.port), dispatcher)
print(f"Serving on {server.server_address}") print(f"Serving on {server.server_address}")

View File

@ -18,22 +18,24 @@ args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port) client = udp_client.SimpleUDPClient(args.ip, args.port)
angle = 0 angle = 0
magnitude = 20 magnitude = 0
mean = 74.1
client.send_message("/color", "yellow")
for msg in mid.tracks[1]: for msg in mid.tracks[1]:
t = mido.tick2second(msg.time, mid.ticks_per_beat, 1000000) t = mido.tick2second(msg.time, mid.ticks_per_beat, 1000000)
beats = msg.time / mid.ticks_per_beat beats = msg.time / mid.ticks_per_beat
time.sleep(t)
rotation = 2 * math.pi * beats / 16 rotation = 2 * math.pi * beats / 16
angle += rotation angle += rotation
magnitude += beats magnitude += beats * 3
if msg.type != "note_on": if msg.type != "note_on" or msg.time == 0:
time.sleep(t)
continue continue
print(msg.note)
print(angle) adj_angle = angle + (msg.note - mean) / 9
print(magnitude) y = math.sin(adj_angle) * magnitude
x = math.cos(adj_angle) * magnitude
y = math.sin(angle) * magnitude client.send_message("/tcp_coordinates", (x, y, 6, 0, 0, 0))
x = math.cos(angle) * magnitude time.sleep(t)
client.send_message("/tcp_coordinates", (x, y, 10, 0, 0, 0))