Triplex v0.3 was demoed at São João da Madeira’s BRInCKa 2017, just using remote control from my laptop through a ssh session. As expected, some people find it similar to a lobster and a few visitors noticed the omniwheels and asked for further details.
The best moment was after the exhibition being closed – a private test drive session just for ‘Pocas’, our LUG mosaic expert:
One of these days I do have to complete my wifi-to-IR gateway so Pocas can drive Technic Power Functions models like the 42065 RC Tracked Racer.
Now one of the lessons learned at BRINcKa 2017 was that Triplex was bending with is own weight. So last weeked I redesigned it to be more solid. Version 0.4 “legs” are now a little longer and overall I think it looks more elegant:
Also managed to make the math working and tested my matrix in python:
0.667 0 0.333 -0.333 -0.575 0.333 -0.333 0.575 0.333
To test moving it in 24 different directions (multiples of 15º) I used this python script (with some simplifications – since I don’t want it to rotate)
#!/usr/bin/env python3 from math import cos,sin from time import sleep import ev3dev.ev3 as ev3 M11 = 0.667 M12 = 0 M13 = 0.333 M21 = -0.333 M22 = -0.575 M23 = 0.333 M31 = -0.333 M32 = 0.575 M33 = 0.333 SPEED = 1000 TIME = 1200 PAUSE = 0.8 PI = 3.14159 m1 = ev3.MediumMotor('outA') m2 = ev3.MediumMotor('outB') m3 = ev3.MediumMotor('outC') # select an angle a in PI/12 radians = 15º for x in range(0, 24): # move a = x*PI/12 ax = cos(a) ay = sin(a) f1 = M11 * ax + M12 * ay f2 = M21 * ax + M22 * ay f3 = M31 * ax + M32 * ay s1 = f1 * SPEED s2 = f2 * SPEED s3 = f3 * SPEED m1.run_timed(time_sp=TIME, speed_sp=s1) m2.run_timed(time_sp=TIME, speed_sp=s2) m3.run_timed(time_sp=TIME, speed_sp=s3) sleep(TIME/1000) sleep(PAUSE) # move back a = PI + x*PI/12 ax = cos(a) ay = sin(a) f1 = M11 * ax + M12 * ay f2 = M21 * ax + M22 * ay f3 = M31 * ax + M32 * ay s1 = f1 * SPEED s2 = f2 * SPEED s3 = f3 * SPEED m1.run_timed(time_sp=TIME, speed_sp=s1) m2.run_timed(time_sp=TIME, speed_sp=s2) m3.run_timed(time_sp=TIME, speed_sp=s3) sleep(TIME/1000) sleep(PAUSE)
The result can be seen in this video:
The robot drifts a lot after the 48 moves and also rotates a bit. Will have to compensante it with a gyro (and probably better wheels, I’m considering mecanum wheels). But the directions are quite as expected.
I uploaded a couple of photos to the Triplex Project Album. Will try to add a few more later on.