Documentation
In order to make benchmarking feasible, GRAIC has defined three main interfaces of an autonomous system:
- Perception
- Decision and control
- Vehicle system These interfaces can be seen in the image below. In GRAIC, the ground-truth perception information is provided to the competitors. The competitors will then build a decision and control method which will compute a control input the the vehicle system. This control input is then given to the vehicle system, and the state of the vehicle is then updated.
This page provides a general explanation on how to use GRAIC for developing your intelligent autonomous racing agent. Please see our other documentation pages for more detailed information.
The GRAIC framework has several modules, however competitors only need to be concerned with three: (i) perception, (ii) decision & control, and (iii) vehicle inputs types. As competitors, you will be provided with the perception and vehicle API and you will build your own decision & control module.
Specifically, your controller should implement a class called Agent
as agent. You can find the code here.
class Agent():
def __init__(self, vehicle=None):
self.vehicle = vehicle
def run_step(self, filtered_obstacles, waypoints, vel, transform, boundary):
"""
Execute one step of navigation.
Args:
filtered_obstacles
- Type: List[carla.Actor(), ...]
- Description: All actors except for EGO within sensoring distance
waypoints
- Type: List[[x,y,z], ...]
- Description: List All future waypoints to reach in (x,y,z) format
vel
- Type: carla.Vector3D
- Description: Ego's current velocity in (x, y, z) in m/s
transform
- Type: carla.Transform
- Description: Ego's current transform
boundary
- Type: List[List[left_boundry], List[right_boundry]]
- Description: left/right boundary each consists of 20 waypoints,
they defines the track boundary of the next 20 meters.
Return: carla.VehicleControl()
"""
control = carla.VehicleControl()
control.throttle = 0.5 # Dummy value as an example
control.steer = 0
control.brake = 0
return control