Here’s how I set up a few collision objects on a BulletVehicle, setDeactivationEnabled(False) and all.
def make_vehicle_1(vehicle_label, start_pos, heading):
# make first collision shape
v_shape = BulletBoxShape(Vec3(1, 2.4, 0.5))
transform_shape_space = TransformState.makePos(Point3(0, -0.65, 0.6))
# attach universal vehicle node for automatic compound shape
vehicle_node = render.attachNewNode(BulletRigidBodyNode(str(vehicle_label)))
# second vehicle collision shape
v_shape_2 = BulletBoxShape(Vec3(0.9, 1, 0.5))
transform_shape_space_2 = TransformState.makePos(Point3(0, -0.4, 1))
vehicle_node.node().setCcdMotionThreshold(0.000000007)
vehicle_node.node().setCcdSweptSphereRadius(0.30)
vehicle_node.node().addShape(v_shape, transform_shape_space)
vehicle_node.node().addShape(v_shape_2, transform_shape_space_2)
vehicle_node.setPos(start_pos)
vehicle_node.setH(heading)
vehicle_node.node().setMass(1000.0) # mass in kilograms
vehicle_node.node().setFriction(10.0)
# vehicle_node.node().setLinearFactor(3)
world.attachRigidBody(vehicle_node.node())
vehicle_node.node().setDeactivationEnabled(False)
# instantiate vehicle
self.npc_vehicle_1 = BulletVehicle(world, vehicle_node.node())
self.npc_vehicle_1.setCoordinateSystem(ZUp)
print(self.npc_vehicle_1)
world.attachVehicle(self.npc_vehicle_1)
# pickup_truck_1 wheels begin
wheel_model = loader.loadModel('models/wheel_1.gltf')
wheel_model.reparentTo(render)
wheel_1 = self.npc_vehicle_1.createWheel()
wheel_1.setNode(wheel_model.node())
wheel_1.setChassisConnectionPointCs(Point3(0.75, 1.3, 0.2))
wheel_1.setFrontWheel(True)
wheel_1.setWheelDirectionCs(Vec3(0, 0, -1))
wheel_1.setWheelAxleCs(Vec3(1, 0, 0))
wheel_1.setWheelRadius(0.5)
wheel_1.setMaxSuspensionTravelCm(35.0)
wheel_1.setSuspensionStiffness(70.0)
wheel_1.setWheelsDampingRelaxation(2.0)
wheel_1.setWheelsDampingCompression(4.0)
wheel_1.setFrictionSlip(4)
wheel_1.setRollInfluence(0.01)
# wheel_2
wheel_model = loader.loadModel('models/wheel_1.gltf')
wheel_model.reparentTo(render)
wheel_2 = self.npc_vehicle_1.createWheel()
wheel_2.setNode(wheel_model.node())
wheel_2.setChassisConnectionPointCs(Point3(-0.75, 1.3, 0.2))
wheel_2.setFrontWheel(True)
wheel_2.setWheelDirectionCs(Vec3(0, 0, -1))
wheel_2.setWheelAxleCs(Vec3(1, 0, 0))
wheel_2.setWheelRadius(0.5)
wheel_2.setMaxSuspensionTravelCm(35.0)
wheel_2.setSuspensionStiffness(70.0)
wheel_2.setWheelsDampingRelaxation(2.0)
wheel_2.setWheelsDampingCompression(4.0)
wheel_2.setFrictionSlip(4)
wheel_2.setRollInfluence(0.01)
# steering, engine control, and braking handled in Task section
# wheel_3
wheel_model = loader.loadModel('models/wheel_1.gltf')
wheel_model.reparentTo(render)
wheel_3 = self.npc_vehicle_1.createWheel()
wheel_3.setNode(wheel_model.node())
wheel_3.setChassisConnectionPointCs(Point3(0.75, -2, 0.2))
wheel_3.setFrontWheel(False)
wheel_3.setWheelDirectionCs(Vec3(0, 0, -1))
wheel_3.setWheelAxleCs(Vec3(1, 0, 0))
wheel_3.setWheelRadius(0.5)
wheel_3.setMaxSuspensionTravelCm(35.0)
wheel_3.setSuspensionStiffness(70.0)
wheel_3.setWheelsDampingRelaxation(2.0)
wheel_3.setWheelsDampingCompression(4.0)
wheel_3.setFrictionSlip(4)
wheel_3.setRollInfluence(0.01)
# steering, engine control, and braking handled in Task section
# wheel_4
wheel_model = loader.loadModel('models/wheel_1.gltf')
wheel_model.reparentTo(render)
wheel_4 = self.npc_vehicle_1.createWheel()
wheel_4.setNode(wheel_model.node())
wheel_4.setChassisConnectionPointCs(Point3(-0.75, -2, 0.2))
wheel_4.setFrontWheel(False)
wheel_4.setWheelDirectionCs(Vec3(0, 0, -1))
wheel_4.setWheelAxleCs(Vec3(1, 0, 0))
wheel_4.setWheelRadius(0.5)
wheel_4.setMaxSuspensionTravelCm(35.0)
wheel_4.setSuspensionStiffness(70.0)
wheel_4.setWheelsDampingRelaxation(2.0)
wheel_4.setWheelsDampingCompression(4.0)
wheel_4.setFrictionSlip(4)
wheel_4.setRollInfluence(0.01)
# steering, engine control, and braking handled in Task section
# vehicle_node geometry
truck_1 = loader.loadModel('models/pickup_2.gltf')
truck_1.setH(180)
truck_1.setScale(0.6)
truck_1.reparentTo(vehicle_node)
truck_1_windows = truck_1.find("**/windows")
truck_1_windows.setTransparency(TransparencyAttrib.M_multisample)
make_vehicle_1('npc_vehicle_1', (-6, 16.9847, 0.663382), 180)