Laelaps  2.3.5
RoadNarrows Robotics Small Outdoor Mobile Robot Project
laelaps::LaePowertrain Class Reference

Powertrain data class. More...

#include <laePowertrain.h>

Public Member Functions

 LaePowertrain ()
 Default constructor.
 
 LaePowertrain (const LaePowertrain &src)
 Copy constructor.
 
 ~LaePowertrain ()
 Destructor.
 
LaePowertrain operator= (const LaePowertrain &rhs)
 Assignment operator. More...
 
std::string getName () const
 Get this powertrain unique name (key). More...
 
int getMotorId () const
 Get motor id. More...
 
int getMotorCtlrId () const
 Get motor controller id. More...
 
int getMotorIndex () const
 Get motor controller motor index. More...
 
virtual int configure (const LaeDescPowertrain &desc)
 Configure powertrain from product description. More...
 
virtual int configure (const LaeTunes &tunes)
 Configure powertrain from tune parameters. More...
 
virtual int reload (const LaeTunes &tunes)
 Reload tuning parameters and re-configure. More...
 
virtual int resetOdometer ()
 Reset odometry to zero. More...
 
virtual int updateStateDynamics (s64_t nEncoder, s32_t nSpeed, double fAmps, uint_t uBufLen)
 Update state dynamics. More...
 
virtual int updateHealth (double fVolts, double fTemp, uint_t uCtlrStatus)
 Update motor health state. More...
 

Static Public Member Functions

static int toMotorId (const int nCtlrId, const int nMotorIndex)
 Map motor controller id and motor index to motor id. More...
 
static std::string toKey (const int nCtlrId, const int nMotorIndex)
 Map motor controller id and motor index to powertrain name (key). More...
 
static std::string toKey (const int nMotorId)
 Map motor id to powertrain name (key). More...
 

Public Attributes

std::string m_strName
 powertrain unique name (key)
 
LaePowertrainAttr m_attr
 semi-fixed attribute data
 
LaePowertrainState m_state
 dynamic state data
 

Detailed Description

Powertrain data class.

This class encapsulates the fixed data and current state of one powertrain.

Definition at line 196 of file laePowertrain.h.

Member Function Documentation

int LaePowertrain::configure ( const LaeDescPowertrain desc)
virtual

Configure powertrain from product description.

Parameters
descLaelaps powertrain product description data.
Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 296 of file laePowertrain.cxx.

References laelaps::LaeDescPowertrain::m_eJointType, laelaps::LaeDescPowertrain::m_fGearRatio, laelaps::LaeDescPowertrain::m_nDir, laelaps::LaeDescPowertrain::m_nMotorCtlrId, laelaps::LaeDescPowertrain::m_nMotorId, laelaps::LaeDescPowertrain::m_nMotorIndex, laelaps::LaeDescPowertrain::m_strKey, and M_TAU.

Referenced by laelaps::LaeKinematics::configure().

297 {
298  // from description
299  m_strName = desc.m_strKey;
304  m_attr.m_nMotorDir = desc.m_nDir;
306 
307  // from motor specs and derivations
310  m_attr.m_uMaxQpps = (uint_t)(
311  m_attr.m_fMaxRps *
313  (double)m_attr.m_uPulsesPerRev);
314 
318 
321 
322  return LAE_OK;
323 }
static const double LaeMotorRatedMaxRpm
max output shaft rpm
Definition: laeMotor.h:166
static const int LaeQuadPulsesPerRev
pulses/motor revolution
Definition: laeMotor.h:164
int m_nMotorCtlrId
motor controller id
Definition: laePowertrain.h:81
int m_eJointType
joint type
Definition: laePowertrain.h:85
double m_fGearRatio
gear ratio
Definition: laePowertrain.h:88
double m_fMaxAmps
maximum rated amps
Definition: laePowertrain.h:94
std::string m_strName
powertrain unique name (key)
int m_nMotorIndex
motor controller unique motor index
Definition: laePowertrain.h:82
double m_fMaxRps
maximum rated output shaft rev/sec
Definition: laePowertrain.h:89
int m_nMotorDir
motor normalized direction
Definition: laePowertrain.h:84
LaeJointType m_eJointType
powertrain joint type
Definition: laeDesc.h:184
static const double LaeMotorStallTorque
stall torque (N-m) @5A
Definition: laeMotor.h:167
double m_fMotorRadsPerPulse
motor radians per encoder pulse
Definition: laePowertrain.h:91
int m_nDir
normalize cw/ccw direction.
Definition: laeDesc.h:187
double m_fStallTorque
stall torque amps
Definition: laePowertrain.h:95
LaePowertrainAttr m_attr
semi-fixed attribute data
uint_t m_uMaxQpps
maximum quadrature pulses/second rps
Definition: laePowertrain.h:90
int m_nMotorId
unique robot motor id
Definition: laeDesc.h:181
double m_fGearRatio
motor gear ratio
Definition: laeDesc.h:186
static const double LaeMotorRatedAmps
motor rated max amps.
Definition: laeMotor.h:169
int m_nMotorCtlrId
unique motor controller id
Definition: laeDesc.h:182
std::string m_strKey
powertrain key
Definition: laeDesc.h:180
double m_fWheelRadsPerPulse
output shaft radians per encoder pulse
Definition: laePowertrain.h:92
#define M_TAU
tau = 2 * pi
Definition: laeUtils.h:66
int m_nMotorIndex
motor controller unique motor index
Definition: laeDesc.h:183
uint_t m_uPulsesPerRev
encoder pulses per motor revolution
Definition: laePowertrain.h:87
static const int LAE_OK
not an error, success
Definition: laelaps.h:71
int LaePowertrain::configure ( const LaeTunes tunes)
virtual

Configure powertrain from tune parameters.

Parameters
tunesLaelaps tuning parameters.
Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 325 of file laePowertrain.cxx.

References laelaps::LaeTunes::getTireDimParams().

326 {
327  double fTuneTireRadius, fTuneTireWidth; // tire dimensions
328 
329  tunes.getTireDimParams(m_strName, fTuneTireRadius, fTuneTireWidth);
330 
331  m_attr.m_fTireRadius = fTuneTireRadius;
332  m_attr.m_fTireWidth = fTuneTireWidth;
333 
336 
337  return LAE_OK;
338 }
std::string m_strName
powertrain unique name (key)
double m_fTireRadius
tire radius
Definition: laePowertrain.h:97
LaePowertrainAttr m_attr
semi-fixed attribute data
double m_fMetersPerRadian
tire meters per radian
double m_fMetersPerPulse
tire meters per encoder pulse
Definition: laePowertrain.h:99
double m_fWheelRadsPerPulse
output shaft radians per encoder pulse
Definition: laePowertrain.h:92
double m_fTireWidth
tire width
Definition: laePowertrain.h:98
void getTireDimParams(const std::string &strName, double &fTireRadius, double &fTireWidth) const
Get tire dimensions tune parameters.
Definition: laeTune.cxx:382
static const int LAE_OK
not an error, success
Definition: laelaps.h:71
int laelaps::LaePowertrain::getMotorCtlrId ( ) const
inline

Get motor controller id.

Returns
Returns controller id.

Definition at line 283 of file laePowertrain.h.

References laelaps::LaePowertrainAttr::m_nMotorCtlrId.

284  {
285  return m_attr.m_nMotorCtlrId;
286  }
int m_nMotorCtlrId
motor controller id
Definition: laePowertrain.h:81
LaePowertrainAttr m_attr
semi-fixed attribute data
int laelaps::LaePowertrain::getMotorId ( ) const
inline

Get motor id.

Returns
Returns motor id.

Definition at line 273 of file laePowertrain.h.

References laelaps::LaePowertrainAttr::m_nMotorId.

274  {
275  return m_attr.m_nMotorId;
276  }
LaePowertrainAttr m_attr
semi-fixed attribute data
int laelaps::LaePowertrain::getMotorIndex ( ) const
inline

Get motor controller motor index.

Returns
Returns controller motor index.

Definition at line 293 of file laePowertrain.h.

References laelaps::LaePowertrainAttr::m_nMotorIndex.

294  {
295  return m_attr.m_nMotorIndex;
296  }
int m_nMotorIndex
motor controller unique motor index
Definition: laePowertrain.h:82
LaePowertrainAttr m_attr
semi-fixed attribute data
std::string laelaps::LaePowertrain::getName ( ) const
inline

Get this powertrain unique name (key).

Returns
String.

Definition at line 263 of file laePowertrain.h.

Referenced by laelaps::LaeKinActionDutyCycle::execute(), and laelaps::LaeKinActionVelocity::plan().

264  {
265  return m_strName;
266  }
std::string m_strName
powertrain unique name (key)
LaePowertrain LaePowertrain::operator= ( const LaePowertrain rhs)

Assignment operator.

Parameters
rhsRight hand side object.
Returns
Returns copy of this.

Definition at line 231 of file laePowertrain.cxx.

References m_attr, m_state, and m_strName.

232 {
233  m_strName = rhs.m_strName;
234  m_attr = rhs.m_attr;
235  m_state = rhs.m_state;
236 
237  return *this;
238 }
std::string m_strName
powertrain unique name (key)
LaePowertrainAttr m_attr
semi-fixed attribute data
LaePowertrainState m_state
dynamic state data
int LaePowertrain::reload ( const LaeTunes tunes)
virtual

Reload tuning parameters and re-configure.

Parameters
tunesLaelaps tuning parameters.
Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 340 of file laePowertrain.cxx.

341 {
342  return configure(tunes);
343 }
virtual int configure(const LaeDescPowertrain &desc)
Configure powertrain from product description.
int LaePowertrain::resetOdometer ( )
virtual

Reset odometry to zero.

All related positioning data are reset to 0.

Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 345 of file laePowertrain.cxx.

Referenced by laelaps::LaeKinematics::resetOdometers().

346 {
347  m_state.m_nEncoder = 0;
348  m_state.m_fPosition = 0.0;
349 
351 }
LaeDbKin m_kin
kinodynamics
Definition: laeDb.h:236
LaeDbKinPowertrain m_powertrain[LaeMotorsNumOf]
powertrain kinodynamics
Definition: laeDb.h:189
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
LaePowertrainAttr m_attr
semi-fixed attribute data
double m_fPosition
wheel angular position (radians)
Definition: laeDb.h:166
s64_t m_nEncoder
motor encoder position (quad pulses)
LaePowertrainState m_state
dynamic state data
double m_fPosition
wheel angular position (radians)
string LaePowertrain::toKey ( const int  nCtlrId,
const int  nMotorIndex 
)
static

Map motor controller id and motor index to powertrain name (key).

Parameters
nCtrlIdMotor controller id.
nMotorIndexMotor controller motor index
Returns
Returns key on success, empty string if unknown.

Definition at line 273 of file laePowertrain.cxx.

274 {
275  static const char *unknown = "";
276 
277  int nMotorId = LaePowertrain::toMotorId(nCtlrId, nMotorIndex);
278 
279  return nMotorId != LaeMotorIdNone? LaeDesc::KeyPowertrain[nMotorId]: unknown;
280 }
static const int LaeMotorIdNone
no motor id
Definition: laeMotor.h:102
static const char *const KeyPowertrain[]
powertrain keys
Definition: laeDesc.h:463
static int toMotorId(const int nCtlrId, const int nMotorIndex)
Map motor controller id and motor index to motor id.
string LaePowertrain::toKey ( const int  nMotorId)
static

Map motor id to powertrain name (key).

Parameters
nMotorIdMotor id.
Returns
Returns key on success, empty string if unknown.

Definition at line 282 of file laePowertrain.cxx.

283 {
284  static const char *unknown = "";
285 
286  if( (nMotorId >= 0) && (nMotorId < LaeMotorsNumOf) )
287  {
288  LaeDesc::KeyPowertrain[nMotorId];
289  }
290  else
291  {
292  return unknown;
293  }
294 }
static const int LaeMotorsNumOf
number of motors
Definition: laeMotor.h:107
static const char *const KeyPowertrain[]
powertrain keys
Definition: laeDesc.h:463
int LaePowertrain::toMotorId ( const int  nCtlrId,
const int  nMotorIndex 
)
static

Map motor controller id and motor index to motor id.

Parameters
nCtrlIdMotor controller id.
nMotorIndexMotor controller motor index
Returns
Returns unique motor id.

Definition at line 240 of file laePowertrain.cxx.

241 {
242  switch( nCtlrId )
243  {
244  case LaeMotorCtlrIdFront:
245  switch( nMotorIndex )
246  {
247  case LaeMotorLeft:
248  return LaeMotorIdLF;
249  case LaeMotorRight:
250  return LaeMotorIdRF;
251  default:
252  break;
253  }
254  break;
255  case LaeMotorCtlrIdRear:
256  switch( nMotorIndex )
257  {
258  case LaeMotorLeft:
259  return LaeMotorIdLR;
260  case LaeMotorRight:
261  return LaeMotorIdRR;
262  default:
263  break;
264  }
265  break;
266  default:
267  break;
268  }
269 
270  return LaeMotorIdNone;
271 }
static const int LaeMotorIdRR
right rear
Definition: laeMotor.h:106
static const int LaeMotorCtlrIdRear
rear motor controller
Definition: laeMotor.h:114
static const int LaeMotorIdNone
no motor id
Definition: laeMotor.h:102
static const int LaeMotorLeft
left motors
Definition: laeMotor.h:128
static const int LaeMotorIdRF
right front
Definition: laeMotor.h:104
static const int LaeMotorIdLR
left rear
Definition: laeMotor.h:105
static const int LaeMotorIdLF
left front
Definition: laeMotor.h:103
static const int LaeMotorCtlrIdFront
front motor controller
Definition: laeMotor.h:113
static const int LaeMotorRight
right motors
Definition: laeMotor.h:129
int LaePowertrain::updateHealth ( double  fVolts,
double  fTemp,
uint_t  uCtlrStatus 
)
virtual

Update motor health state.

Parameters
fVoltsMotor input voltage (V).
fTempMotor controller board voltage (V).
uCtlrStatusMotor controller status bits.
Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 407 of file laePowertrain.cxx.

References motor::roboclaw::ParamStatusErrLogicBattHigh, motor::roboclaw::ParamStatusErrLogicBattLow, motor::roboclaw::ParamStatusErrMainBattHigh, motor::roboclaw::ParamStatusErrMot1Fault, motor::roboclaw::ParamStatusErrMot2Fault, motor::roboclaw::ParamStatusErrTemp, motor::roboclaw::ParamStatusEStopped, motor::roboclaw::ParamStatusNormal, motor::roboclaw::ParamStatusWarnMainBattHigh, motor::roboclaw::ParamStatusWarnMainBattLow, motor::roboclaw::ParamStatusWarnMot1OverCur, motor::roboclaw::ParamStatusWarnMot2OverCur, and motor::roboclaw::ParamStatusWarnTemp.

Referenced by laelaps::LaeKinematics::monitorHealth().

408 {
409  m_state.m_fVolts = fVolts;
410  m_state.m_fTemp = fTemp;
411 
414 
415  //
416  // Errors and/or warnings exist.
417  //
418  if( uCtlrStatus != ParamStatusNormal )
419  {
420  // emergency stopped
421  if( uCtlrStatus & ParamStatusEStopped )
422  {
424  }
425 
426  // temperature alarms
427  if( uCtlrStatus & ParamStatusErrTemp )
428  {
430  }
431 
432  // temperature warnings
433  if( uCtlrStatus & ParamStatusWarnTemp )
434  {
436  }
437 
438  // voltage alarms
439  if( uCtlrStatus & ( ParamStatusErrMainBattHigh |
440  ParamStatusErrLogicBattHigh |
441  ParamStatusErrLogicBattLow ) )
442  {
444  }
445 
446  // voltage warnings
447  if( uCtlrStatus & ( ParamStatusWarnMainBattHigh |
448  ParamStatusWarnMainBattLow ) )
449  {
451  }
452 
453  if( m_attr.m_nMotorIndex == Motor1 )
454  {
455  // motor 1 drive fault alarm
456  if( uCtlrStatus & ParamStatusErrMot1Fault )
457  {
459  }
460 
461  // motor 1 over current warning
462  if( uCtlrStatus & ParamStatusWarnMot1OverCur )
463  {
465  }
466  }
467  else if( m_attr.m_nMotorIndex == Motor2 )
468  {
469  // motor 2 drive fault alarm
470  if( uCtlrStatus & ParamStatusErrMot2Fault )
471  {
473  }
474 
475  // motor 2 over current warning
476  if( uCtlrStatus & ParamStatusWarnMot2OverCur )
477  {
479  }
480  }
481  }
482 
483  // TODO torque calculation
484  m_state.m_fTorque = 0.0;
485 
487  m_state.m_fPm = m_state.m_fPe * 1.0; // TODO need efficiency curve
488 }
double m_fAmps
motor draw (A)
static const int LaeMotorWarnVoltage
under/over voltage
Definition: laeMotor.h:156
double m_fTemp
motor temperature (C)
double m_fTorque
wheel torque (N-m)
int m_nMotorIndex
motor controller unique motor index
Definition: laePowertrain.h:82
static const int LaeMotorAlarmEStop
emergency stopped
Definition: laeMotor.h:146
double m_fPm
motor output mechanical power (W)
uint_t m_uWarnings
motor warnings
LaePowertrainAttr m_attr
semi-fixed attribute data
uint_t m_uAlarms
motor alarms
double m_fVolts
input motor voltage (V)
static const int LaeMotorWarnNone
no warnings
Definition: laeMotor.h:153
static const int LaeMotorAlarmTemp
over temperature
Definition: laeMotor.h:147
LaePowertrainState m_state
dynamic state data
static const int LaeMotorAlarmNone
no alarms
Definition: laeMotor.h:143
double m_fPe
motor input electrical power (W)
static const int LaeMotorAlarmVoltage
under/over voltage
Definition: laeMotor.h:145
static const int LaeMotorWarnCurrent
over current
Definition: laeMotor.h:154
static const int LaeMotorWarnTemp
over temperature
Definition: laeMotor.h:155
static const int LaeMotorAlarmFault
motor drive fault
Definition: laeMotor.h:148
int LaePowertrain::updateStateDynamics ( s64_t  nEncoder,
s32_t  nSpeed,
double  fAmps,
uint_t  uBufLen 
)
virtual

Update state dynamics.

Parameters
nEncoderCurrent encoder position (quad pulses).
nSpeedCurrent motor speed (qpps).
fAmpsCurrent motor draw (amperes).
uBufLenCurrent command queue length.
Returns
On success, OK(0) is returned.
On error, RC_ERROR(-1) is returned.

Definition at line 353 of file laePowertrain.cxx.

References laelaps::fcap(), and motor::roboclaw::ParamAmpMax.

Referenced by laelaps::LaeKinematics::senseDynamics().

357 {
358  m_state.m_nEncoder = nEncoder;
359  m_state.m_nSpeed = nSpeed;
360 
361  if( fAmps <= motor::roboclaw::ParamAmpMax )
362  {
363  m_state.m_fAmps = fAmps;
364  }
365 
366  // command buffer length (commands)
367  m_state.m_uBufLen = uBufLen;
368 
369  // angular position and velocity
372  m_state.m_fVelocity = (double)m_state.m_nSpeed *
374 
375  // power
377  m_state.m_fPm = m_state.m_fPe * 1.0; // TODO need efficiency curve
378 
379  // torque
380  if( fabs(m_state.m_fVelocity) >= 0.0001 )
381  {
383  }
384  else if( m_state.m_fAmps >= (m_attr.m_fMaxAmps * 0.9) )
385  {
387  m_state.m_fAmps /
389  }
390  else
391  {
392  m_state.m_fTorque = 0.0;
393  }
394 
397 
398  // update real-time database
405 }
double m_fPe
motor input electrical power (W)
Definition: laeDb.h:168
double m_fAmps
motor draw (A)
int m_nSpeed
raw speed (qpps)
Definition: laeDb.h:165
uint_t m_uBufLen
command queue length
LaeDbKin m_kin
kinodynamics
Definition: laeDb.h:236
double fcap(double a, double min, double max)
Cap value within limits [min, max].
Definition: laeUtils.h:162
double m_fTorque
wheel torque (N-m)
double m_fMaxAmps
maximum rated amps
Definition: laePowertrain.h:94
LaeDbKinPowertrain m_powertrain[LaeMotorsNumOf]
powertrain kinodynamics
Definition: laeDb.h:189
LaeDb RtDb
The real-time database.
Definition: laeDb.h:244
double m_fVelocity
wheel angular velocity (radians/second)
Definition: laeDb.h:167
double m_fPm
motor output mechanical power (W)
s64_t m_nEncoder
motor encoder position (quad pulses)
Definition: laeDb.h:164
double m_fStallTorque
stall torque amps
Definition: laePowertrain.h:95
LaePowertrainAttr m_attr
semi-fixed attribute data
double m_fVolts
input motor voltage (V)
double m_fPosition
wheel angular position (radians)
Definition: laeDb.h:166
double m_fTorque
wheel torque (N-m)
Definition: laeDb.h:169
s64_t m_nEncoder
motor encoder position (quad pulses)
double m_fWheelRadsPerPulse
output shaft radians per encoder pulse
Definition: laePowertrain.h:92
LaePowertrainState m_state
dynamic state data
double m_fPe
motor input electrical power (W)
double m_fVelocity
wheel angular velocity (radians/second)
double m_fPosition
wheel angular position (radians)
int m_nSpeed
raw speed (qpps)

The documentation for this class was generated from the following files: