Skip to content
abol-karimiPublic

About

Voronoi-roadmap planner and controller that won the GRAIC autonomous racing competition, CPS-IoT Week 2021

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

37 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GRAIC — GoHeelsRacing

UNC's entry to the Generalized Racing Intelligence Competition (GRAIC), which took first place at CPS-IoT Week 2021, ahead of entries from UIUC and Penn. Later adapted for GRAIC 2022.

GRAIC asks for a controller that drives a simulated vehicle around an unseen track scattered with obstacles, as fast as possible, without colliding or leaving the drivable area. Competitors do not get the track in advance, so the entry has to plan online from whatever the sensors report rather than following a route tuned offline.

Approach

The vehicle is driven by two ROS nodes.

A Voronoi-diagram planner, in C++ (src/VoronoiPlanner.cpp, src/planner_main.cpp). Lane boundaries and detected obstacles arrive as line segments. The planner builds a Voronoi roadmap over those segments, which by construction traces the paths that stay maximally far from everything around them, and searches it for a route to the next milestone. Clearance is tunable through allowed_obs_dist, so the racing line can be pushed closer to obstacles when speed matters more than margin. Using the medial axis this way means obstacle avoidance falls out of the geometry rather than needing a separate avoidance behavior bolted on.

Decision and control, in Python (src/main.py). VehicleDecision subscribes to the lane markers, waypoints and obstacle list, assembles the wall segments the planner needs, and converts between the map frame and the vehicle's rear-axle frame. It fits circles through the returned path to recover its curvature and derive a minimum turn radius, which is what bounds how fast the car can take the line it was given. VehicleController then tracks the plan, with predictive speed control and a safety check that projects the rear axle's movement forward before committing to a command.

Layout

src/VoronoiPlanner.{h,cpp}   Voronoi roadmap construction and path search
src/planner_main.cpp         the planner ROS node
src/main.py                  VehicleDecision and VehicleController
src/baseline.py              the competition's provided baseline, for comparison
msg/                         VoronoiPlannerInput, VoronoiPlannerOutput, LineSegment
launch/race.launch           brings up both nodes

Running it

The package is a ROS package named GoHeelsRacing. Build it in a catkin workspace alongside the GRAIC competition stack, which supplies the graic_msgs messages and the CARLA bridge, then:

roslaunch GoHeelsRacing race.launch

That starts the planner node and the main decision-and-control node together.

Credits

Abolfazl Karimi, with contributions from @Gheavenfl. Advisor: Parasara Sridhar Duggirala. UNC-Chapel Hill.

UNC CS write-up of the win

Related

  • unc-f1tenth — UNC's F1/10 entry, first place at CPS-IoT Week 2019.
  • UnrealF1Tenth — Unreal Engine simulator for the F1/10 platform.

About

Voronoi-roadmap planner and controller that won the GRAIC autonomous racing competition, CPS-IoT Week 2021

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages