diff --git a/src/scenic/simulators/metadrive/model.scenic b/src/scenic/simulators/metadrive/model.scenic index 1915c7dcd..877cb0754 100644 --- a/src/scenic/simulators/metadrive/model.scenic +++ b/src/scenic/simulators/metadrive/model.scenic @@ -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 @@ -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 \ No newline at end of file diff --git a/src/scenic/simulators/metadrive/simulator.py b/src/scenic/simulators/metadrive/simulator.py index a8ab1f831..6b13b5217 100644 --- a/src/scenic/simulators/metadrive/simulator.py +++ b/src/scenic/simulators/metadrive/simulator.py @@ -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 @@ -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)