52 #include "rnr/rnrconfig.h" 93 const double LaeTuneThreadImuHzDft = LaeThreadImu::ThreadImuHzDft;
94 const double LaeTuneThreadKinHzDft = LaeThreadKin::ThreadKinHzDft;
95 const double LaeTuneThreadRangeHzDft=LaeThreadRange::ThreadRangeHzDft;
96 const double LaeTuneThreadHzMin = LaeThread::ThreadMinHz;
99 const double LaeTuneWdTimeoutDft = (double)LaeWdTimeoutDft / 1000.0;
100 const double LaeTuneWdTimeoutMin = (double)LaeWdTimeoutMin / 1000.0;
101 const double LaeTuneWdTimeoutMax = (double)LaeWdTimeoutMax / 1000.0;
104 const double LaeTuneVelDerateDft = 100.0;
105 const double LaeTuneVelDerateMin = 10.0;
106 const double LaeTuneVelDerateMax = 100.0;
109 const LaeNorm LaeTuneTrajNormDft = LaeNormLinf;
110 const double LaeTuneTrajEpsilonDft = 0.001;
111 const double LaeTuneTrajEpsilonMin = 0.0;
114 const char*
const LaeTuneBattType =
"lithium-ion polymer";
115 const char*
const LaeTuneBattChem =
"NMC";
116 const double LaeTuneBattCapAh = 10.0;
117 const int LaeTuneBattCells = 3;
118 const double LaeTuneBattMaxVMax = 12.9;
119 const double LaeTuneBattMaxVDft = 12.6;
120 const double LaeTuneBattNominalV = 11.1;
121 const double LaeTuneBattMinVDft = 9.0;
122 const double LaeTuneBattMinVMin = 8.1;
125 const double LaeTuneVelPidKpDft = 2500.0;
126 const double LaeTuneVelPidKiDft = 500.0;
127 const double LaeTuneVelPidKdDft = 150.0;
128 const double LaeTuneVelPidKMin = 0.0;
131 const double LaeTuneTireRadiusDft = 0.60;
132 const double LaeTuneTireWidthDft = 0.65;
133 const double LaeTuneTireDimMin = 0.01;
157 LaeTunesBattery::LaeTunesBattery() :
158 m_strType(LaeTuneBattType), m_strChem(LaeTuneBattChem)
180 printf(
"%*sBattery =\n", indent,
"");
181 printf(
"%*s{\n", indent,
"");
182 printf(
"%*sType = %s\n", indent+2,
"",
m_strType.c_str());
183 printf(
"%*sChemistry = %s\n", indent+2,
"",
m_strChem.c_str());
184 printf(
"%*sCapacity Ah = %.2lf\n", indent+2,
"",
m_fCapAh);
185 printf(
"%*sCells = %d\n", indent+2,
"",
m_nCells);
186 printf(
"%*sMax V = %.2lf\n", indent+2,
"",
m_fMaxV);
187 printf(
"%*sNominal V = %.2lf\n", indent+2,
"",
m_fNominalV);
188 printf(
"%*sMin V = %.2lf\n", indent+2,
"",
m_fMinV);
189 printf(
"%*s}\n", indent,
"");
217 printf(
"%*sPowertrains[%s] =\n", indent,
"", strKey.c_str());
218 printf(
"%*s{\n", indent,
"");
220 printf(
"%*sVelocity PID =\n", indent+2,
"");
221 printf(
"%*s{\n", indent+2,
"");
222 printf(
"%*sKp = %.4lf\n", indent+4,
"", m_fVelPidKp);
223 printf(
"%*sKi = %.4lf\n", indent+4,
"", m_fVelPidKi);
224 printf(
"%*sKd = %.4lf\n", indent+4,
"", m_fVelPidKd);
225 printf(
"%*s}\n", indent+2,
"");
227 printf(
"%*sTires =\n", indent+2,
"");
228 printf(
"%*s{\n", indent+2,
"");
229 printf(
"%*sRadius = %.3f\n", indent+4,
"", m_fTireRadius);
230 printf(
"%*sWidth = %.3f\n", indent+4,
"", m_fTireWidth);
231 printf(
"%*s}\n", indent+2,
"");
233 printf(
"%*s}\n", indent,
"");
261 printf(
"%*sVL6180[%s] =\n", indent,
"", strKey.c_str());
262 printf(
"%*s{\n", indent,
"");
264 printf(
"%*sToF Offset = ", indent+2,
"");
271 printf(
"%d\n", m_nTofOffset);
274 printf(
"%*sToF Cross-Talk = ", indent+2,
"");
281 printf(
"%d\n", m_nTofCrossTalk);
283 printf(
"%*sALS Gain = %.1lf\n", indent+2,
"", m_fAlsGain);
284 printf(
"%*sALS Integration Period = %d\n", indent+2,
"", m_nAlsIntPeriod);
286 printf(
"%*s}\n", indent,
"");
326 return m_fKinematicsHz;
336 return m_fWatchDogTimeout;
347 fEpsilon = m_fTrajEpsilon;
352 fBattMinV = m_battery.m_fMinV;
353 fBattMaxV = m_battery.m_fMaxV;
362 LaeTunesMapPtp::const_iterator pos;
364 strKey = mapToPtp(strName);
366 if( (pos = m_mapPtp.find(strKey)) != m_mapPtp.end() )
368 fKp = pos->second.m_fVelPidKp;
369 fKi = pos->second.m_fVelPidKi;
370 fKd = pos->second.m_fVelPidKd;
384 double &fTireWidth)
const 387 LaeTunesMapPtp::const_iterator pos;
389 strKey = mapToPtp(strName);
391 if( (pos = m_mapPtp.find(strKey)) != m_mapPtp.end() )
393 fTireRadius = pos->second.m_fTireRadius;
394 fTireWidth = pos->second.m_fTireWidth;
425 int &nAlsIntPeriod)
const 427 LaeTunesMapVL6180::const_iterator pos;
429 if( (pos = m_mapVL6180.find(strName)) != m_mapVL6180.end() )
431 nTofOffset = pos->second.m_nTofOffset;
432 nTofCrossTalk = pos->second.m_nTofCrossTalk;
433 fAlsGain = pos->second.m_fAlsGain;
434 nAlsIntPeriod = pos->second.m_nAlsIntPeriod;
449 LaeTunesMapPtp::iterator iPtp;
450 LaeTunesMapVL6180::iterator iSensor;
452 printf(
"%*sGlobals =\n", indent,
"");
453 printf(
"%*s{\n", indent,
"");
455 printf(
"%*sThreads =\n", indent+2,
"");
456 printf(
"%*s{\n", indent+2,
"");
457 printf(
"%*sIMU Thread Hertz = %.1lf\n", indent+4,
"", m_fImuHz);
458 printf(
"%*sKinematics Thread Hertz = %.1lf\n", indent+4,
"",
460 printf(
"%*sRange Thread Hertz = %.1lf\n", indent+4,
"", m_fRangeHz);
461 printf(
"%*s}\n", indent+2,
"");
463 printf(
"%*sTrajectory =\n", indent+2,
"");
464 printf(
"%*s{\n", indent+2,
"");
465 printf(
"%*sNorm = %d\n", indent+4,
"", m_eTrajNorm);
466 printf(
"%*sEpsilon = %lf\n", indent+4,
"",
radToDeg(m_fTrajEpsilon));
467 printf(
"%*s}\n", indent+2,
"");
469 printf(
"%*sVelocity Derate = %.1lf\n", indent+2,
"", m_fVelDerate * 100.0);
470 printf(
"%*s}\n", indent,
"");
472 m_battery.print(indent);
474 for(iPtp = m_mapPtp.begin(); iPtp != m_mapPtp.end(); ++iPtp)
476 iPtp->second.print(iPtp->first, indent);
479 for(iSensor = m_mapVL6180.begin(); iSensor != m_mapVL6180.end(); ++iSensor)
481 iSensor->second.print(iSensor->first, indent);
double m_fMinV
minimum operation voltage
double m_fNominalV
nominal operation voltage
#define VL6180X_AMBIENT_INT_T_MIN
minimum als int. period (msec)
double getImuHz() const
Get IMU tasks thread cycle rate tune parameter (hertz).
Laelaps thread base class interface.
const double LaeTuneVelPidKiDft
Default motor velocity PID integral constant.
#define VL6180X_RANGE_XTALK_MIN
minimum tof cross-talk
double getWatchDogTimeout() const
Get watchdog timeout (seconds).
Laelaps kinodynamics thread class interface.
#define VL6180X_RANGE_OFFSET_MAX
maximum tof offset
Trajectory classes interfaces.
const double LaeTuneVelDerateDft
Default Laelaps robot velocity derate (% of goal velocities).
double getKinematicsHz() const
Get kinematics thread cycle rate tune parameter (hertz).
double degToRad(double d)
Convert degrees to radians.
const int LaeTuneVL6180TofXTalkDft
Default Time-of-Flight cross-talk compensation.
const double LaeTuneTrajEpsilonDft
Default trajectory distance epsilon (meters).
#define VL6180X_AMBIENT_INT_T_MAX
maximum als int. period (msec)
LaeTunesVL6180()
Default constructor.
LaeTunes()
Default constructor.
LaeTunesPowertrain()
Default constructor.
double m_fVelPidKd
motor velocity PID derivative constant
std::string mapToPtp(const std::string &strKey) const
int m_nTofOffset
ToF part-to-part offset.
void getTrajectoryParams(LaeNorm &eNorm, double &fEpsilon) const
Get trajectory tune parameters.
void getVelPidKParams(const std::string &strName, double &fKp, double &fKi, double &fKd) const
Get motor velocity PID K tune parameters.
const double LaeTuneTireRadiusDft
Default tire radius (meters).
void print(int indent=0)
Print out tuning parameters to stdout.
static const char *const LaeKeyRightFront
right front
const double LaeTuneBattNominalV
Fixed nominal operating voltage.
RoboClaw motor controller class interface.
static const char *const LaeKeyRear
rear
const double LaeTuneBattMinVDft
void print(const std::string &strKey, int indent=0)
Print out tuning parameters to stdout.
void getBattOpRangeParams(double &fBattMinV, double &fBattMaxV) const
Get battery minimum and maximum allowed operating range voltages tune parameters. ...
static const char *const LaeKeyFront
front
Laelaps WatchDog software class interface.
Laelaps PCA9548A I2C multiplexer switch interface.
double m_fVelPidKp
motor velocity PID proportional const
int m_nAlsIntPeriod
ALS integration period.
const int ToFSensorMaxNumOf
maximum number of ToF sensors
Laelaps I2C class interface.
double radToDeg(double r)
Convert radians to degrees.
const double LaeTuneVelPidKpDft
Default motor velocity PID proportional constant.
std::string m_strType
battery type
double m_fCapAh
battery capacity in Amp-hours
LaeTunesVL6180 & operator=(const LaeTunesVL6180 &rhs)
Assignment operator.
#define VL6180X_RANGE_XTALK_MAX
maximum tof cross-talk
double m_fTireRadius
tire radius (meters)
Laelaps Time-of-Flight sensors. The ToFs are used as a virtual bumper for close-in obstacle detection...
LaeTunesPowertrain & operator=(const LaeTunesPowertrain &rhs)
Assignment operator.
void getVL6180Params(const std::string &strName, int &nTofOffset, int &nTofCrossTalk, double &fAlsGain, int &nAlsIntPeriod) const
Get VL6180 range sensor tune parameters.
const double LaeTuneThreadKinHzDft
Default kinematics thread cycle rate (Hertz).
The <b><i>Laelaps</i></b> namespace encapsulates all <b><i>Laelaps</i></b> related constructs...
Laelaps robotic base mobile platform description class interface.
double getVelocityDerate() const
Get derated velocity tune parameter (normalized).
Laelaps common utilities.
#define VL6180X_AMBIENT_INT_T_REC
recommended int. period (msec)
Laelaps built-in Inertial Measurement Unit class interface.
The Laelaps kinematics and dynamics class interface.
Laelaps powertrain class interfaces.
const double LaeTuneTireWidthDft
Default tire width (meters).
int m_nTofCrossTalk
ToF cross-talk compensation.
double m_fVelPidKi
motor velocity PID integral constant
const double LaeTuneWdTimeoutDft
Default Laelaps watchdog timeout.
void print(int indent=0)
Print out tuning parameters to stdout.
LaeTunesBattery & operator=(const LaeTunesBattery &rhs)
Assignment operator.
const double LaeTuneThreadRangeHzDft
Default range sensing thread cycle rate (Hertz).
const double LaeTuneVelPidKdDft
Default motor velocity PID derivative constant.
const int LaeTuneBattCells
Fixed battery cell count.
double m_fMaxV
maximum operating voltage
Laelaps built-in Arduino sub-processor.
Laelaps battery tuning data class.
double m_fTireWidth
tire width (meters)
int m_nCells
number of battery cells
Laelaps range sensors thread class interface.
Laelaps motors, encoder, and controllers hardware abstraction interfaces.
#define VL6180X_RANGE_OFFSET_MIN
minimum tof offset
void print(const std::string &strKey, int indent=0)
Print out tuning parameters to stdout.
const double LaeTuneBattMaxVDft
static const int LaeNumMotorCtlrs
number of motor controllers
const LaeNorm LaeTuneTrajNormDft
Default trajectory norm.
std::string m_strChem
battery chemistry
static const char *const KeyMotorCtlr[]
motor controller keys
const int LaeTuneVL6180AlsIntPeriodDft
Default Ambient Light Sensor integration period (msec).
Laelaps powertrain tuning data class.
const int LaeTuneVL6180TofOffsetDft
Default Time-of-Flight part-to-part offset.
Laelaps powertrain tuning data class.
Laelaps IMU thread class interface.
Laelaps supported cameras.
static const char *const KeyRangeSensorMax[]
max range sensor keys
const double LaeTuneBattCapAh
Fixed battery capacity (Amp-hours).
const double LaeTuneVL6180AlsGainDft
Default Ambient Light Sensor analog gain.
void getTireDimParams(const std::string &strName, double &fTireRadius, double &fTireWidth) const
Get tire dimensions tune parameters.
LaeNorm
Length/Distance Norm.
double getRangeHz() const
Get range sensing thread cycle rate tune parameter (hertz).
#define VL6180X_AMBIENT_GAIN_MIN
minimum als analog gain
static const char *const LaeKeyLeftFront
left front
#define VL6180X_AMBIENT_GAIN_MAX
maximum als analog gain
#define VL6180X_FACTORY_DFT
use factory default
double m_fAlsGain
ALS analog gain.
Top-level package include file.
const double LaeTuneThreadImuHzDft
Default IMU thread cycle rate (Hertz).