# Triplex v0.4

Este artigo é a parte 2 de 3 da série  Triplex

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.

Series Navigation<< Triplex – an holonomic robotTriplex – gamepad control >>