00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <vamos/body/Brake.h>
00022 #include <cmath>
00023 #include <iostream>
00024 #include <stdio.h>
00025
00026
00027
00028
00029 Vamos_Body::Brake::
00030 Brake (double sliding, double radius, double area, double max_pressure,
00031 double bias, double handbrake) :
00032 m_friction (sliding),
00033 m_radius (radius),
00034 m_area (area),
00035 m_max_pressure (max_pressure * bias),
00036 m_bias (bias),
00037 m_threshold (4.0e-4),
00038 m_is_locked (false),
00039 m_handbrake (handbrake)
00040 {
00041 }
00042
00043
00044 double Vamos_Body::Brake::
00045 torque (double factor, double rotational_speed)
00046 {
00047
00048 double pressure = factor * m_bias * m_max_pressure;
00049 double normal = pressure * m_area;
00050 double torque = m_friction * normal * m_radius;
00051 double velocity = m_radius * rotational_speed;
00052 if (velocity < 0.0)
00053 torque *= -1;
00054
00055
00056 if (std::abs (velocity) < (m_threshold * normal))
00057 {
00058 m_is_locked = true;
00059 torque = 0.0;
00060 }
00061 else
00062 {
00063 m_is_locked = false;
00064 }
00065
00066 return torque;
00067 }