This commit is contained in:
NikolajDanger
2022-09-26 14:05:14 +02:00
parent 5916f9dbb3
commit 0abeff7273
2 changed files with 63 additions and 9 deletions

54
drive_to_aruco.py Normal file
View 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()

View File

@ -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