A user-specific workout can be generated by adjusting transform parameters of a user-agnostic training profile to conform to a user boundary specifying a user's ability to perform work. The user-agnostic training profile can be defined in a training space, specifying a power curve in a time domain whereas the user boundary can be defined in a boundary space, specifying amounts of user-produced work in a time window size domain. A training boundary can be generated based on the user-agnostic training profile by determining the largest area under the user-agnostic training profile power curve for various time window sizes, where each largest area under the user-agnostic training profile power curve produces a data point for the training boundary for that window size domain value. The training boundary can be transformed based on the user boundary, causing corresponding transformations to the user-agnostics training profile, converting it to a user-specific workout.
|
36. A computer-readable storage medium storing instructions that, when executed by a computing system, cause the computing system to perform operations for automatically providing a user-specific workout, the operations comprising:
obtaining a user-agnostic training profile;
obtaining a user boundary defined in a boundary space;
computing a training boundary that is a conversion of the user-agnostic training profile into the boundary space; and
adjusting the training boundary, wherein the adjustments:
are based on a comparison between the training boundary and the user boundary; and
cause the user-agnostic training profile to be transformed into the user-specific workout.
24. A method for automatically providing a user-specific workout, the method comprising:
obtaining a user-agnostic training profile defined in a training space;
obtaining a user boundary defined in a boundary space;
computing a training boundary that is a conversion of the user-agnostic training profile into the boundary space; and
adjusting the training boundary, wherein the adjustments:
are based on a comparison between the training boundary and the user boundary; and
cause corresponding changes to the user-agnostic training profile, converting it into the user-specific workout;
wherein output or settings of a workout apparatus are automatically provided based on the user-specific workout.
1. A workout machine system for automatically providing a user-specific workout, the system comprising:
one or more processors and one or more memories storing instructions that, when executed by the one or more processors, perform operations comprising:
obtaining a user-agnostic training profile, defined in a training space, specifying a power curve in a time domain;
obtaining a user boundary, defined in a boundary space, specifying amounts of user-produced work in a time window domain;
computing a training boundary that is a conversion of the user-agnostic training profile into the boundary space; and
adjusting the training boundary:
wherein the adjustments to the training boundary cause one or more of: a shift of power values for the user-agnostic training profile, a power scale change in the magnitude of the power values for the user-agnostic training profile, a time scale change in a duration of the user-agnostic training profile, or any combination thereof;
wherein the adjustments are based on a comparison between the training boundary and the user boundary; and
wherein the adjustments cause the user-agnostic training profile to be transformed into the user-specific workout;
wherein output or settings of a workout apparatus are automatically provided based on the user-specific workout.
2. The workout machine system of
3. The workout machine system of
4. The workout machine system of
5. The workout machine system of
wherein the combination at multiple points in the domain is based on confidence weighting factors specified for each of the multiple points in the domain; and
wherein the confidence weighting factors, for each particular point of the multiple points in the domain, are based on a progressive measurement for a section of the domain ending at the particular point, wherein the progressive measurement measures a cumulative difference between X) the function fit to the set of measurements in the section of the domain and Y) the series of line segments in the section of the domain.
6. The workout machine system of
7. The workout machine system of
8. The workout machine system of
wherein the user-specific workout is a first user-specific workout and the user boundary is a first user boundary;
wherein the operations further comprise transmitting the user-agnostic training profile to a geographically remote system; and
wherein the user-agnostic training profile is transformed into a second user-specific workout, different from the first user-specific workout, by adjusting the user-agnostic training profile based on a second user boundary different from the first user boundary.
9. The workout machine system of
10. The workout machine system of
11. The workout machine system of
12. The workout machine system of
13. The workout machine system of
14. The workout machine system of
15. The workout machine system of
16. The workout machine system of
17. The workout machine system of
18. The workout machine system of
19. The workout machine system of
wherein, prior to the adjusting of the training boundary, the user-agnostic training profiled is configured based on user input.
20. The workout machine system of
wherein adjusting of the training boundary is based at least in part on a determined duration of a video or audio media item.
21. The workout machine system of
wherein adjusting of the training boundary is based at least in part on a determined tempo or pace of a video or audio media item.
22. The workout machine system of
identifying a work value for each particular window size, of multiple window size durations, of measurements indicative of power output, by:
identifying a largest integration, of a function specified by the measurements indicative of power output, for an interval matching the particular window size.
23. The workout machine system of
identifying, from the power curve in the time domain, work values for particular window sizes by identifying a largest integration of the power curve for an interval matching each particular window size.
25. The method of
a shift of power values for the user-agnostic training profile;
a power scale change in the magnitude of the power values for the user-agnostic training profile;
a time scale change in the duration of the user-agnostic training profile; or
any combination thereof.
26. The method of
27. The method of
wherein the user boundary is a combination of A) a function fit to a set of measurements of user work for particular time windows and B) a series of line segments that connect the measurements of user work for particular time windows;
wherein the combination, at multiple points in the domain of the boundary space, is based on confidence weighting factors specified for each of the multiple points in the domain; and
wherein the confidence weighting factors, for each particular point of the multiple points in the domain, are based on a progressive measurement for a section of the domain ending at the particular point, wherein the progressive measurement measures a cumulative difference between X) the function fit to the set of measurements in the section of the domain and Y) the series of line segments in the section of the domain.
28. The method of
29. The method of
wherein the user-specific workout is a first user-specific workout and the user boundary is a first user boundary;
wherein the user-agnostic training profile is received at a geographically remote system; and
wherein the user-agnostic training profile is transformed, for the geographically remote system, into a second user-specific workout, different from the first user-specific workout, by adjusting the user-agnostic training profile based on a second user boundary different from the first user boundary.
30. The method of
wherein the comparison between the training boundary and the user boundary minimizes user perceived effort by adjusting the training boundary to maximize a total area between the training boundary and the user boundary; or
wherein the comparison between the training boundary and the user boundary maximizes workout potential by adjusting the training boundary to minimize a total area between the training boundary and the user boundary.
31. The method of
32. The method of
33. The method of
34. The method of
35. The method of
wherein the user boundary is based on a series of work values obtained by identifying a work value for each particular window size, of multiple window size durations, of measurements indicative of power output, by:
identifying a largest integration, of a function specified by the measurements indicative of power output, for an interval matching the particular window size; and
wherein the conversion of the user-agnostic training profile into the boundary space is performed by identifying, from the user-agnostic training profile, work values for particular window sizes by identifying a largest integration for an interval matching each particular window size.
37. The computer-readable storage medium of
a shift of power values for the user-agnostic training profile;
a power scale change in the magnitude of the power values for the user-agnostic training profile;
a time scale change in the duration of the user-agnostic training profile; or
any combination thereof.
38. The computer-readable storage medium of
wherein the operations further comprise providing output or settings of a workout apparatus based on the user-specific workout; and
wherein the user-agnostic training profile is specific to the workout apparatus.
39. The computer-readable storage medium of
40. The computer-readable storage medium of
wherein the comparison between the training boundary and the user boundary minimizes user perceived effort by adjusting the training boundary to maximize a total area between the training boundary and the user boundary; or
wherein the comparison between the training boundary and the user boundary maximizes workout potential by adjusting the training boundary to minimize a total area between the training boundary and the user boundary.
41. The computer-readable storage medium of
wherein the user boundary is based on a series of work values obtained by identifying a work value for each particular window size, of multiple window size durations, of measurements indicative of power output, by:
identifying a largest integration, of a function specified by the measurements indicative of power output, for an interval matching the particular window size; and
wherein the conversion of the user-agnostic training profile into the boundary space is performed by identifying, from the user-agnostic training profile, work values for particular window sizes by identifying a largest integration for an interval matching each particular window size.
|
This application is related to U.S. Provisional Patent Application No. 62/609,298, titled “CRITICAL POWER ADAPTIVE TRAINING WITH VARYING PARAMETERS” and U.S. patent application Ser. No. 16/192,733, titled “CRITICAL POWER ADAPTIVE TRAINING WITH VARYING PARAMETERS”, which are each herein incorporated by reference in their entirety.
Millions of people desire to train and get in better shape. For many, this is difficult due to lack of time or the effort involved. Many systems have been developed to help people begin training or maximize their training efforts. For example, people read fitness magazines, follow workout programs, attend classes, hire personal trainers, etc. While some of these programs are tailored to individuals, they often fail to maximize a person's potential or cause frustration due to overwork. One cause of this is that many of these programs are not based on measures of a person's potential to perform exercise. Even for programs that uses some previous method to tailor programs to an individual, these methods has been difficult to implement and results have been inaccurate. Furthermore, user-specific workouts developed based on these measurements have failed provide correct levels of intensity and duration.
For example, VO2 is a measurement system that determines a maximum amount of oxygen a person can use. VO2 is measured by dividing an amount of oxygen inhaled per minute by an amount of oxygen exhaled per minute. Thus, VO2 based assessments require a user to be attached to an apparatus that can measure air intake and output and an amount of oxygen in the air. Furthermore, VO2 measurements are generally static for an individual and there is no clear way to translate a VO2 measurement into a duration or intensity level for training. Some techniques have been developed to provide workout guidelines based on heart rate measurements. However, these still require a specialized heart rate monitor attached to a person, are inaccurate, and do not correctly estimated limits on time or intensity training metrics.
The present technology provides an adaptive training system and related methods that overcome drawbacks of the prior art and provide other benefits. In at least one embodiment, the adaptive training system can generate a user-specific workout by applying a transform to a user-agnostic training profile to conform to a user boundary specifying a user's ability to perform work. A “user-agnostic training profile” can be defined in a training space, specifying a power curve in a time domain. Thus, a user-agnostic training profile can define parameters for a training session mapping the training session to levels of power output for time segments. For example, the user-agnostic training profile can specify workout apparatus settings (e.g., resistance levels, tilt, weight amounts, etc.), user movement speeds (e.g., revolutions per minute, miles per hour, etc.), etc., which produce particular power outputs.
A user boundary can be defined in a boundary space, specifying amounts of user-produced work in a time window size domain. To conform the user-agnostic training profile to the user boundary, the user-agnostic training profile can be converted into a training boundary in the boundary space. This conversion can include determining the largest area under the user-agnostic training profile power curve for various time window sizes, where each largest area under the user-agnostic training profile power curve produces a data point for the training boundary for that window size domain value.
In some implementations, the user boundary can be determined by the adaptive training system by determining a person's critical power, e.g., the person's indefinite ability to produce power in combination with some finite capacity to work above their critical power (“finite work capacity”) over a given amount of time. A practical application of a user's critical power and finite work capacity is using them to generate a user-specific workout. A user-specific workout can be a single training session or series of training sessions with specified parameters based on a critical power and/or finite work capacity determination for a user. User-specific workouts based on critical power are accurate, require no special heart rate or oxygen measurement devices, and are adaptable to a user's changing ability level. Furthermore, the transformations of critical power to a user-specific workout can be provided for various types of exercises and timeframes.
The adaptive training system of one or more embodiments includes two aspects of applying the critical power analysis: (1) determining a specific user's finite work capacity and critical power without requiring heart rate information or use of an invasive measurement apparatus, and (2) using those determinations to generate user-specific workouts for any given set of workout parameters. In determining a user's finite work capacity and critical power, the adaptive training system can receive statistics from one or more of the user's current or prior workouts or segments of a workout, and determine the user's finite work capacity and critical power based only on time intervals and measurements indicative of power output. As used herein “power measurements” or “power output” and the like can refer to actual measurements of power (e.g., watts of stationary bike output) or surrogates that are highly correlated to power, such as running speed, repetitions performed over a time, etc. Furthermore, as a user logs additional workouts, these finite work capacity and critical power determinations can be updated, and new or modified user-specific workouts can be generated for the user. In some implementations, more recent workouts can have a greater weight in determining these measurements as compared to older workout statistics. For example, a scalar decay function can be applied to workout data to weight it based on age.
The adaptive training system can determine a finite work capacity and critical power for a particular user by generating data points from one or more workout statistic sets. Each data point can be a measure of the user's maximum work performed in a workout for any time window of a particular length. For a particular workout, multiple data points can be taken using different time window lengths. Each data point can be a work value computed by taking the maximum integration, for a given time window size, of a function that provides power based on time. Thus, a work data point will be the largest area under the power function for any interval matching the time window size of that data point. Where multiple workouts are used, a final workout statistic set can keep only the largest work value for each time window size from the multiple workouts. The adaptive training system can fit points from one or more workout statistic sets to an ability function (which in some cases can also be a “user boundary”). In some implementations, the ability function can be used to determine a critical power, which corresponds to the slope of the ability function, and the finite work capacity, which corresponds to the y-intercept of the ability function. Alternatively, the adaptive training system can use a function fit to the demonstrated work as the ability function (e.g., using them as boundary points for future user-specific workouts). Additional details regarding determining a user's ability function and/or finite work capacity and critical power are discussed below in relation to
In various implementations, the ability function can be provided by the user's work capacity. In some implementations, the ability function can be a linear or non-linear function fit to a workout statistic set, as discussed above. The slope of the ability function can define the user's critical power and the y-intercept can define the user's finite work capacity. In some implementations, once a critical power (CP) and finite work capacity (W′) have been determined, the ability function can be modified to account for real-world circumstances, such as the fact that given zero time a user's ability to perform work is also zero. This modification can include turning the ability function into a combined linear and logarithmic function. For example, the ability function can be specified as W=CP*t+W′*log(t+1), where W is a work ability (dependent variable) and t is a given amount of time (independent variable). In some implementations, the ability function can be the workout statistic set used as a user boundary for corresponding points of user-specific workouts.
In some implementations, the user boundary can be a combination of an “estimate function” and a “measurement function.” The estimate function can be a function fit to a set of measured work values, such as the critical power and finite work capacity or another ability function. The measurement function can be represented as a series of line segments that connect the measured work values and a line segment with a slope of zero, continuing from the final measured value. The combination can be made by averaging the estimate and measured functions. In some implementations, the averaging can include weighting the functions according to a confidence function, which is specified by the difference between the estimate and measurement functions. Additional details regarding creating a combined user boundary are discussed below in relation to
Once the adaptive training system has determined a user boundary (e.g., an ability function and/or critical power with a finite work capacity), the adaptive training system can use it to generate a user-specific workout.
In some implementations, for any particular workout type, a number of parameters can describe the workout in terms of work and time. For example, in an interval workout with regular intervals, the workout can be defined in terms of five parameters: number of intervals, interval duration, power output during intervals, rest duration, power output during rests. All but one of these parameters can be specified either by a user or based on characteristics of the workout. For example, for a workout on a treadmill, a user can specify interval duration and rest duration, and a power output during the intervals and power output during rests can be determined based on the treadmill settings, such as speed and angle. The adaptive training system can then compute the final parameter, based on the user's critical power and finite work capacity, such that a user-specific workout plan can be generated that directs the user's exercise to approach but not pass an exhaustion threshold. For example, the number of intervals can be set such that a function, describing the workout, based on the five parameters mapped in terms of work/time, does not exceed a user's ability function. Additional details regarding using an ability function and/or critical power and finite work capacity to generate a specific user-specific workout for a workout type defined by parameters are discussed below in relation to
In other implementations, the adaptive training system can generate a user-specific workout by adjusting parameters of a user-agnostic training profile to conform to a user boundary specifying a user's ability to perform work. The user boundary can be the critical power and finite work capacity or another ability function, defined in a boundary space with a time window size domain and a work range. The adaptive training system can generate a training boundary, in the boundary space, based on the user-agnostic training profile. This training boundary can be a function in the boundary space that specifies, for a given time window size in the boundary domain, a range value given by the largest integration of any segment of the user-agnostic training profile with a size matching the time window size. The training boundary can be linked to the user-agnostic training profile such that a change to one causes a corresponding change to the other. The adaptive training system can then compare the training boundary to the user boundary, adjusting the training boundary, e.g., to minimize or maximize an area between them or to minimize a loss function that balances between perceived user effort and workout potential. The change to the training boundary can cause a corresponding change to the user-agnostic training profile. The changed user-agnostic training profile can be a user-specific workout. Additional details regarding generating a user-specific workout by applying a transform to a user-agnostic training profile are discussed below in relation to
In various implementations, the adaptive training system can be implemented, at least in part, as an integrated component of a workout machine, in a network of workout machines that share information, as an “app,” in a fitness tracker, as part of a server-based information system (e.g., accessed through a webpage), or any combination thereof. For example, the adaptive training system can be integrated into a workout machine instrumented to take work measurements indicative of power output (e.g., resistance and revolutions per minute, time and distance, etc.). The adaptive training system can use these measurements to determine work vs. time data points. These data points can be used to compute critical power and finite work capacity of the user (e.g., by fitting them to an ability function). The adaptive training system can then provide a user-specific workout configured to bring the user within a threshold amount of, but not surpass, an exhaustion point determined based on the critical power and finite work capacity or ability function. The user-specific workout can be provided as visual output with suggested workout parameters. Alternatively or in addition, the user-specific workout power setting can be provided as automatic adjustments to workout apparatus settings (e.g., treadmill speed, incline, spinning resistance, etc.). An example of this configuration is described below in relation to
As another example, the adaptive training system can be implemented in a network of workout machines. In this example, the adaptive training system can identify the user based on authentication data provided to a workout machine or through a mobile device, such as through a website or app, by scanning a QR code on the machine, etc. Then, during a subsequent workout, data points from measurements on that machine can be added to data points from measurements previously taken on other machines to maintain updated critical power and finite work capacity or ability function gauges. These can be used to generate a user-specific workout. The user-specific workout can include workout suggestions or power settings, which can be provided on the networked machine or on the mobile device. Alternatively or in addition, the user-specific workout can include workout machine power settings, which the adaptive training system can automatically apply on the machine. An example of this configuration is described below in relation to
As yet a further example, the adaptive training system can be implemented on a mobile device or other computing system, e.g., as an app, through a webpage, or as a function of a smartwatch or other fitness device. In some implementations, the adaptive training system can automatically gather data (e.g., distance, amount of time, speed, elevation change, etc.) or a user can manually enter it (e.g., by entering distance and time following a run). The adaptive training system can then provide a user-specific workout. In some implementations, the user-specific workout can include showing further statistics, such as changes in critical power or finite work capacity over time. In some implementations, the user-specific workout can provide a suggested workout plan. The suggested workout plan can set aspects of the user-specific workout to meet user goals. In some implementations, the user-specific workout can include user specific modifications to a user-agnostic training profile, e.g., as guided workouts or other training suggestions or instructions. An example of this configuration is described below in relation to
The current technology provides a number of benefits over the prior art. For example, the adaptive training system can determine a ability function without the need for a heart rate monitor, oxygen equipment, or other invasive equipment attached to a user. In addition, user-specific workouts based on an ability function provide a basis for workout levels while not being subject to the inaccuracies from which heart rate monitoring methods suffer. Further, the adaptive training system can be implemented using low power, low processing speed equipment and only needs to store the “best record” data, effectively reducing the amount of required storage capacity, as compared to prior art systems that require large amounts of interrelated data to make a training suggestion.
In various implementations, the adaptive training technology can be implemented as a method, system, or computer-readable storage medium. A workout machine system for automatically providing a user-specific workout can include a workout apparatus that implements a training session of a particular type, with given parameters. The workout machine system can also include an instrument system, integrated with the workout apparatus, that obtains measurements indicative of power output. The workout machine system can also comprise a processing component configured to generate a user-specific workout.
Where the adaptive training technology is implemented as a method it can be performed as operations by a computing system or can be embodied in operations resulting from executing of instructions stored in a computer-readable storage medium. These operations can comprise: identifying a work value for each particular window size, of multiple window size durations of the measurements indicative of power output. This can be accomplished by identifying a largest integration, of a function specified by the measurements indicative of power output, for an interval matching the particular window size. The operations can also include fitting, as an ability function, a function to the work values identified for the multiple window size durations. The ability function can be defined in a boundary space, specifying amounts of user-produced work for a total time window domain. The operations can further comprise obtaining a user-agnostic training profile, defined in a training space, specifying a power curve for a training program in a time domain. Further, the operations can include creating a training boundary by creating a version of the user-agnostic training profile converted to the boundary space. In some cases, the user-agnostic training profile is linked to the training boundary such that a change to one provides a corresponding change to the other. The training boundary can then be compared to the user boundary. Based on this comparison, the operations can make various modifications to the training boundary, e.g., to transform the training boundary to maximize or minimize a total area between the training boundary and the user boundary or to minimizing a loss function that balances between perceived user effort and workout potential, where the loss function specifies a number that relates to how well the training boundary and user boundaries match one another. These transforms can cause corresponding changes to the user-agnostic training profile, changing it into a user-specific workout. Finally, the operations can provide output or automatic workout settings based on the user-specific workout.
In various implementations, the adaptive training technology can obtain the measurements indicative of power output through manual entry by a user, through recorded workout statistics taken by a wearable fitness tracker, or through an instrument system integrated into a workout apparatus.
In various implementations, the adaptive training technology can be implemented by a server system connected to multiple workout machines, by one or more workout machines, or by a mobile device associated with a user of a workout apparatus.
In various implementations, the adaptive training technology can be implemented in relation to multiple workout machines connected via a network. The measurements indicative of power output can be taken from a first of the networked workout machines while a second set of measurements indicative of power output can be taken from a second of the networked workout machines. This second set of measurements indicative of power output can be transformed into additional work values for corresponding window sizes and can be weighted based on an age of the second set of measurements. When the adaptive training technology performs the fitting of the function to the work values identified for the multiple window size durations, it can further accomplish this by fitting the function to the additional work values. In some implementations, this fitting can include selecting, for each particular window size, the largest value, of the work values and to the additional work values, corresponding to that particular window size; and fitting the function to the selected largest values for the window sizes.
In some implementations, the adaptive training technology can generate the user-specific workout in response to an identification comprising a code indicative of a user or of a workout apparatus. The identification can be supplied: by the user, by a mobile device associated with the user, or by the workout apparatus. In some implementations, the code indicative of the workout apparatus can be supplied to the mobile device through an image capture system on the mobile device that captures an alphanumeric code, a bar code, or QR code displayed in conjunction with the workout apparatus.
The output or automatic workout settings that the adaptive training technology provides can be output to a server system or mobile device comprising an indication of the user-specific workout. In some implementations, the output can be to a mobile device comprising data to be operated on by the execution of instructions on the mobile device. This execution can provide a display for a user to implement the user-specific workout. In some implementations, the output can be to a workout apparatus configured to cause a display of the workout apparatus to provide instructions based on the user-specific workout. The output can also include automatic workout settings that cause a workout apparatus to automatically implement the user-specific workout. In some implementations, the output can be provided to a server system or a mobile device and the output is stored in association with a user profile. The user profile can include various information such as: the identified work values, the ability function, statistics of the user-specific workout, measures of actual performance during the training session, biographic specifics, or any combination thereof.
In some implementations, the adaptive training technology can provide an internet-based interface that is accessible through a web browser or mobile device application. The internet-based interface can provide access to a user profile associated with multiple workouts performed by a user.
In various implementations, the measurements indicative of power output can comprise one or more of: speed, revolutions-per-minute, resistance, incline, distance, duration, weight, repetitions, or any combination thereof.
In various implementations, the ability function is a linear or non-linear function.
In some implementations, the adaptive training technology can be implemented by a server system that obtains additional work values, stored in association with a user profile for the user, and generates the user-specific workout, both of which may be in response to an authentication of the user.
In some implementations, generating the user-specific workout can comprise selecting data to display as instructions to a user to perform a workout based on at least one previously unspecified parameter. The user-specific workout can also specify the output or automatic workout settings.
In some implementations, while the user is performing the user-specific workout, the adaptive training technology can also receive further measurements indicative of power output as the user-specific workout is performed. The adaptive training technology can identify further work values based on the further measurements indicative of power output. The adaptive training technology can then update the ability function to further fit the further work values; update user-specific workout based on a comparison of the user boundary (from the user-agnostic training profile) to the updated ability function; generate an updated user-specific workout based on the new comparison; and update the output or automatic workout settings based on the updated user-specific workout.
In some implementations, the user boundary is a function fit to a set of measurements of user work for particular time windows. In some cases, the user boundary is a measured user boundary, where the user boundary is a series of line segments that connect measurements of user work for particular time windows. In yet other cases, the user boundary is a combination between estimated and measured user boundaries based on confidence factor, where the user boundary is a combination of A) a function fit to a set of measurements of user work for particular time windows and B) a series of line segments that connect the measurements of user work for particular time windows. The combination at multiple points in the domain can be based on confidence weighting factors specified for each of the multiple points in the domain; and the confidence weighting factors, for each particular point of the multiple points in the domain, can be based on a progressive measurement for a section of the domain ending at the particular point, where the progressive measurement measures a cumulative difference between X) the function fit to the set of measurements in the section of the domain and Y) the series of line segments in the section of the domain.
In some implementations, a training profile can be shared between users. This can include a generated user-specific workout being a first user-specific workout for a corresponding first user boundary; and the user-agnostic training profile is transmitted to a geographically remote system; and the user-agnostic training profile is transformed into a second user-specific workout, different from the first user-specific workout, by adjusting the user-agnostic training profile based on a second user boundary different from the first user boundary.
In various implementations, adjustments to the training boundary includes maximizing an area between the user boundary and the training boundary to minimize user perceived effort or adjustments to the training boundary includes minimizing an area between the user boundary and the training boundary to maximize workout potential. In other cases the comparison between the training boundary and the user boundary causes an adjustment to the training boundary that minimizes a loss function that balances between perceived user effort and workout potential. In some implementations, adjusting of the training boundary is based at least in part on a determined duration of a video or audio media item. In yet further cases, adjusting of the training boundary is based at least in part on a determined tempo or pace of a video or audio media item.
In various implementations, output or settings of a workout apparatus can be automatically provided based on the user-specific workout. This can include one or more of: providing the output, to a server system, including an indication of the user-specific workout; providing the output, to a mobile device, including an indication of the user-specific workout; providing the output to a mobile device, including data for the user-specific workout to be operated on by execution of instructions on the mobile device, wherein the execution of instructions by the mobile device provide a display for a user to implement the user-specific workout; providing the output to the workout apparatus, the output configured to cause a display of the workout apparatus to provide instructions for the user-specific workout; providing the settings to the workout apparatus, wherein the workout apparatus automatically implements the user-specific workout; or any combination thereof.
In some implementations, a user-agnostic training profile can be based on one or more user drawn lines, provided to a user interface, that are automatically converted into the user-agnostic training profile. In some cases, the user-agnostic training profile can be obtained from a library of predefined user-agnostic training profiles.
The techniques introduced here may be better understood by referring to the following Detailed Description in conjunction with the accompanying drawings, in which like reference numerals indicate identical or functionally similar elements.
Turning now to the figures,
CPU 110 can be a single processing unit or multiple processing units in a device or distributed across multiple devices. CPU 110 can be coupled to other hardware devices, for example, with the use of a bus, such as a PCI bus or SCSI bus. The CPU 110 can communicate with a hardware controller for devices, such as for controlling settings of a workout machine or providing output to a display 130. Display 130 can be used to display text or graphics. In various implementations, display 130 provides a user-specific workout as features of a suggested workout on a workout machine display, on a phone display, on a fitness device display, or through a computer monitor display. In some implementations, display 130 includes the input device as part of the display, such as when the input device is a touchscreen or is equipped with an eye direction monitoring system. In some implementations, the display is separate from the input device. Examples of display devices are: an LCD display screen, an LED display screen, a projected, holographic, or augmented reality display (such as a heads-up display device or a head-mounted device), and so on. Other input/output (“I/O”) devices 140 can also be coupled to the processor, such as a network card, video card, audio card, USB, firewire or other external device, camera, printer, speakers, CD-ROM drive, DVD drive, disk drive, or Blu-Ray device. In some implementations, other I/O can include a haptic feedback system, such as vibrations through a mobile device or fitness device that can provide indications of a user-specific workout. In some implementations, other I/O can include a connection, either directly or across a network, that provides for automatic controls and settings to be provided to workout machines based on a determined user-specific workout.
In some implementations, the device 100 also includes a communication device capable of communicating wirelessly or wire-based with a network node. The communication device can communicate with another device or a server through a network using, for example, TCP/IP protocols. Device 100 can utilize the communication device to distribute operations across multiple network devices.
The CPU 110 can have access to a memory 150 in a device or distributed across multiple devices. A memory includes one or more of various hardware devices for volatile and non-volatile storage, and can include both read-only and writable memory. For example, a memory can comprise random access memory (RAM), CPU registers, read-only memory (ROM), and writable non-volatile memory, such as flash memory, hard drives, floppy disks, CDs, DVDs, magnetic storage devices, tape drives, device buffers, and so forth. A memory is not a propagating signal divorced from underlying hardware; a memory is thus non-transitory. Memory 150 can include program memory 160 that stores programs and software, such as an operating system 162, adaptive training system 164, and other application programs 166. Memory 150 can also include data memory 170 that can include power measurements, windowing data points, critical power and finite work capacity determinations or other ability functions, adaptive workout programs based on ability functions, user-agnostic training profiles, training boundaries, configuration data, settings, user options or preferences, etc., which can be provided to the program memory 160 or any element of the device 100.
Some implementations can be operational with numerous other computing system environments or configurations. Examples of computing systems, environments, or configurations that may be suitable for use with the technology include, but are not limited to, workout machines, personal computers, server computers, handheld or laptop devices, cellular telephones, wearable electronics, gaming consoles, tablet devices, multiprocessor systems, microprocessor-based systems, set-top boxes, programmable consumer electronics, network PCs, minicomputers, mainframe computers, distributed computing environments that include any of the above systems or devices, or the like.
In some implementations, server 210 can be an edge server which receives client requests and coordinates fulfillment of those requests through other servers, such as servers 220A-C. Server computing devices 210 and 220 can comprise computing systems, such as device 100. Though each server computing device 210 and 220 is displayed logically as a single server, server computing devices can each be a distributed computing environment encompassing multiple computing devices located at the same or at geographically disparate physical locations. In some implementations, each server 220 corresponds to a group of servers.
Computing enabled devices 205 and server computing devices 210 and 220 can each act as a server or client to other server/client devices. Server 210 can connect to a database 215. Servers 220A-C can each connect to a corresponding database 225A-C. As discussed above, each server 220 can correspond to a group of servers, and each of these servers can share a database or can have their own database. Databases 215 and 225 can warehouse (e.g., store) information such as previous workout data, user profile data, workout statistics, historical critical power and finite work capacity determinations, user-agnostic training profiles, etc. Though databases 215 and 225 are displayed logically as single units, databases 215 and 225 can each be a distributed computing environment encompassing multiple computing devices, can be located within their corresponding server, or can be located at the same or at geographically disparate physical locations.
Network 230 can be a local area network (LAN) or a wide area network (WAN), but can also be other wired or wireless networks. Network 230 may be the Internet or some other public or private network. Computing enabled devices 205 can be connected to network 230 through a network interface, such as by wired or wireless communication. While the connections between server 210 and servers 220 are shown as separate connections, these connections can be any kind of local, wide area, wired, or wireless network, including network 230 or a separate public or private network.
General software 320 can include various applications including an operating system 322, local programs 324, and a basic input output system (BIOS) 326. Specialized components 340 can be subcomponents of a general software application 320, such as local programs 324. Specialized components 340 can include critical power (CP) and finite work capacity (FWC) analyzer 344, training boundary generator 346, user boundary and training boundary comparator 348, user-specific workout generator 350, and components which can be used for providing user interfaces, transferring data, and controlling the specialized components, such as interface 342. In some implementations, components 300 can be in a computing system that is distributed across multiple computing devices or can be an interface to a server-based application executing one or more of specialized components 340.
In some implementations, critical power and finite work capacity analyzer 344 can receive power output statistics for a user, e.g., through interface 342, and can use them to determine the user's critical power and finite work capacity. For example, where components 300 are part of a workout machine, I/O 310 can include an instrument system, integrated with the workout machine, that takes measurements indicative of power output. I/O 310 can then use interface 342 to provide the measurements indicative of power output as power output statistics to critical power and finite work capacity analyzer 344. As another example, where components 300 are part of a mobile device, I/O 310 can include a user interface that takes user entered measurements indicative of power output (e.g., run time and distance). I/O 310 can then use interface 342 to provide these as power output statistics to critical power and finite work capacity analyzer 344. In some implementations, critical power and finite work capacity analyzer 344 can determine a critical power and finite work capacity by determining maximum work data points. Each maximum work data point can correspond to a largest area under a graph of the power output statistics for any window of a given size. Each data point can represent an amount of work the user is able to perform in a given timeframe. The critical power and finite work capacity analyzer 344 can then fit a function, in the work range for the time domain, to the highest data points for each window size across workouts. In some implementations, critical power and finite work capacity analyzer 344 can provide this fitted function in place of an explicit critical power or finite work capacity values. In some implementations where the fitted function is linear, the critical power can be the slope of the fitted function and the finite work capacity can be the y-intercept. In some implementations, once a critical power (CP) and finite work capacity (W′) have been determined, the ability function can be converted into a combined linear and logarithmic function. For example, the ability function can be specified as W=CP*t+W′*log(t+1), where W is a work ability (dependent variable) and t is a given amount of time (independent variable). Additional details on determining critical power and finite work capacity from power output statistics are discussed below in relation to
Training boundary generator 346 can take a user-agnostic training profile (defined in a training space with time in the domain and power in the range) and convert it into a training boundary (defined in a boundary space with time window size in the domain and work in the range). Training boundary generator 346 can receive a user-agnostic training profile via interface 342, e.g., from a user specifying power levels for time segments or from a library of previously defined user-agnostic training profiles. Training boundary generator 346 can convert the received user-agnostic training profile into a training boundary by determining a greatest amount of work (area under the user-agnostic training profiles) that exists for a given time window size. Each time window size can become a domain value for the training boundary and the greatest work value for that time window size can become the corresponding range value. In some implementations, the original user-agnostic training profile and the generated training boundary are linked such that a change to one causes a corresponding change to the other. For example, a transform (e.g., a linear transform) can be applied to the training space (time vs power) of the user-agnostic training profile and a corresponding transform can be applied in the boundary space (time window size vs work) without having to recalculate the training boundary. Additional details on converting a user-agnostic training profile into a training boundary are discussed below in relation to blocks 904 and 908 of
User boundary and training boundary comparator 348 can compare the training boundary generated by training boundary generator 346 with a user boundary (e.g., the ability function determined by critical power and finite work capacity analyzer 344). This comparison can include determining a modification to the training boundary, e.g., to maximize or minimize an area between the training boundary and the user boundary or to minimize a loss function that balances between perceived user effort and workout potential. Additional details on comparing a training boundary with a user boundary are discussed below in relation to block 910 of
User-specific workout generator 350 can generate a user-specific workout based on a comparison between a user boundary and a training boundary. The user-specific workout can be the user-agnostic workout that was used by training boundary generator 346 to generate a training boundary, but with changes made based on the changes for the training boundary determined by the user boundary and training boundary comparator 348. In various implementations, adjusting the training boundary can cause a corresponding change to the user-agnostic training profile. For example, certain linear transforms to time and power vectors of the user-agnostic training profile can have known, corresponding transformations in the boundary space. In some cases, a change to the training boundary can affect one or more of: a shift of the power values for the user-agnostic training profile, a power scale change in the magnitude of the power values for the user-agnostic training profile, and/or a time scale change in the duration of the user-agnostic training profile. Additional details on generating a user-specific workout based on a comparison between a user boundary and a training boundary are discussed below in relation to blocks 912 and 914 of
Those skilled in the art will appreciate that the components illustrated in
At block 404, process 400 can obtain time-based power output statistics for a workout or set of workouts. In various implementations, the power output statistics can be automatically gathered from instrumentation on a workout apparatus (e.g., treadmill, elliptical, bike, fitness tracker, etc.), can be entered through a user interface (e.g., entering a run duration and distance), or can be a log of one or more previously recorded workouts. In some implementations, power data can be based on combinations of measures such as speed or distance and time, where a default force for a workout type can be used to estimate work per time, i.e. power. In some implementations, the force can also be, at least in part, measured, e.g., based on a resistance or incline setting. In some implementations, user biographic specifics such as height, weight, gender, and age, are provided in a user profile. These user biographics can be used to more accurately convert workout measurements, such as distance run in an amount of time, into a power measurement. However, process 400 can use some default values to determine power measurements based on a user's workout performance, and thus generate a user's critical power and finite work capacity without the user's biographics. This allows users to use these versions of the system without requiring an extensive profile creation process, and thus users have a low barrier to entry for the system. In some implementations, instead of using power output from a user, process 400 can obtain a user-agnostic training profile with a power curve or power measurements. These can be power values for a given training session or training regimen. Additional details on user-agnostic training profiles are described below in relation to
In the outer loop between blocks 406-418, process 400 can iteratively divide the power output statistics into segments of the time domain, or “windows,” where the window size increases by an incremental amount in each iteration of this outer loop. For all of the windows with a particular size, the window with a largest determined integrated power (work) value in a particular iteration can result in a data point. The work value for a particular window can be computed by taking the area under the power curve defined by the power output statistics in that time window. The largest of these work measures for any window of a particular size is an estimation of the maximum amount of work that user can perform in the amount of time defined by the window size. The resulting set of data points can be used to determine an ability function, which can in turn be used to determine a critical power and finite work capacity for that user.
At block 406, process 400 can set a window size and a window increment. A window size can be an interval of time from which an individual data point can be extracted from the obtained power output statistics. For example, if the obtained power output statistics provide power output values at increments of a 30 minute workout, a window size can be the size of various “windows” of the 30 minute dataset. One window will produce a stored data point from each set of windows that all have the same size. The window increment can be a value by which the start and end of a previous window are incremented to obtain a next window. In some implementations, windows can be overlapping, meaning the window increment is set to a value less that the window size. In some implementations, the windows can be non-overlapping, meaning the window size and window increment are set to the same value. In each iteration of the loop between blocks 406-418, process 400 can generate a single data point corresponding to the window size used in that iteration. In each subsequent iteration, a new window size is selected at block 406. In some implementations, these window sizes can start at a particular size (e.g., 1 second, 5 seconds, etc.) and be increased by a set amount or percentage in each subsequent iteration of the loop. For example, the first window size could be 1 second and window sizes are increased by 10% in each subsequent iteration, so the first five window sizes would be 1 second, 1.1 seconds, 1.21 seconds, 1.33 seconds, and 1.46 seconds. As another example, the first window size could be 5 seconds and window sizes are increased by 1 second in each subsequent iteration, so the first five window sizes would be 5 seconds, 6 seconds, 7 seconds, 8 seconds, and 9 seconds.
At block 408, process 400 can set an initial window for the current window size by starting the window at the start of the obtained time-based power output statistics (e.g., at time_zero) and ending the window at the start of the obtained time-based power output statistics plus the window size (e.g., time_zero+window_size). In the inner loop between blocks 410-414, process 400 can slide the window for the current window size over the time-based power output statistics to determine (at block 416) at which point the area under the curve (integral of power, i.e., work), defining the power output statistics, within the window size, is largest. While process 400 describes this in terms of incrementing a window's start/end points, other procedures can be used to determine which area under the curve specifying a work value, for the window size interval, is largest. At block 410, process 400 can record an integrated power (work) value from the current window, i.e. the integration or area under the curve for the power/time graph of the obtained power-based statistics. An example of this process is provided below in relation to
At block 412, process 400 can determine if the end of the current window is at least at the end of the obtained time-based power output statistics. If so, each window of the current window size into the time-based power output statistics has been analyzed, the inner loop between blocks 410-414 is complete, and process 400 continues to block 416. If not, at least one window into the time-based power output statistics has not yet been analyzed, the inner loop between blocks 410-414 is not complete, and process 400 continues to block 414. At block 414, process 400 can increment the start and end of the current window by the window increment. This creates a new current window for a value to be recorded from, at block 410.
At block 416, process 400 can review all the values recorded at block 410 for the current window size and store the largest value corresponding to the current window size. This value indicates a measure of the most amount of work the user can perform in a given amount of time. In some implementations, the value stored corresponding to the current window size can be the largest of the recorded values, an average of a top amount (e.g., top 5 or top 10%) of the recorded values, or the top value that is within a certain standard deviations of the median of the recorded values. In some implementations, once a value is stored at block 416, the memory storing the values recorded at block 410 can be freed.
At block 418, process 400 can determine if there are additional window sizes to use in a further iteration of the loop between blocks 406-418. For example, process 400 can use a specified number of window sizes, can increment the window sizes a certain amount until a threshold is reached or until the window size is at least a specified percentage of the total time covered by the time-based power output statistics, or can have a specified set of window sizes to use. If there are additional window sizes to use, process 400 continues back to block 406, where the next window size is set. Otherwise, process 400 continues to block 420.
At block 420, process 400 can fit a function to the values stored at block 416. This function can have the window size (e.g., seconds) on the x-axis and work (e.g., joules) on the y-axis. In various implementations, the function can be of a specified degree, e.g., a first degree function (linear), a second degree function (quadratic), third degree (cubic), etc. In some implementations, in addition to the data points stored at block 416 for the obtained time-based power output statistics, the function can be fit to additional stored data points, e.g., from other workout statistics that were windowed in a process similar to the one described for blocks 404-418. In some implementations, process 400 can fit a function to data points that are not from a windowing process. For example, where power output statistics are not known for multiple points across a workout, work vs. time measures from single workout instances can be used as data points and the function is fit to this set of data points.
In some implementations, various procedures can be applied to adjust for the age of the stored power output values or anomalies among the stored power output values. In some implementations, this adjustment can include smoothing the curve of the function, e.g., applying a Gaussian kernel. In some implementations, this adjustment can include limiting the number of data points that are looked at for a given window size. For example, only data points for a window size that are no more than six weeks old are used or only the most recent six data points are used. In some implementations, the value of each data point can be weighted (decayed) based on its age. Various decay functions can be used to accomplish the weighting, such as exponential decay. For example, the value of each data point can be multiplied by 0.99{circumflex over ( )}(age_in_weeks). As another example, each data point can be multiplied by e{circumflex over ( )}(V*age), where V can be a value less than 1, such as 0.0004, and the age can be in various increments, such as days since the workout that generated the data point.
In some implementations, where there are multiple data points for a single window size (e.g., from different workouts), the function can be fit to only the largest work data point for each window size (or the largest after any applied weighting). In some implementations, once a function is fit to the stored data points, the memory storing data points that were not used as part of the fit, e.g., because there was a larger work value for the same window size, can be freed.
The function fit to the data points representing a user's maximum power output ability in a timeframe can specify a critical power (CP) for the user. This fitted function can also specify a finite work capacity (W′) for the user. The critical power can be the slope of the function or, where the function is non-linear, a slope of the function between two points of the function. Thus, the critical power can represent an amount of additional work the user can perform given any specified amount of additional time. The finite work capacity can be the y-intercept (a work output, e.g., joules, value) of the function. Thus, the finite work capacity represents an amount of initial work the user can perform given no extra time.
In some implementations, the determined critical power and finite work capacity can be used to generate a new ability function that more accurately defines the user's abilities, particularly in early intervals of a workout, such as in the first 60 seconds. For example, a function can be more accurate where it accounts for real-world circumstances such as the fact that given zero time a user's ability to perform work is also zero. In some implementations, this new ability function can be a combined linear and logarithmic function. For example, the ability function can be specified as W=CP*t+W′*log(t+1), where W is a work ability (dependent variable) and t is a given amount of time (independent variable). Using this new ability function provides more stable and robust fit optimization as it accounts for the time dependent curvature seen in the data.
Process 400 can return these determined critical power or finite work capacity values and end at block 422. In some implementations, instead of determining and returning critical power and finite work capacity values, the function fit to the data points can be returned.
Once the data points identified in
Example 580 includes a set of data points, such as data point 586. Each data point is the largest work value data point, from a set of possible work value data points each corresponding to a particular window size, from a workout. In example 580, a set of possible data points (not shown) were taken at block 410 with a window size of 1150 seconds, and one representing the largest amount of work done (i.e. area under the power output curve) in an 1150 second window of the workout was stored at block 416, as data point 586. An example of this process is provided in
In example 580, line 590 was a best-fit to the largest of the data points for each window size from the various workouts. In some implementations, process 400, at block 420, can determine where a performance boundary is for a user as a location, after an initial threshold, where further data points no longer increase in value with a slope that is relatively consistent. This demonstrated performance boundary is shown in example 580 by dashed line segments 592. The fit of line 590 is fit to the largest of the data points for each window size before the split at the beginning of the performance boundary. The slope of line 590 is used as the critical power. Example 580 also shows where, at 594, line 590 crosses the y-axis 582, which is used as the finite work capacity.
A user-specific workout can include one or more workouts and each workout can be defined by a set of parameters mapping the workout into work values given time. For example, when defining a sprint exercise for a user, the parameters can be simply duration and power output during the sprint. As another example, for an interval workout with regular intervals, the parameters can be: number of intervals, interval duration, power output during intervals, rest duration, and power output during rests. As a further example, for an interval workout with “skip intervals,” the parameters can be: number of intervals, duration of peak work during interval, duration of short rest time within an interval, power output during interval peak, rest duration between intervals, and power output during rests. In some implementations, workouts can also include a difficulty factor parameter, which specifies how close to the user's maximum work capacity the workout should bring the user.
At block 604, process 600 can receive a partial set of parameters for a workout. In some implementations, the parameters received at block 604 can be all but one of the parameters needed to specify the workout. For example, for the interval workout with regular intervals, all but the parameter defining the number of intervals can be provided. In some implementations, one or more of the workout parameters can be set by various methods, such as by user input, using default values, using values established to further certain goals (e.g., increase critical power ability; increase finite work capacity ability; increase sprint ability by having shorter more intense workouts; or endurance with longer, less intense workouts), etc. In some implementations, the workout parameters can be restricted to certain values, e.g., maximum or minimum time or number or duration of intervals, etc. These restrictions can be in place so that the remaining parameter determined by the system is realistic (i.e. it doesn't suggest a workout of two days or of twelve seconds) or so that a workout based on the parameters is easier to follow (e.g., interval length is a round number).
At block 606, process 600 can use the received workout parameters and a user ability indicator comprising one or more of: critical power and finite work capacity values for a user, a “fit function” defined by a function fit to a set of workout statistics in work vs. time, or the set of workout statistics in work vs. time as a defined border. In some implementations, the user's user ability indicators can be computed each time they are needed, e.g., by executing process 400. In some implementations, instead of recomputing the user's ability indicators from all available workout data, stored previous versions of the user's ability indicators can be updated to account for new workout data that has been obtained since that stored ability indicators were generated. For example, the stored user's ability indicators can be weighted based on the age of the underlying data and can be updated with each workout set. In various implementations, this updating can be performed to generate new user ability indicators when new workout data is received, when a determination of a user's ability indicators are needed, at a given interval (e.g., daily, weekly, etc.), or based on available resources (e.g., at night when server availably is typically high, according to a current measure of server resource availably, etc.).
Process 600 can then use the workout parameters and user ability indictor to compute the missing parameter defining the workout to be specific for the user. For each type of workout, a transform can be determined to map a function defining the workout (based on the workout parameters) in terms of work vs. time. The function defining the workout can be specified such that it does not exceed an “ability line” for the user, defined by the received user ability indicator. In various implementations, the ability line can be the ability function, the defined border, or a line determined by setting the user's critical power as the slope and the user's finite work capacity as the y-intercept. The point where the workout function intercepts the ability line is the exhaustion point, i.e. the point where the user is expected to no longer be able to perform any work at the same intensity level. Examples of such parameterization and comparison are provided below in relation to
At block 608, process 600 can provide a user-specific workout based on the now complete set of workout parameters. For example, process 600 can indicate a workout duration, can cause a setting to be established on a workout machine, can integrate the workout into a set of multiple workouts, etc. In some implementations, process 600 can continually monitor power output during the user's workout, update the user's ability function for the observed power output, and update the workout parameters accordingly. Process 600 can then provide further updates to the user, such as suggesting they slow down if they are expected to hit their exhaustion point before the workout is scheduled to end or that they should speed up if they are not expected to reach a goal.
In example 700, a user's critical power and finite work capacity are known, e.g., through an execution of process 400. The user's ability line 706 is generated by setting the critical power as the slope 720 and the finite work capacity as the y-intercept 718.
In example 700, the workout is an interval workout with regular intervals. The duration of the rest period 710 and high intensity period 712 are set by a user through a user interface and the slope of the line segments 714 during the high intensity segments are set to a first default value based on an expect running rate during these high intensity portions the slope of the line segments 716 during the rest segments are set to a second default value based on another expect running rate during the rest portions.
The adaptive training system determines the intersection between the user's ability line and the function representing the workout, i.e. exhaustion point 708. The time value 704 for the exhaustion point is the time determined for this workout such that the user reaches her exhaustion point. Additional details on how the adaptive training system can perform these operations are provided in the appendix.
The user-specific workout can be used, at 806, to automatically control functionality of the workout machine, such as by setting speed, duration, or incline settings. In addition or alternatively, the resulting user-specific workout can be used, at 806, to provide an output on a display of the workout machine or associated device (e.g., a user's paired mobile device). The output can display statistics about the workout, instructions for performing the user-specific workout, etc. While example 800 can end when the workout session ends, in some implementations, data from the workout session can be stored at 808. For example, this data can include determined maximum work points, an ability function, workout duration, speed, calories burned, etc. This data can be sent to the user's mobile device or to a server. The system can store this output in association with a user profile.
In
At step 846, the same user authenticates himself or herself with another workout machine 826. For example, the user can enter a code, scan a barcode on the workout machine using her mobile device (e.g., mobile device 828), or the workout machine can take a reading, such as scanning a code presented by the user, recognizing the presence of the user's mobile device or a FOB, etc. At 848, workout machine 826 and server system 824 can communicate to determine a user-specific workout for the authenticated user. In some implementations, the user-specific workout can be the one determined at 844, which can be further based on user profile information, such as preferred workout parameters that may include duration, number of intervals, etc. In some implementations, the communication at 848 can include some parameters for the user's next workout, which the server system 824 can use to generate the user-specific workout such that the user approaches, but does not surpass, an exhaustion point.
As the user performs the user-specific workout, which can be implemented automatically by the workout machine 826 or can be accomplished through instructions provided to the user on how to interact with the workout machine, (not shown), additional measurements indicative of power output can be taken at step 850. In some implementations, the workout machine 826 can autonomously update the user-specific workout or workout parameters based on the power measurements, similar to the functions performed by workout machine 810 in example 800. In some implementations, the power measurements can be provided, at 852, to server system 824. The server system, at 854, can update the user's determined ability function. Also at 854, the server system can adjust the user-specific workout based on the updated user's ability function. The server system, at 856, can provide the updated user-specific workout or workout parameters to the workout machine 826. At 858, workout machine 826 can implement the updated workout parameters, e.g., by providing an updated display on workout machine 826 or on the user's mobile device 828, or by automatically implementing settings on workout machine 828. Also at 858, either as the workout progresses or when the workout ends, workout machine 826 can provide workout data, similarly to step 808 of example 800.
In
The received workout statistics, transformations of these statistics, or resulting user-specific workouts can be stored by mobile device 864. While example 860 can end here, e.g., where user data is all stored at the mobile device and user-specific workout suggestions are provide through the mobile device, in some implementations, this data can be sent, at 876, to other devices 866-870, e.g., for further analysis (e.g., at server system 866), for automatic control of workout equipment 870, or to be viewed by the user, e.g., through a web interface at a computing device 868. In various implementations, these interactions can be interrelated or facilitated through communications with other devices, e.g., through communications 874.
In various implementations, aspects of the configurations from any of examples 800, 820, and 860 can be combined. For example, input 872 in example 860 can be based on outputs 808 or 858 from examples 800 and 820; server 824 in example 820 in example 820 could be replaced with mobile device 864 from example 860; output 842 in example 820 can be based on output 808 in example 800 or can be output 876 from example 860. Additional configurations, combinations, substitutions and additions are also contemplated. While examples 800, 820, and 860 illustrate several types of devices, in some implementations, the function performed by any one of these devices can be accomplished by the others or by devices not explicitly recited.
At block 904, process 900 can obtain a user-agnostic training profile, defined in a training space, specifying a power curve in a time domain. The user-agnostic training profile can define parameters for a training session mapping the training session to levels of power output for time segments. For example, the user-agnostic training profile can specify workout apparatus settings (e.g., resistance levels, tilt, weight amounts, etc.), user movement speeds (e.g., revolutions per minute, miles per hour, etc.), etc., which produce particular power outputs. Applying user-agnostic training profiles allows defining workouts generally across users, e.g. to obtain specific results or user experiences, that can then be customized to particular user abilities. In various cases, the user-agnostic training profile can be specific to a particular workout apparatus. In some implementations, the user-agnostic training profile can be interpreted from one or more user-generated lines or based on user specified power values. For example, a user can interact with a user interface to draw or otherwise generate lines showing levels of power output per time unit, enter power values as numbers, or otherwise indicating power levels. The adaptive training system can interpret these power levels into a power curve for a user-agnostic training profile. In some cases, process 900 can obtain the user-agnostic training profile from a library of user-agnostic training profiles. For example, user-agnostic training profiles can be defined for particular goals (e.g., weight loss, cardio improvement, improvements for particular activities, etc.) for particular workouts (e.g., biking, running, elliptical, rowing, weight lifting, etc.), and/or users can define workouts that they find useful and share them with the library. As used herein, the library can be any networked resource, such as a central library provided by a company, an open source community available to multiple users, a subscription service available to a member, a social media group, posting, or other online forum, or a direct share, e.g., in a message from a friend, coach, workout partner, etc.
At block 906, process 900 can obtain a user boundary, defined in a boundary space. The user boundary can be defined in a boundary space that defines estimations of an amount of work done given a total time window domain. For example, one point along the user boundary can specify that, given a time window of 20 seconds, the user can produce 10 kilojoules of work. In some implementations, the user boundary can be the ability function or critical power function discussed above, which are functions fit to measurements of user work for particular time windows (referred to herein as “estimate functions”). In other implementations, the user boundary can be a set of line segments that connect the measurements of user work for particular time windows (referred to herein as “measurement functions”). In yet other implementations, the user boundary can be a combination of an estimate function and a measurement function, where the combination is based on a confidence value for the estimate function, which is used as a weighting factor when averaging the estimate function and the measurement function. Additional details on determining a combined user boundary based on an estimate function and a measurement function are provided below in relation to
At block 908, process 900 can compute a training boundary. The training boundary can be a version of the user-agnostic training profile, converted to be in the boundary space. In some implementations, this conversion can be accomplished using the same process described above with reference to
At block 910, process 900 can compute a comparison between the training boundary computed at block 908 and the user boundary obtained at block 906. This comparison is possible as both the user boundary and the training boundary are in the same boundary space. The comparison at block 910 can result in applying a transformation or otherwise adjusting one or more parameters affecting the training boundary. In some implementations, the comparison between the training boundary and the user boundary includes making adjustments to minimize user perceived effort by selecting the one or more parameters to maximize a total area between the training boundary and the user boundary. In other implementations, the comparison between the training boundary and the user boundary includes making adjustments to maximize workout potential by minimizing a total area between the training boundary and the user boundary.
In yet other implementations the comparison between the training boundary and the user boundary includes making a selection of the one or more parameters to minimize a loss function that balances between user perceived effort and workout potential. The loss function can give a number that specifies how well the training boundary and user boundary match one another. In various implementations, different loss functions can be used. For example loss functions can be L1 loss (sum of absolute errors), L2 loss (sum of squared errors), minimum second point deviation, intersection over union (the intersection area of the training boundary and user boundary, divided by the union of the two areas), or sprint/endurance loss (weighting the error based on the time to create optimized workouts for a particular goal such as sprint or endurance performance). An example of the sprint loss is sum(a/(x+a)*error{circumflex over ( )}2) and an example of endurance loss is sum(x/(x+a)*error{circumflex over ( )}2); where “a” is a shape factor that controls the aggressiveness of the workout.
At block 912, process 900 can transform the user-agnostic training profile into a user-specific workout based on the comparison from block 910. Transformations between the user space and the boundary space can be accomplished using formulas whereby applying a transform to either the user-agnostic training profile or the training boundary can have corresponding transform to the other. For example, the following formulas can effect these transformations between the user space and boundary space:
where * specifies an element-wise multiplication; + specifies an element-wise addition; · specifies dot product; each [t, p] pair is a point from the user-agnostic training profile to transform, where t is a time and p is a measure of user instantaneous effort (e.g., power); each [t, w] pair is a point from the training boundary to transform, where t is the time window size and w is the maximal integral of effort over that time window t; and m and b are transform parameters with m_time being the time scalar, m_effort being the effort scalar, and b_effort being the effort shift or offset.
In some implementations, process 900 can accomplish the transformation automatically by virtue of the data structure defining the user-agnostic training profile and data structure defining the training boundary being linked (as discussed above) such that, as an adjustment is made to one (as described in relation to block 910 e.g., to cause a change to the training boundary), a corresponding adjustment is made to the other (e.g., to also cause a corresponding change to the user-agnostic training profile) using the above formulas. In other cases the data structures may not be linked. For example, a transformation can be made to the training boundary to select adjustments for maximizing workout potential and, once those adjustments are determined, corresponding adjustments can be made to the user-agnostic training profile by applying a corresponding transformation using the formulas above, thereby converting the user-agnostic training profile into a user-specific workout. In various implementations, adjusting the training boundary can cause a corresponding change affecting one or more of: a shift of the power values for the user-agnostic training profile, a power scale change in the magnitude of the power values for the user-agnostic training profile, and/or a time scale change in the duration of the user-agnostic training profile.
In some implementations, transforming the user-agnostic training profile into a user-specific workout includes applying a transform to or otherwise adjusting, based on the comparison, the training boundary. Other factors can also be used to adjust the training boundary. For example, an adjustment can be based on a user input (e.g., a user can specify a workout intensity value, a duration, a workout apparatus type, a workout goal, etc.) As another example, the adjustment can be to set the user-specific workout to have a duration that matches another program, such as a determined duration of a video or audio media item. As a yet further example, the one or more adjustments can be to set the user-specific workout to have a variable intensity (e.g., power peaks and valleys) to match the tempo or pace of another program, such as a determined tempo or pace of a video or audio media item.
At block 914, process 900 can provide output or settings based on the user-specific workout generated at block 912. For example, process 900 can indicate a workout duration, can cause a setting to be established on a workout machine, can integrate the user-specific workout into a set of multiple workouts, etc. In some implementations, the output can be to a workout apparatus configured to cause a display of the workout apparatus to provide instructions based on the user-specific workout. The output can also include automatic workout settings that cause a workout apparatus to automatically implement the user-specific workout. For example, process 900 can automatically control functionality of the workout machine, such as by setting speed, duration, or incline settings. In addition or alternatively, process 900 can use the user-specific workout to provide an output on a display of the workout machine or associated device (e.g., a user's paired mobile device). The output can display statistics about the workout, instructions for performing the user-specific workout, etc. In some implementations, the output can be provided to a server system or a mobile device and stored in association with a user profile.
In some implementations, process 900 can continually monitor power output during the user's workout and update the user-specific workout accordingly. For example, process 900 can determine how closely the user activity during the workout has matched the proscribed user-specific workout to achieve a particular goal, and can adjust workout machine settings or make suggestions to conform the remainder of the workout to the goal. Process 900 can provide updates for the workout, such as suggesting the user slow down or lower resistance if they are expected to hit their exhaustion point before the workout is scheduled to end or that they should speed up or increase resistance if they are not expected to reach the goal. In some cases, the user boundary can also be updated based on the observed power output from the current workout, which can cause corresponding re-adjustments making the training boundary conform to the new user boundary, further causing a corresponding change to the linked training profile (now a user-specific workout).
In some cases, process 900 can also include transmitting the user-agnostic training profile to a geographically remote system, allowing the user-agnostic training profile to be the basis of other user-specific workouts. For example, the user-agnostic training profile can be created, as discussed above at block 904, based on a user specifying power levels for time segments. The user may then want to share that user-agnostic training profile with other users (e.g., after discovering that she particularly enjoyed a user-specific workout based on the user-agnostic training profile). The user-agnostic training profile can be accessed by another user with their own user boundary, allowing that user-agnostic training profile to be transformed, based on that user boundary, into a second user-specific workout for the second user, different from the first user-specific workout for the user that created the user-agnostic training profile. As another example, the user may save the user-agnostic training profile (or user-specific workout) to her own repository, allowing the user to access it later and/or on a different workout apparatus. Process 900 can progress to block 916, where it ends.
At block 1004, process 1000 can obtain an estimate function that is fit to a set of measurements of user work for particular time windows. The set of measurements of user work for particular time windows can be conversions of user power output measurements, as discussed above in relation to
At block 1006, process 1000 can obtain a measurement function from a series of line segments that connect the measurements of user work for particular time windows. The measurements of user work for particular time windows can be the same measurements used to create the estimate function of block 1004. The measurement function can be a series of line segments that connect the measurements. A final line segment can connect to the last measurement (corresponding to the integration of the measured power curve for the largest window size) and have a slope of zero.
At block 1008, process 1000 can compute a confidence function. The confidence function can give, for any particular point in the domain, a cumulative difference between the estimate function and the measurement function, for a section of the domain ending at that particular point. In various implementations, the confidence function can use a section of the domain for each particular point starting at zero, at a set point offset from zero, or at a constant distance below the particular point. For example, the confidence function can determine, for a given point, a difference between A) an integration of the estimate function for an interval corresponding to the section of the domain and B) an integration of the measurement function for the interval corresponding to the section of the domain.
At block 1010, process 1000 can combine the estimate function and the measurement function, based on the confidence function. In some implementations, this combination can include averaging the estimate function and the measurement function, using the confidence function as a weighting factor. For example, the greater the difference between the estimate function and the measurement function, the more weight can be given to the measurement function. Process 1000 can then end (e.g., returning to block 906, providing the combined result of block 1010 as a user boundary).
In example 1200, the combination of the estimate function 1202 and the measurement function 1204 are based on the confidence function 1206. Confidence function 1206 can be based on a difference between the estimate function 1202 and the measurement function 1204. In various implementations, the confidence function 1206 can provide, for any given point, a percentage difference or an absolute difference between the estimate function 1202 and the measurement function 1204. The confidence function 1206 in example 1200 can be defined as a percentage, shown by confidence rate range 1212.
The user boundary 1210 can be computed as the average of the estimate function 1202 and the measurement function 1204, using the confidence function 1206 as a weighting factor. In example 1200, the user boundary 1210 (“U”) is defined, for a given window size “w”, based on the estimate function 1202 (“E( )”), the measurement function 1204 (“M( )”) and the confidence function 1206 (“CO”) as follows: U=E(w)*C(w)+M(w)*(1−C(w)). Thus, as the value of the confidence function 1206 decreases, the reliance of the user boundary 1210 on the measurement function 1204 increases.
The following is a non-exhaustive list of additional examples of the disclosed technology.
1. A workout machine system for automatically providing a user-specific workout, the system comprising:
2. The workout machine system of example 1, wherein the user boundary is a function fit to a set of measurements of user work for particular time windows.
3. The workout machine system of example 1, wherein the user boundary is a series of line segments that connect measurements of user work for particular time windows.
4. The workout machine system of example 1, wherein the user boundary is a combination of A) a function fit to a set of measurements of user work for particular time windows and B) a series of line segments that connect the measurements of user work for particular time windows.
5. The workout machine system of example 4,
6. The workout machine system of any one of examples 1-5, wherein the user-agnostic training profile is specific to the workout apparatus.
7. The workout machine system of any one of examples 1-6, wherein the training boundary is linked to the user-agnostic training profile such that a change to the user-agnostic training profile causes a corresponding change to the training boundary.
8. The workout machine system of any one of examples 1-7,
9. The workout machine system of any one of examples 1-8, wherein the comparison between the training boundary and the user boundary minimizes user perceived effort by adjusting the training boundary to maximize a total area between the training boundary and the user boundary.
10. The workout machine system of example any one of examples 1-8, wherein the comparison between the training boundary and the user boundary maximizes workout potential by adjusting the training boundary to minimize a total area between the training boundary and the user boundary.
11. The workout machine system of example any one of examples 1-8, wherein the comparison between the training boundary and the user boundary causes an adjustment to the training boundary that minimizes a loss function that balances between perceived user effort and workout potential.
12. The workout machine system of example any one of examples 1-11, wherein the automatically providing the output or settings of the workout apparatus comprises providing the output, to a server system, including an indication of the user-specific workout.
13. The workout machine system of example any one of examples 1-12, wherein the automatically providing the output or settings of the workout apparatus comprises providing the output, to a mobile device, including an indication of the user-specific workout.
14. The workout machine system of any one of examples 1-13, wherein the automatically providing the output or settings of the workout apparatus comprises providing the output to a mobile device, including data for the user-specific workout to be operated on by execution of instructions on the mobile device, wherein the execution of instructions by the mobile device provide a display for a user to implement the user-specific workout.
15. The workout machine system of any one of examples 1-14, wherein the automatically providing the output or settings of the workout apparatus comprises providing the output to the workout apparatus, the output configured to cause a display of the workout apparatus to provide instructions for the user-specific workout.
16. The workout machine system of any one of examples 1-15, wherein the automatically providing the output or settings of the workout apparatus comprises providing the settings to the workout apparatus, wherein the workout apparatus automatically implements the user-specific workout.
17. The workout machine system of any one of examples 1-16, wherein the user-agnostic training profile is based on one or more user drawn lines, provided to a user interface, that are automatically converted into the user-agnostic training profile.
18. The workout machine system of any one of examples 1-17, wherein the user-agnostic training profile is obtained from a library of predefined user-agnostic training profiles.
19. The workout machine system of any one of examples 1-18,
20. The workout machine system of any one of examples 1-19,
21. The workout machine system of any one of examples 1-20,
22. The workout machine system of any one of examples 1-21, wherein the user boundary is based on a series of work values obtained by:
23. The workout machine system of any one of examples 1-22, wherein the conversion of the user-agnostic training profile into the boundary space is performed by:
24. A method for automatically providing a user-specific workout, the method comprising:
25. The method of example 24, wherein the adjusting causes at least one of:
26. The method of any one of examples 24-25, wherein the user boundary is a function fit to a set of measurements of user work for particular time windows.
27. The method of any one of examples 24-25,
28. The method of any one of examples 24-27, wherein the user-agnostic training profile is specific to the workout apparatus.
29. The method of any one of examples 24-28,
30. The method of any one of examples 24-29,
31. The method of any one of examples 24-29, wherein the comparison between the training boundary and the user boundary causes an adjustment to the training boundary that minimizes a loss function that balances between perceived user effort and workout potential.
32. The method of any one of examples 24-31, wherein the automatically providing the output or settings of the workout apparatus comprises providing the output, to a mobile device, including an indication of the user-specific workout.
33. The method of any one of examples 24-32, wherein the automatically providing the output or settings of the workout apparatus comprises providing the settings to the workout apparatus, wherein the workout apparatus automatically implements the settings to implement the user-specific workout.
34. The method of any one of examples 24-33, wherein adjusting of the training boundary is based at least in part on a determined duration, tempo, pace of a video or audio media item.
35. The method of any one of examples 24-34,
36. A computer-readable storage medium storing instructions that, when executed by a computing system, cause the computing system to perform operations for automatically providing a user-specific workout, the operations comprising:
37. The computer-readable storage medium of example 36, wherein causing the user-agnostic training profile to be transformed into the user-specific workout includes at least one of:
38. The computer-readable storage medium of any one of examples 36-37,
39. The computer-readable storage medium of any one of examples 36-38, wherein the user boundary is a function fit to a set of values of work for particular time windows.
40. The computer-readable storage medium of any one of examples 36-39,
41. The computer-readable storage medium of any one of examples 36-40,
Several implementations of the disclosed technology are described above in reference to the figures. The computing devices on which the described technology may be implemented can include one or more central processing units, memory, input devices (e.g., keyboard and pointing devices), output devices (e.g., display devices), storage devices (e.g., disk drives), and network devices (e.g., network interfaces). The memory and storage devices are computer-readable storage media that can store instructions that implement at least portions of the described technology. In addition, the data structures and message structures can be stored or transmitted via a data transmission medium, such as a signal on a communications link. Various communications links can be used, such as the Internet, a local area network, a wide area network, or a point-to-point dial-up connection. Thus, computer-readable media can comprise computer-readable storage media (e.g., “non-transitory” media) and computer-readable transmission media.
Reference in this specification to “implementations” (e.g., “some implementations,” “various implementations,” “one implementation,” “an implementation,” etc.) means that a particular feature, structure, or characteristic described in connection with the implementation is included in at least one implementation of the disclosure. The appearances of these phrases in various places in the specification are not necessarily all referring to the same implementation, nor are separate or alternative implementations mutually exclusive of other implementations. Moreover, various features are described which may be exhibited by some implementations and not by others. Similarly, various requirements are described which may be requirements for some implementations but not for other implementations.
As used herein, being above a threshold means that a value for an item under comparison is above a specified other value, that an item under comparison is among a certain specified number of items with the largest value, or that an item under comparison has a value within a specified top percentage value. As used herein, being below a threshold means that a value for an item under comparison is below a specified other value, that an item under comparison is among a certain specified number of items with the smallest value, or that an item under comparison has a value within a specified bottom percentage value. As used herein, being within a threshold means that a value for an item under comparison is between two specified other values, that an item under comparison is among a middle specified number of items, or that an item under comparison has a value within a middle specified percentage range. Relative terms, such as high or unimportant, when not otherwise defined, can be understood as assigning a value and determining how that value compares to an established threshold. For example, the phrase “selecting a fast connection” can be understood to mean selecting a connection that has a value assigned corresponding to its connection speed that is above a threshold.
As used herein, the word “or” refers to any possible permutation of a set of items. For example, the phrase “A, B, or C” refers to at least one of A, B, C, or any combination thereof, such as any of: A; B; C; A and B; A and C; B and C; A, B, and C; or multiple of any item such as A and A; B, B, and C; A, A, B, C, and C; etc.
Although the subject matter has been described in language specific to structural features or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described above. Specific embodiments and implementations have been described herein for purposes of illustration, but various modifications can be made without deviating from the scope of the embodiments and implementations. The specific features and acts described above are disclosed as example forms of implementing the claims that follow. Accordingly, the embodiments and implementations are not limited except as by the appended claims.
Any patents, patent applications, and other references noted above are incorporated herein by reference. Aspects can be modified, if necessary, to employ the systems, functions, and concepts of the various references described above to provide yet further implementations. If statements or subject matter in a document incorporated by reference conflicts with statements or subject matter of this application, then this application shall control.
Patent | Priority | Assignee | Title |
12070653, | Dec 21 2017 | JOHNSON HEALTH TECH RETAIL, INC | Critical power adaptive training with varying parameters |
Patent | Priority | Assignee | Title |
10603543, | Dec 21 2017 | JOHNSON HEALTH TECH RETAIL, INC | Critical power adaptive training with varying parameters |
10688345, | Oct 29 2019 | RELIANCE CAPITAL ADVISORS LLC | Ideal target weight training recommendation system and method |
10824954, | Jun 25 2014 | Bosch Sensortec GmbH | Methods and apparatus for learning sensor data patterns of physical-training activities |
10998101, | Dec 15 2019 | Health management | |
11162854, | Jan 21 2011 | Foundation Fitness, LLC | Apparatus, system and method for power measurement |
11260268, | Oct 19 2016 | MD SYSTEMS, INC | Systems, methods, and apparatus for isometric, isokinetic, isotonic, and isodynamic exercise |
11278763, | Dec 29 2015 | Cornell University | System and method for training tongue as a treatment for obstructive sleep apnea |
6450967, | Jun 20 2001 | Tonic Fitness Technology, Inc. | Measuring method for anaerobic threshold |
20040157711, | |||
20070254784, | |||
20090069156, | |||
20150251074, | |||
20160101337, | |||
20160184634, | |||
20160345891, | |||
20160346614, | |||
20170100637, | |||
20180064991, | |||
20180214729, | |||
20190192906, | |||
20200016453, | |||
20200179754, | |||
20200261023, | |||
20210008413, | |||
20210205661, | |||
20210354002, | |||
20220054892, | |||
20220072377, | |||
20220072379, | |||
20220072381, | |||
20220088459, | |||
CN111812976, | |||
EP1993681, | |||
WO2017014183, | |||
WO9842411, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Feb 10 2020 | SMITH, JOSHUA S | NAUTILUS, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 051884 | /0892 | |
Feb 19 2020 | Nautilus, Inc. | (assignment on the face of the patent) | / | |||
Oct 07 2020 | NAUTILUS, INC | Wells Fargo Bank, National Association | PATENT SECURITY AGREEMENT | 054036 | /0328 | |
Nov 30 2022 | NAUTILUS, INC | CRYSTAL FINANCIAL LLC D B A SLR CREDIT SOLUTIONS | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 062029 | /0373 | |
Nov 30 2022 | Wells Fargo Bank, National Association | NAUTILUS, INC | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 062038 | /0027 | |
Oct 17 2023 | NAUTILUS, INC | BOWFLEX INC | CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 065865 | /0886 | |
Jan 24 2024 | BOWFLEX INC | Wells Fargo Bank, National Association | PATENT SECURITY AGREEMENT | 066374 | /0281 | |
Jan 24 2024 | BOWFLEX INC | CRYSTAL FINANCIAL LLC D B A SLR CREDIT SOLUTIONS | SECURITY INTEREST SEE DOCUMENT FOR DETAILS | 066369 | /0555 | |
Feb 26 2024 | Wells Fargo Bank, National Association | BOWFLEX INC F K A NAUTILUS, INC | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 066725 | /0904 | |
Apr 22 2024 | CRYSTAL FINANCIAL LLC D B A SLR CREDIT SOLUTIONS | BOWFLEX INC | RELEASE BY SECURED PARTY SEE DOCUMENT FOR DETAILS | 067239 | /0121 | |
Apr 22 2024 | BOWFLEX INC | JOHNSON HEALTH TECH RETAIL, INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 067807 | /0675 |
Date | Maintenance Fee Events |
Feb 19 2020 | BIG: Entity status set to Undiscounted (note the period is included in the code). |
Mar 05 2020 | SMAL: Entity status set to Small. |
Date | Maintenance Schedule |
Jun 14 2025 | 4 years fee payment window open |
Dec 14 2025 | 6 months grace period start (w surcharge) |
Jun 14 2026 | patent expiry (for year 4) |
Jun 14 2028 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jun 14 2029 | 8 years fee payment window open |
Dec 14 2029 | 6 months grace period start (w surcharge) |
Jun 14 2030 | patent expiry (for year 8) |
Jun 14 2032 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jun 14 2033 | 12 years fee payment window open |
Dec 14 2033 | 6 months grace period start (w surcharge) |
Jun 14 2034 | patent expiry (for year 12) |
Jun 14 2036 | 2 years to revive unintentionally abandoned end. (for year 12) |