
Лаб_14 Головков И.Е. 12002108
.docx
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БЕЛОГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ (НИУ «БелГУ») ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
КАФЕДРА ИНФОРМАЦИОННЫХ И РОБОТОТЕХНИЧЕСКИХ СИСТЕМ
Отчёт по лабораторной работе №14 Тема работы: «Простейший автомобиль в Blender Game Engine» по дисциплине «Системы виртуальной реальности и программирование симуляторов»
Студента очного отделения
3 курса 12002108 группы
Головкова Игоря Евгеньевича
Проверила:
Доц. Игрунова С.В.
Белгород 2024
Цель и задачи: разобрать принцип создания простого автомобиля. При этом автомобиль будет обладать некоторыми свойствами реальной машины, тормозами и амортизаторами. Кроме того, он будет иметь массу и, соответственно, инерцию.
Ход работы:
Рисунок 1 – Созданная сцена с объектами
Рисунок 2 – Запущенная сцена с объектом
Рисунок 3 – Запущенная сцена с движущимся автомобилем
Листинг 1:
import bge
scene = bge.logic.getCurrentScene()
objList = scene.objects
car = objList["Car"]
car_ID = car.getPhysicsId()
obj2_ID = 0
constraintType = 11
vehicle_Constraint = bge.constraints.createConstraint(car_ID, obj2_ID, constraintType)
constraint_ID = vehicle_Constraint.constraint_id
vehicle = bge.constraints.getVehicleConstraint(constraint_ID)
car["Vehicle"] = vehicle
tire_FD = objList["FD"]
tire_FP = objList["FP"]
tire_RD = objList["RD"]
tire_RP = objList["RP"]
tirePos_RP = [ -2.5, -2.2, 0.0]
tirePos_FP = [ -2.5, 2.2, 0.0]
tirePos_RD = [ 2.5, -2.2, 0.0]
tirePos_FD = [ 2.5, 2.2 , 0.0]
suspension_Angle = [ 0.0, 0.0, -1.0]
tireAxis = [ -1.0, 0.0, 0.0]
suspensionHeight_FD = 0.2
suspensionHeight_FP = 0.2
suspensionHeight_RD = 0.2
suspensionHeight_RP = 0.2
tireRadius_FD = 1
tireRadius_FP = 1
tireRadius_RD = 1
tireRadius_RP = 1
tireSteer_FD = True
tireSteer_FP = True
tireSteer_RD = False
tireSteer_RP = False
vehicle.addWheel( tire_FD, tirePos_FD, suspension_Angle, tireAxis, suspensionHeight_FD, tireRadius_FD, tireSteer_FD )
vehicle.addWheel( tire_FP, tirePos_FP, suspension_Angle, tireAxis, suspensionHeight_FP, tireRadius_FP, tireSteer_FP )
vehicle.addWheel( tire_RD, tirePos_RD, suspension_Angle, tireAxis, suspensionHeight_RD, tireRadius_RD, tireSteer_RD )
vehicle.addWheel( tire_RP, tirePos_RP, suspension_Angle, tireAxis, suspensionHeight_RP, tireRadius_RP, tireSteer_RP )
grip_0 = 30.0
grip_1 = 30.0
grip_2 = 30.0
grip_3 = 30.0
vehicle.setTyreFriction(grip_0, 0)
vehicle.setTyreFriction(grip_1, 1)
vehicle.setTyreFriction(grip_2, 2)
vehicle.setTyreFriction(grip_3, 3)
compression_0 = 6.0
compression_1 = 6.0
compression_2 = 6.0
compression_3 = 6.0
vehicle.setSuspensionCompression(compression_0, 0)
vehicle.setSuspensionCompression(compression_1, 1)
vehicle.setSuspensionCompression(compression_2, 2)
vehicle.setSuspensionCompression(compression_3, 3)
damp_0 = 5.0
damp_1 = 5.0
damp_2 = 5.0
damp_3 = 5.0
vehicle.setSuspensionDamping(damp_0, 0)
vehicle.setSuspensionDamping(damp_1, 1)
vehicle.setSuspensionDamping(damp_2, 2)
vehicle.setSuspensionDamping(damp_3, 3)
stiffness_0 = 12.5
stiffness_1 = 12.5
stiffness_2 = 12.5
stiffness_3 = 12.5
vehicle.setSuspensionStiffness(stiffness_0, 0)
vehicle.setSuspensionStiffness(stiffness_1, 1)
vehicle.setSuspensionStiffness(stiffness_2, 2)
vehicle.setSuspensionStiffness(stiffness_3, 3)
roll_0 = 0.15
roll_1 = 0.15
roll_2 = 0.15
roll_3 = 0.15
vehicle.setRollInfluence( roll_0, 0)
vehicle.setRollInfluence( roll_1, 1)
vehicle.setRollInfluence( roll_2, 2)
vehicle.setRollInfluence( roll_3, 3)
Листинг 2:
import bge
scene = bge.logic.getCurrentScene()
controller = bge.logic.getCurrentController()
brake = controller.sensors["Brake"]
emergency = controller.sensors["EBrake"]
gas = controller.sensors["Gas"]
reverse = controller.sensors["Reverse"]
steerLeft = controller.sensors["Left"]
steerRight = controller.sensors["Right"]
objList = scene.objects
car = objList["Car"]
vehicle = car["Vehicle"]
brakeAmount = 40.0
ebrakeAmount = 100.0
if emergency.positive == True:
front_Brake = 0.0
back_Brake = ebrakeAmount
brakes = True
elif brake.positive == True and reverse.positive == False:
front_Brake = brakeAmount
back_Brake = brakeAmount
brakes = True
else:
front_Brake = 0.0
back_Brake = 0.0
brakes = False
vehicle.applyBraking(front_Brake,0)
vehicle.applyBraking(front_Brake,1)
vehicle.applyBraking(back_Brake,2)
vehicle.applyBraking(back_Brake,3)
reversePower=100.0
gasPower = 400.0
if brakes == True:
power = 0.0
elif reverse.positive == True:
power = reversePower
elif gas.positive == True:
power = -gasPower
else:
power = 0.0
vehicle.applyEngineForce(power,0)
vehicle.applyEngineForce(power,1)
vehicle.applyEngineForce(power,2)
vehicle.applyEngineForce(power,3)
turn = 0.3
if steerLeft.positive == True:
turn = turn
elif steerRight.positive == True:
turn = -turn
else:
turn = 0.0
vehicle.setSteeringValue(turn,0)
vehicle.setSteeringValue(turn,1)
Вывод: в ходе лабораторной работы было реализовано движение автомобиля.