implement roaming
This commit is contained in:
parent
767a4c4ad5
commit
37d8285b97
|
@ -1,4 +1,12 @@
|
||||||
SERIAL_DRIVER_BOARD = "/dev/serial/by-id/..."
|
SERIAL_DRIVER_BOARD = "/dev/serial/by-id/..."
|
||||||
|
|
||||||
|
SONAR_1_TRIG_PIN = 0
|
||||||
|
SONAR_1_ECHO_PIN = 1
|
||||||
|
SONAR_2_TRIG_PIN = 2
|
||||||
|
SONAR_2_ECHO_PIN = 3
|
||||||
|
SONAR_3_TRIG_PIN = 4
|
||||||
|
SONAR_3_ECHO_PIN = 5
|
||||||
|
|
||||||
MOTOR_FL_F = 6
|
MOTOR_FL_F = 6
|
||||||
MOTOR_FL_R = 7
|
MOTOR_FL_R = 7
|
||||||
MOTOR_FR_F = 8
|
MOTOR_FR_F = 8
|
||||||
|
@ -8,8 +16,14 @@ MOTOR_RL_R = 11
|
||||||
MOTOR_RR_F = 12
|
MOTOR_RR_F = 12
|
||||||
MOTOR_RR_R = 13
|
MOTOR_RR_R = 13
|
||||||
|
|
||||||
|
# Full Speed 90 Degress Turn Time
|
||||||
|
TURN_TIME_FS_90DEG_MS = 1500
|
||||||
|
|
||||||
SERIAL_AUX_BOARD = "/dev/serial/by-id/..."
|
SERIAL_AUX_BOARD = "/dev/serial/by-id/..."
|
||||||
|
|
||||||
COLLISION_DETECTOR_PIN = 2
|
COLLISION_DETECTOR_PIN = 2
|
||||||
|
|
||||||
LEDS_DATA_PIN = 3
|
LEDS_DATA_PIN = 3
|
||||||
|
LEDS_NUM = 15
|
||||||
|
|
||||||
DHT22_PIN = 5
|
DHT22_PIN = 5
|
||||||
LEDS_NUM = 15
|
|
|
@ -6,5 +6,5 @@ class leds:
|
||||||
self.aux_board = aux_board
|
self.aux_board = aux_board
|
||||||
self.aux_board.set_pin_mode_neopixel(LEDS_DATA_PIN,LEDS_NUM)
|
self.aux_board.set_pin_mode_neopixel(LEDS_DATA_PIN,LEDS_NUM)
|
||||||
|
|
||||||
def flash(r: int,g: int,b: int,duration_ms: int):
|
def flash(self, r: int,g: int,b: int,duration_ms: int):
|
||||||
pass
|
pass
|
|
@ -1,4 +1,5 @@
|
||||||
from kuukar_config import MOTOR_FL_F, MOTOR_FL_R, MOTOR_FR_F, MOTOR_FR_R, MOTOR_RL_F, MOTOR_RL_R, MOTOR_RR_F, MOTOR_RR_R
|
from random import randint
|
||||||
|
from kuukar_config import MOTOR_FL_F, MOTOR_FL_R, MOTOR_FR_F, MOTOR_FR_R, MOTOR_RL_F, MOTOR_RL_R, MOTOR_RR_F, MOTOR_RR_R, TURN_TIME_FS_90DEG_MS
|
||||||
import time
|
import time
|
||||||
from kuukar_leds import leds
|
from kuukar_leds import leds
|
||||||
from kuukar_sensors import sensors
|
from kuukar_sensors import sensors
|
||||||
|
@ -57,5 +58,31 @@ class motion:
|
||||||
self.__roam_handle__()
|
self.__roam_handle__()
|
||||||
|
|
||||||
def __roam_handle__(self):
|
def __roam_handle__(self):
|
||||||
#TODO Implement Roaming Function
|
self.drive(50)
|
||||||
pass
|
f_dist = self.sensors.sonar_get_distance(2)
|
||||||
|
if f_dist > 0 and f_dist < 20: # Close to collision, turn the vehicle
|
||||||
|
l_dist = self.sensors.sonar_get_distance
|
||||||
|
r_dist = self.sensors.sonar_get_distance
|
||||||
|
if l_dist < 20: #Left side is blocked
|
||||||
|
if r_dist < 20: #Both side are blocked, do a full 180deg turn
|
||||||
|
self.turn(100,2*TURN_TIME_FS_90DEG_MS)
|
||||||
|
self.drive(50)
|
||||||
|
time.sleep(3)
|
||||||
|
else:
|
||||||
|
#Right Side is Free, turn right
|
||||||
|
self.turn(100,TURN_TIME_FS_90DEG_MS)
|
||||||
|
self.drive(50)
|
||||||
|
time.sleep(3)
|
||||||
|
elif r_dist < 20: #Right side is blocked, left side is free, turn left
|
||||||
|
self.turn(-100,TURN_TIME_FS_90DEG_MS)
|
||||||
|
else: #Both Side are free, randomize a direction
|
||||||
|
right: bool = randint(0,1)
|
||||||
|
if right:
|
||||||
|
self.turn(100,TURN_TIME_FS_90DEG_MS)
|
||||||
|
self.drive(50)
|
||||||
|
time.sleep(3)
|
||||||
|
else:
|
||||||
|
self.turn(-100,TURN_TIME_FS_90DEG_MS)
|
||||||
|
self.drive(50)
|
||||||
|
time.sleep(3)
|
||||||
|
time.sleep(0.5)
|
|
@ -1,5 +1,43 @@
|
||||||
from telemetrix_rpi_pico import telemetrix_rpi_pico
|
from telemetrix_rpi_pico import telemetrix_rpi_pico
|
||||||
|
|
||||||
|
from kuukar_config import DHT22_PIN, SONAR_1_ECHO_PIN, SONAR_1_TRIG_PIN, SONAR_2_ECHO_PIN, SONAR_2_TRIG_PIN, SONAR_3_ECHO_PIN, SONAR_3_TRIG_PIN
|
||||||
|
|
||||||
|
|
||||||
class sensors:
|
class sensors:
|
||||||
|
|
||||||
|
__sonar_trig_pins__ = [SONAR_1_TRIG_PIN, SONAR_2_TRIG_PIN, SONAR_3_TRIG_PIN]
|
||||||
|
__sonar_distances__ = [0, 0, 0]
|
||||||
|
__temperature__ = 0
|
||||||
|
__humidity__ = 0
|
||||||
|
|
||||||
def __init__(self, aux_board: telemetrix_rpi_pico.TelemetrixRpiPico, driver_board: telemetrix_rpi_pico.TelemetrixRpiPico) -> None:
|
def __init__(self, aux_board: telemetrix_rpi_pico.TelemetrixRpiPico, driver_board: telemetrix_rpi_pico.TelemetrixRpiPico) -> None:
|
||||||
self.aux = aux_board
|
self.aux = aux_board
|
||||||
self.driver = driver_board
|
self.driver = driver_board
|
||||||
|
self.driver.set_pin_mode_sonar(
|
||||||
|
SONAR_1_TRIG_PIN, SONAR_1_ECHO_PIN, self.__sonar_callback__)
|
||||||
|
self.driver.set_pin_mode_sonar(
|
||||||
|
SONAR_2_TRIG_PIN, SONAR_2_ECHO_PIN, self.__sonar_callback__)
|
||||||
|
self.driver.set_pin_mode_sonar(
|
||||||
|
SONAR_3_TRIG_PIN, SONAR_3_ECHO_PIN, self.__sonar_callback__)
|
||||||
|
self.driver.set_pin_mode_dht(DHT22_PIN, self.__dht22_callback__)
|
||||||
|
|
||||||
|
def sonar_get_distance(self, id: int) -> float:
|
||||||
|
return self.__sonar_distances__[id]
|
||||||
|
|
||||||
|
def __sonar_callback__(self, data):
|
||||||
|
pin = data[1]
|
||||||
|
distance = data[2]
|
||||||
|
sonar_id = self.sonar_pins.index(pin)
|
||||||
|
self.__sonar_distances__[sonar_id] = distance
|
||||||
|
|
||||||
|
def get_temperature(self) -> float:
|
||||||
|
return self.__temperature__
|
||||||
|
|
||||||
|
def get_humidity_pct(self) -> float:
|
||||||
|
return self.__humidity__
|
||||||
|
|
||||||
|
def __dht22_callback__(self,data):
|
||||||
|
humidity = data[3]
|
||||||
|
temperature = data[4]
|
||||||
|
self.__humidity__ = humidity
|
||||||
|
self.__temperature__ = temperature
|
Loading…
Reference in New Issue