fix bug in rotation
This commit is contained in:
parent
25af55d963
commit
561b2f70a2
20
control.py
20
control.py
@ -306,10 +306,16 @@ def dev(t, speed_x, speed_y, speed_r, y2):
|
|||||||
x2: rotational speed along the z-axis
|
x2: rotational speed along the z-axis
|
||||||
"""
|
"""
|
||||||
max_dist = 0.3
|
max_dist = 0.3
|
||||||
|
print(speed_r)
|
||||||
|
|
||||||
def get_rotation_center(speed_x, speed_y, theta_point):
|
def get_rotation_center(speed_x, speed_y, theta_point):
|
||||||
direction = np.array([-speed_y, speed_x])
|
norm = sqrt(speed_x ** 2 + speed_y ** 2)
|
||||||
return direction / max(0.00001, theta_point)
|
|
||||||
|
r = 1000 if theta_point == 0 else norm / theta_point
|
||||||
|
if norm != 0:
|
||||||
|
return np.array([speed_y, -speed_x]) / norm * r
|
||||||
|
else:
|
||||||
|
return 0, 0
|
||||||
|
|
||||||
center_x, center_y = get_rotation_center(speed_x, speed_y, speed_r)
|
center_x, center_y = get_rotation_center(speed_x, speed_y, speed_r)
|
||||||
|
|
||||||
@ -337,6 +343,7 @@ def dev(t, speed_x, speed_y, speed_r, y2):
|
|||||||
offsets = np.array([0, 1 / 3, 2 / 3, 0, 1 / 3, 2 / 3]) * movement_duration # offset between each leg
|
offsets = np.array([0, 1 / 3, 2 / 3, 0, 1 / 3, 2 / 3]) * movement_duration # offset between each leg
|
||||||
assert len(offsets) == num_patte, f"all offsets must be set, currently, {len(offsets)}/{num_patte} have them"
|
assert len(offsets) == num_patte, f"all offsets must be set, currently, {len(offsets)}/{num_patte} have them"
|
||||||
|
|
||||||
|
# used to cap the speed to a max
|
||||||
max_radius = 0
|
max_radius = 0
|
||||||
for patte in range(num_patte):
|
for patte in range(num_patte):
|
||||||
x1, y1 = real_position[patte][0], real_position[patte][1]
|
x1, y1 = real_position[patte][0], real_position[patte][1]
|
||||||
@ -367,8 +374,11 @@ def dev(t, speed_x, speed_y, speed_r, y2):
|
|||||||
|
|
||||||
if y1 < center_y:
|
if y1 < center_y:
|
||||||
cur_theta *= -1
|
cur_theta *= -1
|
||||||
|
if speed_r != 0:
|
||||||
|
speed = sqrt(speed_x ** 2 + speed_y ** 2) * (speed_r / abs(speed_r))
|
||||||
|
else:
|
||||||
|
speed = sqrt(speed_x ** 2 + speed_y ** 2)
|
||||||
|
|
||||||
speed = abs(speed_x) + abs(speed_y)
|
|
||||||
if speed == 0:
|
if speed == 0:
|
||||||
speed = speed_r
|
speed = speed_r
|
||||||
dthteta = speed * (1 / max_radius * max_dist)
|
dthteta = speed * (1 / max_radius * max_dist)
|
||||||
@ -390,7 +400,9 @@ def dev(t, speed_x, speed_y, speed_r, y2):
|
|||||||
real_position[patte][0] = wanted_x
|
real_position[patte][0] = wanted_x
|
||||||
real_position[patte][1] = wanted_y
|
real_position[patte][1] = wanted_y
|
||||||
|
|
||||||
return legs(real_position)
|
if REAL:
|
||||||
|
return legs(real_position)
|
||||||
|
return legs(real_position), [center_x, center_y]
|
||||||
|
|
||||||
|
|
||||||
def jump(sy):
|
def jump(sy):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user