The latest version of Vexcode V5 (not Vexcode Pro) added Motor Groups. I think in other programming environments motor groups will help sync motors so they run at the same speed. Do the new motor groups in Vexcode V5 do the synching?
I did some quick tests and I don’t think they do. I use this snippet when running two motors with very different loads on them:
A_encoder = Groupy_motor_a.position(TURNS)
B_encoder = Groupy_motor_b.position(TURNS)
A_diff = A_encoder - A_last
B_diff = B_encoder - B_last
if abs(A_diff) > 0:
speed_offset = 1 - (B_diff / A_diff)
print('%s, %s, %s, %s, %s' % (A_encoder, B_encoder, A_diff, B_diff, speed_offset * 100))
A_last = A_encoder
B_last = B_encoder
The last value, the percent difference between the two motors, reports roughly 3 percent difference between them after running for about 1 minute. If I use equivalent code controlling the motors individually, the error report is roughly the same.
For completeness, here is the full (Python) code using Motor Groups:
from vex import *
# Begin project code
Groupy.stop()
Groupy.set_velocity(90, PERCENT)
record = Event()
A_last = 0
B_last = 0
recording = False
spinning = False
def do_record():
global recording
global A_last
global B_last
recording = True
A_last = 0
B_last = 0
print('A position, B position, A difference, B difference, B percent of A')
while recording:
A_encoder = Groupy_motor_a.position(TURNS)
B_encoder = Groupy_motor_b.position(TURNS)
A_diff = A_encoder - A_last
B_diff = B_encoder - B_last
if abs(A_diff) > 0:
speed_offset = 1 - (B_diff / A_diff)
print('%s, %s, %s, %s, %s' % (A_encoder, B_encoder, A_diff, B_diff, speed_offset * 100))
A_last = A_encoder
B_last = B_encoder
wait(0.1,SECONDS)
record(do_record)
def do_spin():
global spinning
spinning = True
Groupy.set_position(0,TURNS)
record.broadcast()
Groupy.spin(FORWARD)
def stop_spin():
global spinning
global recording
spinning = False
recording = False
Groupy.stop()
controller_1.buttonA.pressed(do_spin)
controller_1.buttonA.released(stop_spin)
Here is the code using two non-grouped Motors:
from vex import *
# Begin project code
A.stop()
B.stop()
A.set_velocity(90, PERCENT)
B.set_velocity(90, PERCENT)
record = Event()
A_last = 0
B_last = 0
recording = False
spinning = False
def do_record():
global recording
global A_last
global B_last
recording = True
A_last = 0
B_last = 0
print('A position, B position, A difference, B difference, B percent of A')
while recording:
A_encoder = A.position(TURNS)
B_encoder = B.position(TURNS)
A_diff = A_encoder - A_last
B_diff = B_encoder - B_last
if abs(A_diff) > 0:
speed_offset = 1 - (B_diff / A_diff)
print('%s, %s, %s, %s, %s' % (A_encoder, B_encoder, A_diff, B_diff, speed_offset * 100))
A_last = A_encoder
B_last = B_encoder
wait(0.1,SECONDS)
record(do_record)
def do_spin():
global spinning
spinning = True
A.set_position(0,TURNS)
B.set_position(0,TURNS)
record.broadcast()
A.spin(FORWARD)
B.spin(FORWARD)
def stop_spin():
global spinning
global recording
spinning = False
recording = False
A.stop()
B.stop()
controller_1.buttonA.pressed(do_spin)
controller_1.buttonA.released(stop_spin)