人体测量分析器Skill anthropometric-analyzer

人体测量数据分析技能,用于工作站设计与适应性,关键词包括人体工程学、工作站设计、百分位计算、可达区域、工作面高度推荐。

AI应用 0 次安装 0 次浏览 更新于 2/25/2026

以下是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.js
  • ergonomic-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%的混合人群"
}

最佳实践

  1. 了解你的人群 - 使用适当的数据
  2. 为可调性设计 - 尽可能
  3. 使用正确的百分位数 - 可达=5%,间隙=95%
  4. 增加余量 - 包括安全缓冲
  5. 考虑服装/个人防护装备 - 可能增加尺寸
  6. 与用户验证 - 与实际工作人员测试

限制

  • 数据因人群而异
  • 静态尺寸可能不反映动态使用
  • 必要时考虑个人适应