File size: 2,654 Bytes
0ba5e0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np

def generate_task_info_name(walking_type, incline, walking_speed):
    """
    Generate a standardized 'task_info' name string based on the walking type, incline, and walking speed.

    The returned string follows the format:
        For level walking: "{walking_type}_{formatted_speed}"
        For incline/decline: "{walking_type}_{incline}_deg_{formatted_speed}"
    where:
      - walking_type is expected to be one of:
          'decline_walking', 'level_walking', or 'incline_walking'
      - incline is a numerical value indicating ground incline in degrees.
      - formatted_speed is a walking speed string, e.g., 's0x8' for 0.8 m/s, 's1' for 1.0 m/s, 's1x2' for 1.2 m/s.
    
    Args:
        walking_type (str): The type of walking. Expected values: 'decline_walking', 'level_walking', or 'incline_walking'.
        incline (float or int): Ground incline in degrees.
        walking_speed (float): Walking speed in m/s.
    
    Returns:
        str: The generated task_info name.
        
    Examples:
        >>> generate_task_info_name('decline_walking', -5, 0.8)
        'decline_walking_5_deg_s0x8'
        >>> generate_task_info_name('level_walking', 0, 1.0)
        'level_walking_s1'
        >>> generate_task_info_name('incline_walking', 5, 1.2)
        'incline_walking_5_deg_s1x2'
    """

    if 'stair' in walking_type:
        return walking_type

    if walking_type != 'level_walking' and (np.isnan(incline) or incline is None):
        print(f"Incline is NaN for task {walking_type} {incline} {walking_speed}")
        return None
    if np.isnan(walking_speed) or walking_speed is None:
        print(f"Walking speed is NaN for task {walking_type} {incline} {walking_speed}")
        return None
    
    def format_walking_speed(speed):
        # Map known speeds to specific string representations
        mapping = {0.8: "s0x8", 1.0: "s1", 1.2: "s1x2"}
        # Use the mapping if available, otherwise default to a generic string
        return mapping.get(speed, f"s{speed}")

    # Format walking speed
    speed_str = format_walking_speed(walking_speed)
    
    # For level walking, return simpler format without incline info
    if walking_type == 'level_walking':
        return f"{walking_type}_{speed_str}"
    
    # Format incline: if the value is an integer, do not show decimals.
    if incline == int(incline):
        incline_str = str(abs(int(incline)))
    else:
        incline_str = str(abs(incline))
    
    # Build and return the standardized task_info string for incline/decline walking
    task_info = f"{walking_type}_{incline_str}_deg_{speed_str}_m_s"
    return task_info