✨
This commit is contained in:
54
drive_to_aruco.py
Normal file
54
drive_to_aruco.py
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
from time import sleep
|
||||||
|
|
||||||
|
import cv2
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
from robot import Robot
|
||||||
|
|
||||||
|
POWER = 70
|
||||||
|
|
||||||
|
TURN_T = 0.079 # 10 degrees
|
||||||
|
DRIVE_T = 0.22 # 10 centimeter
|
||||||
|
|
||||||
|
RIGHT_WHEEL_OFFSET = 4
|
||||||
|
|
||||||
|
CLOCKWISE_OFFSET = 0.96
|
||||||
|
|
||||||
|
FOCAL_LENGTH = 1691
|
||||||
|
|
||||||
|
CAMERA_MATRIX = np.array(
|
||||||
|
[[FOCAL_LENGTH,0,512],[0,FOCAL_LENGTH,360],[0,0,1]],
|
||||||
|
dtype=np.float32
|
||||||
|
)
|
||||||
|
DIST_COEF = np.array([0,0,0,0,0], dtype=np.float32)
|
||||||
|
|
||||||
|
def find_aruco(image):
|
||||||
|
aruco_dict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_6X6_250)
|
||||||
|
aruco_params = cv2.aruco.DetectorParameters_create()
|
||||||
|
corners, ids, _ = cv2.aruco.detectMarkers(
|
||||||
|
image,
|
||||||
|
aruco_dict,
|
||||||
|
parameters=aruco_params
|
||||||
|
)
|
||||||
|
|
||||||
|
if corners is None:
|
||||||
|
return []
|
||||||
|
|
||||||
|
return [(box[0], ids[i]) for i, box in enumerate(corners)]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
arlo = Robot()
|
||||||
|
while True:
|
||||||
|
arucos = find_aruco(Robot.take_photo())
|
||||||
|
if arucos is not []:
|
||||||
|
break
|
||||||
|
arlo.go_diff(POWER, POWER, 1, 0)
|
||||||
|
sleep(TURN_T)
|
||||||
|
|
||||||
|
position = cv2.aruco.estimatePoseSingleMarkers(
|
||||||
|
np.array([arucos[0][0]]), 14.5, CAMERA_MATRIX, DIST_COEF
|
||||||
|
)
|
||||||
|
print(position)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
@ -6,8 +6,8 @@ import numpy as np
|
|||||||
from .robot import Robot
|
from .robot import Robot
|
||||||
|
|
||||||
START_VALUES = [60, 60]
|
START_VALUES = [60, 60]
|
||||||
THRESHOLD = 1.1
|
THRESHOLD = 1.05
|
||||||
SLEEP_TIME = 2
|
TESTING_SLEEP_TIME = 2
|
||||||
DEFAULT_CALIBRATION_CODE = "40.40-40.40-40.40_ff-ff-ff-ff"
|
DEFAULT_CALIBRATION_CODE = "40.40-40.40-40.40_ff-ff-ff-ff"
|
||||||
|
|
||||||
FOCAL_LENGTH = 1691
|
FOCAL_LENGTH = 1691
|
||||||
@ -21,7 +21,7 @@ DIST_COEF = np.array([0,0,0,0,0], dtype=np.float32)
|
|||||||
def test_forward(arlo, l_power, r_power):
|
def test_forward(arlo, l_power, r_power):
|
||||||
arlo.reset_encoder_counts()
|
arlo.reset_encoder_counts()
|
||||||
arlo.go_diff(l_power, r_power, 1, 1)
|
arlo.go_diff(l_power, r_power, 1, 1)
|
||||||
sleep(SLEEP_TIME)
|
sleep(TESTING_SLEEP_TIME)
|
||||||
arlo.stop()
|
arlo.stop()
|
||||||
return (
|
return (
|
||||||
abs(int(arlo.read_left_wheel_encoder())),
|
abs(int(arlo.read_left_wheel_encoder())),
|
||||||
@ -31,7 +31,7 @@ def test_forward(arlo, l_power, r_power):
|
|||||||
def test_back(arlo, l_power, r_power):
|
def test_back(arlo, l_power, r_power):
|
||||||
arlo.reset_encoder_counts()
|
arlo.reset_encoder_counts()
|
||||||
arlo.go_diff(l_power, r_power, 0, 0)
|
arlo.go_diff(l_power, r_power, 0, 0)
|
||||||
sleep(SLEEP_TIME)
|
sleep(TESTING_SLEEP_TIME)
|
||||||
arlo.stop()
|
arlo.stop()
|
||||||
return (
|
return (
|
||||||
abs(int(arlo.read_left_wheel_encoder())),
|
abs(int(arlo.read_left_wheel_encoder())),
|
||||||
@ -41,7 +41,7 @@ def test_back(arlo, l_power, r_power):
|
|||||||
def test_clockwise(arlo, l_power, r_power):
|
def test_clockwise(arlo, l_power, r_power):
|
||||||
arlo.reset_encoder_counts()
|
arlo.reset_encoder_counts()
|
||||||
arlo.go_diff(l_power, r_power, 1, 0)
|
arlo.go_diff(l_power, r_power, 1, 0)
|
||||||
sleep(SLEEP_TIME)
|
sleep(TESTING_SLEEP_TIME)
|
||||||
arlo.stop()
|
arlo.stop()
|
||||||
return (
|
return (
|
||||||
abs(int(arlo.read_left_wheel_encoder())),
|
abs(int(arlo.read_left_wheel_encoder())),
|
||||||
@ -51,7 +51,7 @@ def test_clockwise(arlo, l_power, r_power):
|
|||||||
def test_anticlockwise(arlo, l_power, r_power):
|
def test_anticlockwise(arlo, l_power, r_power):
|
||||||
arlo.reset_encoder_counts()
|
arlo.reset_encoder_counts()
|
||||||
arlo.go_diff(l_power, r_power, 0, 1)
|
arlo.go_diff(l_power, r_power, 0, 1)
|
||||||
sleep(SLEEP_TIME)
|
sleep(TESTING_SLEEP_TIME)
|
||||||
arlo.stop()
|
arlo.stop()
|
||||||
return (
|
return (
|
||||||
abs(int(arlo.read_left_wheel_encoder())),
|
abs(int(arlo.read_left_wheel_encoder())),
|
||||||
@ -181,15 +181,15 @@ class Arlo():
|
|||||||
else:
|
else:
|
||||||
values[i][1] += 1
|
values[i][1] += 1
|
||||||
|
|
||||||
cps[i] = wheels[0]/SLEEP_TIME
|
cps[i] = wheels[0]/TESTING_SLEEP_TIME
|
||||||
|
|
||||||
time = [0 for _ in range(4)]
|
time = [0 for _ in range(4)]
|
||||||
|
|
||||||
cpc = 144/(3.14159*15) # wheel counts per cm
|
cpc = 144/(3.14159*15) # wheel counts per cm
|
||||||
|
|
||||||
# milliseconds per 10cm forward
|
# milliseconds per 1cm forward
|
||||||
time[0] = int((1000 * cpc)/cps[0])
|
time[0] = int((1000 * cpc)/cps[0])
|
||||||
# milliseconds per 10cm backwards
|
# milliseconds per 1cm backwards
|
||||||
time[1] = int((1000 * cpc)/cps[1])
|
time[1] = int((1000 * cpc)/cps[1])
|
||||||
|
|
||||||
cpr = 3.1415*38 # 1 rotation in cm
|
cpr = 3.1415*38 # 1 rotation in cm
|
||||||
|
Reference in New Issue
Block a user