GPS operator
The GPS Operator take a map a current position and wished waypoints and compute the best route to go to the wished waypoint.
It does by using carla.GlobalRoutePlanner. This modules takes an
opendrive map as an input and can compute most efficient route between
two points.
- The caching of result such that we don't compute it every single time. The computation of route is really costly.
# Used cached waypoints but start at closest point.
if len(self.waypoints) != 0:
(index, _) = closest_vertex(
self.waypoints,
np.array([self.position[:2]]),
)
self.waypoints = self.waypoints[
index : index + NUM_WAYPOINTS_AHEAD
]
self.target_speeds = self.target_speeds[
index : index + NUM_WAYPOINTS_AHEAD
]
- The computation of the gps waypoints happens here:
# Compute the waypoints
waypoints = self.hd_map.compute_waypoints(
[
x,
y,
self._goal_location[2],
],
self._goal_location,
Sometimes the computation might put the position on the wrong side of the road. I have put a failsafe mecanism, but that might have other consequences. You can try to revisit this part. To increase the precision of the map, you can change the parameters in
_hd_map.py:self._grp = GlobalRoutePlanner( self._map, 1.0 ) # Distance between waypoints
Graph Description
- id: carla_gps_op
operator:
python: ../../carla/carla_gps_op.py
outputs:
- gps_waypoints
inputs:
opendrive: oasis_agent/opendrive
objective_waypoints: oasis_agent/objective_waypoints
position: oasis_agent/position
Graph Viz
flowchart TB oasis_agent subgraph fot_op fot_op/op[op] end subgraph carla_gps_op carla_gps_op/op[op] end oasis_agent -- objective_waypoints --> carla_gps_op/op oasis_agent -- opendrive --> carla_gps_op/op oasis_agent -- position --> carla_gps_op/op carla_gps_op/op -- gps_waypoints --> fot_op/op