Introduction
...
The force required for the car to accelerate to a certain velocity , using the
force_req()
methodThe maximum velocity of the car at after some time, starting from a certain point in the elevation map and starting from a certain velocity, using the
max_velocity()
methodThe energy used by the car to move through the course with the given elevation map and velocity profile, using the
energy_used()
method
...
Crr
: Rolling resistance coefficient of the car, defaulted to 0.0015
CdA
: Drag coefficient of o f the car, defaulted to 0.15
...
The force_req()
function
Parameters
v
: (Numbersfloat) final velocity of the car to accelerate to, (m/s)vwind
: (Numbersfloat) velocity of the wind relative to the car, (m/s)v_old
: (Numbersfloat) initial velocity of the car, (m/s)theta
: (Numbersfloat) angle that must be climbed (radians) personally don’t understand why “climb” matters and not just angle of elevationtimestep
: (Numbersfloat) Time between measurements, (s)usually calculated
dist / ((v + old_v)/2)
,dist
being the distance between two points in elevation profile,e_profile
.
Returns
Fmotor
: (Numbersfloat) Force of motors required to accelerate to a certain velocity in a certain time (N)
Note
If
v
orv_old
greater than maximum speed or less than minimum speed, it is caught in the function and whatever is out of bounds is set to maximum speed or minimum speedFfric
,Fdrag
,Fg
,Fa
, and ultimatelyFmotor
to be all calculated inside the function, using parameters and constants
The max_velocity()
function
Parameters
v_old
: (Numbersfloat) final velocity initial speed of the car to accelerate to, (m/s)vwind
: (Numbersfloat) velocity of the wind relative to the car, (m/s)v_old
: (Numbers) initial velocity of the car, (m/s)theta
: (Numbersfloat) angle that must be climbed (radians) personally don’t understand why “climb” matters and not just angle of elevationtimestep
: (Numbersfloat) Time between measurements, (s)usually calculated
dist / ((v + old_v)/2)
,dist
being the distance between two points in elevation profile,e_profile
.
Returns
Fmotor
: (Numbers) Force of motors required to accelerate to a certain velocity inReturns
max_v
: (float) Maximum final velocity after a certain time (Nm/s)
Note
If
v
orv_old
greater than maximum speed or less than minimum speed, it is caught in the function and whatever is out of bounds is set to maximum speed or minimum speedFfric
,Fdrag
,Fg
,Fa
, and ultimatelyFmotor
to be all calculated inside the function, using parameters and constants
We believe that this function has an error.
max_v = v_old - self.force_req(v_old, vwind=vwind, theta=theta) + self.max_force * timestep
We are doing (velocity) - (force) + (impulse) to get final velocity. What are we doing here??
The energy_used()
function
Parameters
v_profile
: (Numbers) final velocity of the car to accelerate to, float list) A list of the same length as thee_profile
with each element representing the average velocity (m/s)vwind
: (Numbers) velocity of the wind relative to the car, (m/s)theta
: (Numbers) angle that must be climbed (radians) personally don’t understand why “climb” matters and not just angle of elevationtimestep
: (Numbers) Time between measurements, (s)usually calculated
dist / ((v + old_v)/2)
,dist
being the distance between two points in elevation profile,e_profile
.
v_old
: (Numbers) initial velocity of the car, (m/s)Returns
Fmotor
: (Numbers) Force of motors required to accelerate to a certain velocity in a certain time (N)required for the car to move at each section on thee_profile
e_profile
: (2D float list)Each row represents a section of a course
column 0: the pitch/slope/steepness of the section (rad)
column 1: the length/distance of the section (m)
distance
: (float) distance of each section (m/s)we never use this in the function, as we have length of each sections already stored in e_profile. Useless parameter?
Returns
energy
: (float) Total energy used if the entire v_profile was to be followed (J)Calculated by summing
force_req()
*e_profile[point][1]
(length of section at indexpoint
) for each point/section inv_profile
ande_profile
.
Note
If
v
orv_old
greater than maximum speed or less than minimum speed, it is caught in the function and whatever is out of bounds is set to maximum speed or minimum speedFfric
,Fdrag
,Fg
,Fa
, and ultimatelyFmotor
to be all calculated inside the function, using parameters and constants
Sample code
...
.
Error if the length of
v_profile
ande_profile
do not matchIn the objective function (shown below) that we are trying to minimize, it basically returns the value of
energy_used()
function. Thus in Optimizer we are trying to minimize the return value ofenergy_used()
Code Block |
---|
def objective(v_profile):
energy = car.energy_used(v_profile, elev_profile, distance=dist_step)
return energy / 1000000 |