• Increase font size
  • Default font size
  • Decrease font size
Home Forum
Welcome, Guest
Username Password: Remember me

simple direct bike speed model
(1 viewing) (1) Guest
  • Page:
  • 1

TOPIC: simple direct bike speed model

simple direct bike speed model 5 years, 2 months ago #27111

  • djconnel
  • Gold Boarder
  • Posts: 203
  • Karma: 2
Over time, I have played a bit with an equation to predict how cyclist speed generally varies with terrain. The conventional approach is to assume constant power and predict speed, but riders don't ride constant power except in time trials, really. It's more typical to go harder on climbs, coast on descents, and somewhere in between on flat roads. So using power to predict speed requires a model for power. The added step ends up not adding much value so better to model speed directly, with some acknowledgement of power limits.

The model I came up with was, where g is the sine of the road angle (not the tangent):

v = exp(- 3 g4 ) vmax / [ 1 + ln | 1 + K0 exp( KVAM g ) | ]

In the limit of infinite g, in the absence of the first exponential, this becomes:

v = vmax / K0 g

which is constant climbing power, neglecting rolling and wind resistance.

In the limit of negative slope, again neglecting the 4-th order exponential, this is:

v = vmax

which is safety-limited descending speed.

The 4th-order exponential handles the slowing which occurs on extremely steep grades, both climbing and descending.

The constants in the above are:

KVAM = vmax / VAMmax

where VAMmax is a theoretically maximum sustainable rare of climbing and

K0 = exp(vmax / v0 - 1) - 1

where v0 is the speed on flat roads.

For corners, I add time, evenly divided going into and coming out of the corner, using:

Δt = (Δsradian / vmax) ΔΘ (v / vmax)2

where ΔΘ is the change in heading. This says riders tend to lose a certain amount of distance through corners proportional to the square of the ratio of their speed to their maximum safe descending speed and proportional to the angle of the corner. Δsradian = 2 seconds seems to work fairly well. Note this doesn't do well with instantaneous speed: in the limit of infinite spatial resolution it yields infinite deceleration and acceleration, but is rather focused on modeling directly the effect of the net turn.

For wind, I assume wind affects only flat-road speed, not safe descending speed, and not the limits of climbing speed (wind generally screened on climbs). Wind speed is measured at body-height, not 10 meters, so ground sheer needs to be considered:

v0 = v00 exp(2 swx / 3 v00) exp(-(sw / 3 v00)2)

where v00 is the flat-road speed without wind and s0 is the flat-road speed with wind. swx is the wind speed in the direction of the rider (tailwind = positive) and sw is the total wind speed.

For fatigue, I assume speed decays during a ride with a ride-dependent rate rfatigue:

v0(t) = v0(0) exp(-rfatigue t / 2)
VAMmax(t) = VAMmax(0) exp(-rfatigue t)

where I assume flat-road speed decays half as quickly as max theoretical climbing speed (the latter more sensitive to power loss).

When applying this model, I first apply a smoothing function to the course data (longitude, latitude, and altitude) with respect to distance using a 50 meter smoothing length to reduce the effect of numerical noise, since in practice course data tends to come from electronic instruments of finite resolution. This is especially important with that gnarly 4-th order exponential on g, which will send a rider to a grinding halt if grade gets out of line. Latitude and longitude are smoothed to avoid artificially large cornering penalties.

All of this seems to work fairly well. I compare to ride data and power calculations in my blog.
Last Edit: 5 years, 2 months ago by djconnel.

Re: simple direct bike speed model 5 years, 2 months ago #27112

  • djconnel
  • Gold Boarder
  • Posts: 203
  • Karma: 2
analytic approximation to tailwind (swx > 0) or headwind (swwx < 0) under constant power:

s ≣ rider speed / speed w/o wind
swx ≣ wind speed along rider direction of motion / rider speed
f ≣ fraction of resistance from wind

s is then approximately:

s = exp [ 2 f swx / (2 f + 1) - (4 f2 - 2 f + 1) f swx2 / (2 f + 1)3 ]

This works out very well for -1 < swx < 1

Note for f = 1 you get what I used in the previous post.

For a cross-wind it's simpler: I get, where I define

swy ≣ cross wind speed / rider speed,

s = exp [ -½ f swy2 / (2 f + 1) ].

So I can combine the two for arbitrary wind, partitioned into tailwind and crosswind components:

s = exp [ 2 f swx / (2 f + 1) - (4 f2 - 2 f + 1) f swx2 / (2 f + 1)3 ] exp [ -½ f swy2 / (2 f + 1) ].

This works for any road grade, any degree of acceleration, road surface, etc, as long as I assume retarding force is divided into two components: a wind resistant component f proportional to relative wind speed squared and a constant component 1 - f for zero real wind. If there are resistance compont proportional to speed to other powers the approximation breaks down. This is the standard model. I tested this approximation over a variety of speeds and road grades versus a numerical calculation and it does very well.

The much simpler form in the first post doesn't do badly, though, especially if wind speed is just approximated.
Last Edit: 5 years, 2 months ago by djconnel.

Re: simple direct bike speed model 4 years, 5 months ago #27127

  • howardjd
  • Senior Boarder
  • Posts: 41
  • Karma: 0
I was wondering where I could find course data of altitude vrs longitude and latitude (or for altitude vrs distance)? This would help me out a lot in generating course profiles for the recent model I programmed.

Also I just had the idea that if you wanted to simulate the increase in power a on climbs and decrease in steep descents you could use if statements to change your power input for your computational model if the grade exceeds or goes negative to a certain extreme.
  • Page:
  • 1
Time to create page: 0.40 seconds


Which type of tire is more aerodynamic?