Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/scenic/simulators/metadrive/model.scenic
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Scenic world model for traffic scenarios in MetaDrive.

The model currently supports vehicles and pedestrians. It implements the
basic :obj:`~scenic.domains.driving.model.Car` and `Pedestrian` classes from the :obj:`scenic.domains.driving` domain.
basic :obj:`~scenic.domains.driving.model.Car` and `Pedestrian` classes from the :obj:`scenic.domains.driving` domain. 'Bicycle' is implemented as a subclass of 'Pedestrian'.
Vehicles and pedestrians support the basic actions and behaviors from the driving domain.

The model defines several global parameters, whose default values can be overridden
Expand Down Expand Up @@ -182,8 +182,18 @@ class Pedestrian(Pedestrian, MetaDriveActor, Walks):
def isPedestrian(self):
return True

@property
def isBicycle(self):
return False

def setWalkingDirection(self, heading):
self._walking_direction = scenicToMetaDriveHeading(heading)

def setWalkingSpeed(self, speed):
self._walking_speed = speed


class Bicycle(Pedestrian):
@property
def isBicycle(self):
return True
20 changes: 14 additions & 6 deletions src/scenic/simulators/metadrive/simulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

from metadrive.component.sensors.rgb_camera import RGBCamera
from metadrive.component.sensors.semantic_camera import SemanticCamera
from metadrive.component.traffic_participants.cyclist import Cyclist
from metadrive.component.traffic_participants.pedestrian import Pedestrian
from metadrive.component.vehicle.vehicle_type import DefaultVehicle

Expand Down Expand Up @@ -243,13 +244,20 @@ def createObjectInSimulator(self, obj):
self._attach_sensors(obj)
return

# For pedestrians
# For pedestrians and cyclists
if obj.isPedestrian:
metaDriveActor = self.client.engine.agent_manager.spawn_object(
Pedestrian,
position=converted_position,
heading_theta=converted_heading,
)
if obj.isBicycle:
metaDriveActor = self.client.engine.agent_manager.spawn_object(
Cyclist,
position=converted_position,
heading_theta=converted_heading,
)
else:
metaDriveActor = self.client.engine.agent_manager.spawn_object(
Pedestrian,
position=converted_position,
heading_theta=converted_heading,
)
obj.metaDriveActor = metaDriveActor

# Attach sensors (if any)
Expand Down
Loading