Vehicle Input and Attributes#
You can control your vehicle directly by modifying the vehicle prim’s attributes#
Accelerator and Steering#
The following code fully applies the accelerator and then, inside the update callback, oscillates the steering from -1 to 1 using the sin function.
import carb
import math
VEHICLE_PRIM_PATH = "/World/WizardVehicle1/Vehicle"
def start_sim(self):
usd_context = omni.usd.get_context()
my_stage = usd_context.get_stage()
self.vehicle_prim = my_stage.GetPrimAtPath(VEHICLE_PRIM_PATH)
update_event_stream = omni.kit.app.get_app().get_update_event_stream()
self._pop_event_stream_sub_id = update_event_stream.create_subscription_to_pop(self.tick_vehicle,name="tick_vehicle_pop")
self.time = 0
self.vehicle_prim.GetAttribute('physxVehicleController:accelerator').Set(1.0)
def tick_vehicle(self, e: carb.events.IEvent):
self.time += e.payload["dt"] * 3.0
new_steer = math.sin(self.time)
self.vehicle_prim.GetAttribute('physxVehicleController:steer').Set(new_steer)
Adding Brakes#
The following code, using the same start_sim
fully applies the accelerator, but then after 2.5 seconds releases the accelerator and applies the brakes.
def tick_vehicle(self, e: carb.events.IEvent):
self.time += e.payload["dt"]
if self.time > 2.5:
self.vehicle_prim.GetAttribute('physxVehicleController:accelerator').Set(0)
self.vehicle_prim.GetAttribute('physxVehicleController:brake0').Set(1)