55 #include "rnr/rnrconfig.h" 77 LaeRptMotorCtlrHealth::LaeRptMotorCtlrHealth()
81 LaeAlarms::clearAlarms(m_alarms);
89 LaeAlarms::copyAlarms(src.
m_alarms, m_alarms);
98 LaeAlarms::copyAlarms(rhs.
m_alarms, m_alarms);
108 LaeRptMotorHealth::LaeRptMotorHealth()
110 m_fTemperature = 0.0;
113 LaeAlarms::clearAlarms(m_alarms);
122 LaeAlarms::copyAlarms(src.
m_alarms, m_alarms);
131 LaeAlarms::copyAlarms(rhs.
m_alarms, m_alarms);
160 LaeAlarms::copyAlarms(src.
m_alarms, m_alarms);
186 LaeAlarms::copyAlarms(rhs.
m_alarms, m_alarms);
195 void LaeRptRobotStatus::clear()
198 m_eRobotMode = LaeRobotModeUnknown;
199 m_eIsEStopped = LaeTriStateUnknown;
200 m_eAreDrivesPowered = LaeTriStateUnknown;
201 m_eIsMotionPossible = LaeTriStateUnknown;
202 m_eIsInMotion = LaeTriStateUnknown;
203 m_eIsInError = LaeTriStateUnknown;
204 m_nErrorCode = LAE_OK;
208 m_bIsCharging =
false;
211 m_fTemperature = 0.0;
212 m_eAuxBattEn = LaeTriStateUnknown;
213 m_eAux5VEn = LaeTriStateUnknown;
214 LaeAlarms::clearAlarms(m_alarms);
217 m_vecCtlrHealth.clear();
218 m_vecMotorHealth.clear();
226 m_eRobotMode = RtDb.m_robotstatus.m_eRobotMode;
227 m_eIsEStopped = RtDb.m_robotstatus.m_bIsEStopped?
228 LaeTriStateTrue: LaeTriStateFalse;
229 m_eAreDrivesPowered = RtDb.m_robotstatus.m_bAreMotorsPowered?
230 LaeTriStateTrue: LaeTriStateFalse;
231 m_eIsInMotion = RtDb.m_robotstatus.m_bInMotion?
232 LaeTriStateTrue: LaeTriStateFalse;
235 if( RtDb.m_robotstatus.m_bAlarmState )
237 m_eIsInError = LaeTriStateTrue;
238 m_nErrorCode = m_eIsEStopped == LaeTriStateTrue?
239 -LAE_ECODE_ESTOP: -LAE_ECODE_ALARMED;
245 m_eIsInError = LaeTriStateFalse;
246 m_nErrorCode = LAE_OK;
249 m_eIsMotionPossible = pRobot->
canMove()? LaeTriStateTrue: LaeTriStateFalse;
254 m_fBatterySoC = RtDb.m_energy.m_fBatterySoC;
255 m_bIsCharging = RtDb.m_energy.m_bBatteryIsCharging;
256 m_fCurrent = RtDb.m_energy.m_fTotalCurrent;
257 m_fVoltage = RtDb.m_energy.m_fBatteryVoltage;
259 m_fTemperature = RtDb.m_robotstatus.m_fTempAvg;
260 m_eAuxBattEn = RtDb.m_enable.m_bAuxPortBatt?
261 LaeTriStateFalse: LaeTriStateTrue;
262 m_eAux5VEn = RtDb.m_enable.m_bAuxPort5v?
263 LaeTriStateFalse: LaeTriStateTrue;
265 LaeAlarms::copyAlarms(RtDb.m_alarms.m_system, m_alarms);
272 for(
int nCtlr = 0; nCtlr < LaeNumMotorCtlrs; ++nCtlr)
279 LaeAlarms::copyAlarms(RtDb.m_alarms.m_motorctlr[nCtlr],
282 m_vecCtlrHealth.push_back(ctlrHealth);
288 LaeMapPowertrain::iterator iter;
291 for(iter = mapPowertrains.begin(); iter != mapPowertrains.end(); ++iter)
300 LaeAlarms::copyAlarms(RtDb.m_alarms.m_motor[nMotorId],
303 m_vecMotorHealth.push_back(motorHealth);
313 LaeRptDynPowertrain::LaeRptDynPowertrain()
344 void LaeRptDynPowertrain::clear()
355 void LaeRptDynPowertrain::generate(
int nMotorId)
357 m_strName = LaeDesc::KeyPowertrain[nMotorId];
358 m_nEncoder = RtDb.m_kin.m_powertrain[nMotorId].m_nEncoder;
359 m_nSpeed = RtDb.m_kin.m_powertrain[nMotorId].m_nSpeed;
360 m_fPosition = RtDb.m_kin.m_powertrain[nMotorId].m_fPosition;
361 m_fVelocity = RtDb.m_kin.m_powertrain[nMotorId].m_fVelocity;
362 m_fPe = RtDb.m_kin.m_powertrain[nMotorId].m_fPe;
363 m_fTorque = RtDb.m_kin.m_powertrain[nMotorId].m_fTorque;
371 LaeRptDynamics::LaeRptDynamics()
395 void LaeRptDynamics::clear()
400 m_vecDynPowertrain.clear();
411 m_pose.m_x = RtDb.m_kin.m_robot.m_x;
412 m_pose.m_y = RtDb.m_kin.m_robot.m_y;
413 m_pose.m_theta = RtDb.m_kin.m_robot.m_theta;
414 m_fOdometer = RtDb.m_kin.m_robot.m_fOdometer;
420 for(nMotorId = 0; nMotorId < LaeMotorsNumOf; ++nMotorId)
424 m_vecDynPowertrain.push_back(pt);
double m_fVoltage
motor controller main input voltage (V)
std::string m_strName
motor controller name
double m_fBatterySoC
battery state of charge (0%-100%)
double m_fVelocity
robot linear velocity v (meters/second)
double m_fPe
motor input electrical power (W)
double m_fTemp
motor temperature (C)
LaeTriState m_eIsInMotion
robot is [not] moving
double m_fTemperature
motor controller board temperature (C)
std::string m_strName
powertrain unique name (key)
RoboClaw motor controller class interface.
bool canMove()
Test if robot is safe to operate, given the current robot and alarm state.
LaeTriState m_eIsInError
robot is [not] in error condition
LaeAlarmInfo m_alarms
motor alarms and warnings
double m_fBoardTemp
average sensed interior tempature (C)
VecMotorCtlrHealth m_vecCtlrHealth
motors controllers' health
LaeTriState m_eIsMotionPossible
motion is [not] possible
VecDynPowertrain m_vecDynPowertrain
powertrains' state
int m_nSpeed
raw speed (qpps)
LaeTriState m_eAux5VEn
auxilliary 5V power enable
double m_fOdometer
robot odometer (meters)
double m_fPosition
wheel angular position (radians)
Powertrain dynamics subreport.
double m_fVoltage
average battery voltage (V)
double m_fVoltage
motor voltage (volts)
LaePowertrainAttr m_attr
semi-fixed attribute data
void generate(int nMotorId)
Generate report.
The <b><i>Laelaps</i></b> namespace encapsulates all <b><i>Laelaps</i></b> related constructs...
Interfaces of Laelaps requested and/or published report classes.
Laelaps robotic base mobile platform description class interface.
LaeMapPowertrain & getPowertrainMap()
Get map of all powertrain kinodynamics.
double m_fVolts
input motor voltage (V)
double m_fCurrent
estimated robot draw (A)
std::string m_strName
motor controller name
LaeTriState m_eIsEStopped
robot is [not] emergency stopped
Laelasp Robot Class interface.
double m_fCurrent
motor current draw (amperes)
double m_fTemperature
motor temperature (Celsius)
double m_fMainVolts
average sensed battery voltage (V)
s64_t m_nEncoder
motor encoder position (quad pulses)
LaeAlarmInfo m_alarms
motor controller alarms and warnings
LaePlatform & getPlatform()
Get robot platform kinodynamics.
Laelaps motors, encoder, and controllers hardware abstraction interfaces.
std::string m_strName
powertrain unique name (key)
LaeRobotMode m_eRobotMode
robot operating mode
Laelaps alarm monitoring class interface.
void clear()
Clear report.
LaeAlarmInfo m_alarms
system alarms and warnings
Robot global status report.
LaePowertrainState m_state
dynamic state data
double m_fTorque
wheel torque (N-m)
VecMotorHealth m_vecMotorHealth
motors' health
LaeKinematics m_kin
robot base dynamics and kinematics
int m_nErrorCode
laelaps error code
double m_fTemperature
interior average temperature (C)
LaeTriState m_eAreDrivesPowered
motor are [not] powered
std::string m_strName
motor name
LaePose m_pose
robot 2D pose (meters, meters, radians)
Laelaps real-time "database".
double m_fVelocity
wheel angular velocity (radians/second)
LaeTriState m_eAuxBattEn
auxilliary battery power enable
bool m_bIsCharging
battery is [not] being charged
Laelaps robotic manipulator plus accesories class.
Top-level package include file.