以下是anthropometric-analyzer技能的中文翻译内容:
name: anthropometric-analyzer description: 人体测量数据分析技能,用于工作站设计与适应性。 allowed-tools: Bash(*) 读写编辑 glob grep webfetch metadata: author: babysitter-sdk version: “1.0.0” category: ergonomics backlog-id: SK-IE-022
anthropometric-analyzer
你是 anthropometric-analyzer - 一个专门用于人体测量数据进行工作空间设计的专项技能。
概览
这项技能使得AI能够进行人体测量分析,包括:
- 为设计决策计算百分位数
- 确定可达区域
- 推荐工作面高度
- 计算间隙尺寸
- 指定可调范围
- 人群适应性分析
- 为5%至95%百分位人群设计
- 多人群考虑
能力
1. 人体测量数据参考
# 美国成人人体测量数据(英寸)
# 基于NHANES和军事调查
ANTHROPOMETRIC_DATA = {
"stature": {
"male": {"5th": 64.0, "50th": 69.1, "95th": 74.4},
"female": {"5th": 59.0, "50th": 63.8, "95th": 68.5}
},
"sitting_height": {
"male": {"5th": 33.5, "50th": 35.7, "95th": 38.0},
"female": {"5th": 31.1, "50th": 33.5, "95th": 35.6}
},
"eye_height_sitting": {
"male": {"5th": 28.7, "50th": 31.0, "95th": 33.3},
"female": {"5th": 26.6, "50th": 28.9, "95th": 31.2}
},
"shoulder_height_sitting": {
"male": {"5th": 21.3, "50th": 23.3, "95th": 25.5},
"female": {"5th": 19.5, "50th": 21.5, "95th": 23.6}
},
"elbow_height_sitting": {
"male": {"5th": 7.4, "50th": 9.2, "95th": 11.0},
"female": {"5th": 6.8, "50th": 8.5, "95th": 10.2}
},
"thigh_clearance": {
"male": {"5th": 5.2, "50th": 6.0, "95th": 7.0},
"female": {"5th": 4.8, "50th": 5.7, "95th": 6.8}
},
"knee_height_sitting": {
"male": {"5th": 19.3, "50th": 21.4, "95th": 23.4},
"female": {"5th": 17.8, "50th": 19.6, "95th": 21.4}
},
"popliteal_height": { # 膝盖后高度
"male": {"5th": 15.5, "50th": 17.3, "95th": 19.1},
"female": {"5th": 14.0, "50th": 15.7, "95th": 17.5}
},
"buttock_knee_length": {
"male": {"5th": 21.4, "50th": 23.4, "95th": 25.4},
"female": {"5th": 20.5, "50th": 22.4, "95th": 24.4}
},
"buttock_popliteal_length": {
"male": {"5th": 17.3, "50th": 19.2, "95th": 21.1},
"female": {"5th": 16.7, "50th": 18.5, "95th": 20.4}
},
"forward_reach": {
"male": {"5th": 29.5, "50th": 32.6, "95th": 35.7},
"female": {"5th": 26.3, "50th": 29.2, "95th": 32.1}
},
"shoulder_breadth": {
"male": {"5th": 16.7, "50th": 18.3, "95th": 19.9},
"female": {"5th": 14.5, "50th": 16.0, "95th": 17.6}
},
"hip_breadth_sitting": {
"male": {"5th": 12.6, "50th": 14.2, "95th": 16.1},
"female": {"5th": 13.0, "50th": 15.0, "95th": 17.4}
}
}
def get_anthropometric_value(dimension: str, percentile: str,
gender: str = "combined"):
"""
获取特定维度的人体测量值
"""
if gender == "combined":
male_val = ANTHROPOMETRIC_DATA[dimension]["male"][percentile]
female_val = ANTHROPOMETRIC_DATA[dimension]["female"][percentile]
return (male_val + female_val) / 2
else:
return ANTHROPOMETRIC_DATA[dimension][gender.lower()][percentile]
2. 为百分位人群设计
def design_for_percentile(dimension: str, design_type: str, gender: str = "combined"):
"""
根据设计类型推荐设计尺寸
design_type:
- "reach": 使用5%百分位(最短可达距离)
- "clearance": 使用95%百分位(最大尺寸)
- "adjustable": 提供5%至95%的范围
"""
if design_type == "reach":
value = get_anthropometric_value(dimension, "5th", gender)
explanation = "为最短可达距离设计5%百分位"
elif design_type == "clearance":
value = get_anthropometric_value(dimension, "95th", gender)
explanation = "为最大用户设计95%百分位"
elif design_type == "adjustable":
low = get_anthropometric_value(dimension, "5th", gender)
high = get_anthropometric_value(dimension, "95th", gender)
value = {"min": low, "max": high}
explanation = "提供从5%至95%百分位的可调性"
else:
value = get_anthropometric_value(dimension, "50th", gender)
explanation = "使用50%百分位(平均值)"
return {
"dimension": dimension,
"design_type": design_type,
"value": value,
"unit": "英寸",
"explanation": explanation
}
3. 可达区域确定
def calculate_reach_zones(forward_reach: float, shoulder_height: float):
"""
计算主要、次要和第三可达区域
"""
return {
"primary_zone": {
"description": "频繁伸手,最舒适",
"horizontal_radius": forward_reach * 0.4, # ~40%的最大可达距离
"height_range": {
"min": shoulder_height * 0.7,
"max": shoulder_height * 1.1
},
"angle": "0-15度从中心线"
},
"secondary_zone": {
"description": "偶尔伸手",
"horizontal_radius": forward_reach * 0.6, # ~60%的最大可达距离
"height_range": {
"min": shoulder_height * 0.5,
"max": shoulder_height * 1.2
},
"angle": "15-45度从中心线"
},
"tertiary_zone": {
"description": "不经常伸手",
"horizontal_radius": forward_reach * 0.9, # ~90%的最大可达距离
"height_range": {
"min": shoulder_height * 0.3,
"max": shoulder_height * 1.4
},
"angle": "45-90度从中心线"
}
}
def recommend_item_placement(item_frequency: str, worker_gender: str = "combined"):
"""
根据使用频率推荐放置位置
"""
forward_reach = get_anthropometric_value("forward_reach", "5th", worker_gender)
shoulder_height = get_anthropometric_value("shoulder_height_sitting", "50th", worker_gender)
zones = calculate_reach_zones(forward_reach, shoulder_height)
if item_frequency == "frequent":
zone = "primary_zone"
elif item_frequency == "occasional":
zone = "secondary_zone"
else:
zone = "tertiary_zone"
return {
"recommended_zone": zone,
"zone_details": zones[zone],
"design_note": f"放置在{zones[zone]['horizontal_radius']:.1f}英寸的水平可达范围内"
}
4. 工作面高度推荐
def recommend_work_surface_height(task_type: str, posture: str = "sitting",
worker_gender: str = "combined"):
"""
基于任务类型推荐工作面高度
task_type: "precision", "light_assembly", "heavy_work"
posture: "sitting" 或 "standing"
"""
if posture == "sitting":
elbow_height = get_anthropometric_value("elbow_height_sitting", "50th", worker_gender)
seat_height = get_anthropometric_value("popliteal_height", "50th", worker_gender)
base_height = seat_height + elbow_height
adjustments = {
"precision": {
"adjustment": +4, # 肘上以便近观
"range": (base_height + 2, base_height + 6),
"reason": "更高以便视觉任务需要近工作"
},
"light_assembly": {
"adjustment": 0, # 肘高
"range": (base_height - 2, base_height + 2),
"reason": "肘高以便手部工作"
},
"heavy_work": {
"adjustment": -4, # 肘下以便用力
"range": (base_height - 6, base_height - 2),
"reason": "肘下以便使用体重"
}
}
else: # 站立
# 站立肘高大约是身高 * 0.63
stature = get_anthropometric_value("stature", "50th", worker_gender)
elbow_height = stature * 0.63
adjustments = {
"precision": {
"adjustment": +4,
"range": (elbow_height + 2, elbow_height + 6),
"reason": "更高以便视觉精确任务"
},
"light_assembly": {
"adjustment": -2,
"range": (elbow_height - 4, elbow_height),
"reason": "稍微低于肘高以便站立工作"
},
"heavy_work": {
"adjustment": -8,
"range": (elbow_height - 10, elbow_height - 6),
"reason": "远低于肘高以便用力"
}
}
task_adjustment = adjustments.get(task_type, adjustments["light_assembly"])
recommended_height = (elbow_height if posture == "standing"
else seat_height + elbow_height) + task_adjustment["adjustment"]
return {
"task_type": task_type,
"posture": posture,
"recommended_height": round(recommended_height, 1),
"adjustable_range": task_adjustment["range"],
"reason": task_adjustment["reason"],
"unit": "英寸"
}
5. 间隙计算
def calculate_clearances(posture: str = "sitting", worker_gender: str = "combined"):
"""
计算最小间隙尺寸
"""
if posture == "sitting":
clearances = {
"vertical_clearance_under_surface": {
"minimum": get_anthropometric_value("thigh_clearance", "95th", worker_gender) +
get_anthropometric_value("popliteal_height", "95th", worker_gender) + 2,
"dimension": "从地板到工作面下方",
"percentile_used": "95th",
"reason": "适应最大的大腿+膝盖高度"
},
"knee_room_depth": {
"minimum": get_anthropometric_value("buttock_knee_length", "95th", worker_gender) + 2,
"dimension": "膝盖下方深度",
"percentile_used": "95th"
},
"seat_width": {
"minimum": get_anthropometric_value("hip_breadth_sitting", "95th", worker_gender) + 2,
"dimension": "座椅宽度",
"percentile_used": "95th"
},
"passage_width": {
"minimum": get_anthropometric_value("shoulder_breadth", "95th", "male") + 4,
"dimension": "通道/出口宽度",
"percentile_used": "95th male"
}
}
else: # 站立
clearances = {
"overhead_clearance": {
"minimum": get_anthropometric_value("stature", "95th", "male") + 4,
"dimension": "地板到顶部障碍物",
"percentile_used": "95th male"
},
"work_aisle_width": {
"minimum": 28, # OSHA最小
"dimension": "单人通道宽度",
"standard": "OSHA"
},
"two_way_aisle_width": {
"minimum": 44,
"dimension": "双向交通宽度",
"standard": "OSHA"
}
}
return clearances
6. 可调范围计算
def calculate_adjustability_range(dimension: str, accommodation_level: float = 0.90):
"""
计算所需可调范围以适应人群百分比
accommodation_level: 0.90为90%(5%-95%),0.95为95%(2.5%-97.5%)
"""
# 获取男性和女性数据
male_5th = ANTHROPOMETRIC_DATA[dimension]["male"]["5th"]
male_95th = ANTHROPOMETRIC_DATA[dimension]["male"]["95th"]
female_5th = ANTHROPOMETRIC_DATA[dimension]["female"]["5th"]
female_95th = ANTHROPOMETRIC_DATA[dimension]["female"]["95th"]
# 综合人群范围
population_min = min(female_5th, male_5th)
population_max = max(female_95th, male_95th)
# 标准差估计
male_sd = (male_95th - male_5th) / 3.29 # 5%至95%是3.29 SDs
female_sd = (female_95th - female_5th) / 3.29
return {
"dimension": dimension,
"accommodation_level": f"{accommodation_level * 100}%",
"required_range": {
"min": round(population_min, 1),
"max": round(population_max, 1)
},
"adjustment_span": round(population_max - population_min, 1),
"male_range": {"5th": male_5th, "95th": male_95th},
"female_range": {"5th": female_5th, "95th": female_95th},
"design_recommendation": f"提供从{population_min:.1f}至{population_max:.1f}英寸的调整范围"
}
流程集成
这项技能与以下流程集成:
workstation-design-optimization.jsergonomic-risk-assessment.js
输出格式
{
"design_type": "Seated Workstation",
"work_surface_height": {
"recommended": 28.5,
"adjustable_range": [26, 31],
"unit": "英寸"
},
"reach_zones": {
"primary_radius": 11.8,
"secondary_radius": 17.7
},
"clearances": {
"under_surface": 25.5,
"knee_depth": 27.4
},
"accommodation": "90%的混合人群"
}
最佳实践
- 了解你的人群 - 使用适当的数据
- 为可调性设计 - 尽可能
- 使用正确的百分位数 - 可达=5%,间隙=95%
- 增加余量 - 包括安全缓冲
- 考虑服装/个人防护装备 - 可能增加尺寸
- 与用户验证 - 与实际工作人员测试
限制
- 数据因人群而异
- 静态尺寸可能不反映动态使用
- 必要时考虑个人适应