Go to the documentation of this file.
18 #ifndef UndercarriageCtrlGeom_INCLUDEDEF_H
19 #define UndercarriageCtrlGeom_INCLUDEDEF_H
24 #include <boost/make_shared.hpp>
112 template<
typename V>
static void updateWheelStates(V& wheels,
const std::vector<WheelState> &states)
114 if(wheels.size() != states.size())
throw std::length_error(
"number of states does not match number of wheels");
116 for(
size_t i = 0; i < wheels.size(); ++i){
117 wheels[i]->updateState(states[i]);
123 double dtempRotRobRADPS = 0;
124 double dtempVelXRobMMS = 0;
125 double dtempVelYRobMMS = 0;
128 for(
int i = 0; i < wheels.size() ; i++)
131 const WheelData &other_wheel = *wheels[(i+1) % wheels.size()];
134 dtempVelXRobMMS += wheel.
getVelX();
135 dtempVelYRobMMS += wheel.
getVelY();
139 state.
dRotRobRadS = dtempRotRobRADPS/wheels.size();
143 state.
dVelLatMMS = dtempVelYRobMMS/wheels.size();
165 std::vector<boost::shared_ptr<WheelData> >
wheels_;
168 double limitValue(
double value,
double limit);
174 for(
typename std::vector<T2>::const_iterator it = params.begin(); it != params.end(); ++it){
175 wheels_.push_back(boost::make_shared<T>(*it));
190 for(
size_t i = 0; i <
wheels_.size(); ++i){
197 commands.resize(
wheels_.size());
199 for(
size_t i = 0; i <
wheels_.size(); ++i){
200 wheels_[i]->calcControlStep(commands[i], dCmdRateS,
reset);
205 for(
size_t i = 0; i <
wheels_.size(); ++i){
237 virtual void reset();
284 virtual void reset();
298 void configure(
const std::vector<PosCtrlParams> &pos_ctrl);
double limitValue(double value, double limit)
static void calcDirect(PlatformState &state, const V &wheels)
virtual void updateWheelStates(const std::vector< WheelState > &states)
WheelCtrlParams WheelParams
UndercarriageDirectCtrl(const std::vector< WheelParams > ¶ms)
virtual void updateWheelStates(const std::vector< WheelState > &states)
virtual ~UndercarriageGeomBase()
void setTarget(const PlatformState &state)
CtrlData(const P ¶ms)
double dMaxDriveRateRadpS
std::vector< boost::shared_ptr< WheelData > > wheels_
std::vector< boost::shared_ptr< T > > wheels_
PosCtrlData(const WheelCtrlPosParams ¶ms)
void configure(const std::vector< PosCtrlParams > &pos_ctrl)
virtual void updateWheelStates(const std::vector< WheelState > &states)=0
WheelData(const WheelGeom &geom)
virtual void calcDirect(PlatformState &state) const =0
WheelCtrlPosParams WheelParams
double dSteerDriveCoupling
virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset)
virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset)
UndercarriageCtrl(const std::vector< WheelParams > ¶ms)
UndercarriageGeom(const std::vector< WheelParams > ¶ms)
static double mergeRotRobRadS(const WheelData &wheel1, const WheelData &wheel2)
double dDistSteerAxisToDriveWheelMM
double m_dAngGearSteerTargetRad
virtual void calcDirect(PlatformState &state) const
UndercarriageCtrlBase(const std::vector< T2 > ¶ms)
PosCtrlParams pos_params_
double dAngGearSteerRadDelta
void calcControlStep(std::vector< WheelCommand > &commands, double dCmdRateS, bool reset)
void updateState(const WheelState &state)
double dMaxSteerRateRadpS
virtual void calcDirect(PlatformState &state) const
void setTarget(const PlatformState &state)
static void updateWheelStates(V &wheels, const std::vector< WheelState > &states)
double m_dVelGearDriveTargetRadS