| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import logging
- import numpy as np
- class Robot:
- def __init__(self, simulator, name: str, id: int, position: np.array, rate: int) -> None:
- """The base Robot class
- Parameters
- ----------
- name : str
- Robot's name
- id : int
- Robot's ID
- position : np.array
- Robot's start position
- rate : int
- Simulator's update rate
- """
- # host simulator
- self.simulator = simulator
- self.name = name
- self.id = id
- self.position = position
- self.desierd_position = self.position
- self.in_position = True
- self.speed = 0.0
- self.rate = rate
- self.max_speed = 100.0 # m/s
- def waypoint_ctrl(self, speed=None, desierd_pos: np.array = None):
- # if got new waypoint, update
- if not np.any(desierd_pos == None):
- self.desierd_position = desierd_pos
- if speed == None:
- self.speed = self.max_speed
- else:
- if speed > self.max_speed:
- logging.warning("Given speed is over maximum")
- self.speed = speed
- if np.any(self.position != self.desierd_position):
- self.in_position = False
- one_time_step_length = speed/self.rate
- difference = self.desierd_position - self.position
- distance = np.linalg.norm(difference)
- # if it's close enough to the goal position, make it in position
- if distance <= one_time_step_length:
- self.position = self.desierd_position
- self.in_position = True
- else:
- # move to the goal point at the given speed
- direction = difference/distance
- self.position = self.position + direction*self.speed/self.rate
- def job(self):
- self.waypoint_ctrl()
- pass
|