1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
| """ Euro NCAP CPD测试协议 """
from dataclasses import dataclass from typing import List, Tuple, Optional from enum import Enum
class ChildType(Enum): """儿童类型""" INFANT = "infant" TODDLER = "toddler" CHILD = "child" PET = "pet"
class SeatPosition(Enum): """座椅位置""" FRONT_PASSENGER = "front_passenger" REAR_LEFT = "rear_left" REAR_CENTER = "rear_center" REAR_RIGHT = "rear_right" TRUNK = "trunk"
class SeatType(Enum): """座椅类型""" REAR_FACING = "rear_facing" FORWARD_FACING = "forward_facing" BOOSTER = "booster" NONE = "none"
@dataclass class CPDTestScenario: """CPD测试场景""" scenario_id: str child_type: ChildType seat_position: SeatPosition seat_type: SeatType covered: bool = False in_footwell: bool = False detection_timeout: int = 90
class CPDTestProtocol: """ Euro NCAP CPD测试协议 包含所有官方测试场景 """ def __init__(self): self.scenarios = self._create_scenarios() def _create_scenarios(self) -> List[CPDTestScenario]: """创建测试场景""" return [ CPDTestScenario( scenario_id="CPD-01", child_type=ChildType.INFANT, seat_position=SeatPosition.REAR_LEFT, seat_type=SeatType.REAR_FACING, ), CPDTestScenario( scenario_id="CPD-02", child_type=ChildType.TODDLER, seat_position=SeatPosition.REAR_LEFT, seat_type=SeatType.FORWARD_FACING, ), CPDTestScenario( scenario_id="CPD-03", child_type=ChildType.CHILD, seat_position=SeatPosition.REAR_CENTER, seat_type=SeatType.BOOSTER, ), CPDTestScenario( scenario_id="CPD-04", child_type=ChildType.CHILD, seat_position=SeatPosition.REAR_LEFT, seat_type=SeatType.NONE, in_footwell=True, ), CPDTestScenario( scenario_id="CPD-05", child_type=ChildType.INFANT, seat_position=SeatPosition.REAR_LEFT, seat_type=SeatType.REAR_FACING, covered=True, ), CPDTestScenario( scenario_id="CPD-06", child_type=ChildType.CHILD, seat_position=SeatPosition.FRONT_PASSENGER, seat_type=SeatType.NONE, in_footwell=True, ), CPDTestScenario( scenario_id="CPD-07", child_type=ChildType.PET, seat_position=SeatPosition.REAR_LEFT, seat_type=SeatType.NONE, ), ] def get_scenario(self, scenario_id: str) -> Optional[CPDTestScenario]: """获取测试场景""" for s in self.scenarios: if s.scenario_id == scenario_id: return s return None def print_all_scenarios(self): """打印所有场景""" print("=== Euro NCAP CPD测试场景 ===\n") for s in self.scenarios: print(f"{s.scenario_id}:") print(f" 儿童: {s.child_type.value}") print(f" 位置: {s.seat_position.value}") print(f" 座椅: {s.seat_type.value}") if s.covered: print(f" ⚠️ 毯子覆盖") if s.in_footwell: print(f" ⚠️ 脚部空间") print()
if __name__ == "__main__": protocol = CPDTestProtocol() protocol.print_all_scenarios()
|