implement roaming

This commit is contained in:
Siwat Sirichai 2022-10-25 21:53:05 +07:00
parent 767a4c4ad5
commit 37d8285b97
4 changed files with 85 additions and 6 deletions

View File

@ -1,4 +1,12 @@
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_R = 7
MOTOR_FR_F = 8
@ -8,8 +16,14 @@ MOTOR_RL_R = 11
MOTOR_RR_F = 12
MOTOR_RR_R = 13
# Full Speed 90 Degress Turn Time
TURN_TIME_FS_90DEG_MS = 1500
SERIAL_AUX_BOARD = "/dev/serial/by-id/..."
COLLISION_DETECTOR_PIN = 2
LEDS_DATA_PIN = 3
LEDS_NUM = 15
DHT22_PIN = 5
LEDS_NUM = 15

View File

@ -6,5 +6,5 @@ class leds:
self.aux_board = aux_board
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

View File

@ -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
from kuukar_leds import leds
from kuukar_sensors import sensors
@ -57,5 +58,31 @@ class motion:
self.__roam_handle__()
def __roam_handle__(self):
#TODO Implement Roaming Function
pass
self.drive(50)
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)

View File

@ -1,5 +1,43 @@
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:
__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:
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