How can I calculate a better way to rotate?
Author - Eyal Cohen
Given two coordinates in a 2-dimensional plane and your robots' current direction, the smart rotation algorithm will calculate your target angle and return whether your robot should to turn left, turn right, or go straight ahead to reach its navigation goal.
How It Works:
from math import atan2
import math
def smartRotate(posex1, posey1, posex2, posey2, theta):
inc_x = posex2 -posex1
inc_y = posey2 -posey1
angle_goal = atan2(inc_y, inc_x)
# if angle_to_goal < 0:
# angle_to_goal = (2* math.pi) + angle_to_goal
print("angle goal = ",angle_goal)
goal_range = theta + math.pi
wrapped = goal_range - (2 * math.pi)
if abs(angle_goal - theta) > 0.1:
print(theta)
print("goal_range = ",goal_range)
if (goal_range) > (2 * math.pi) and (theta < angle_goal or angle_goal < wrapped):
print("go left")
elif (goal_range) < (2 * math.pi) and (theta < angle_goal and angle_goal < goal_range):
print("go left")
else:
print("go right")
else:
print("go straight")Consider This Example:
Last updated
Was this helpful?
