UndercarriageCtrlGeom.h
Go to the documentation of this file.
1 /*
2  * Copyright 2017 Fraunhofer Institute for Manufacturing Engineering and Automation (IPA)
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 
18 #ifndef UndercarriageCtrlGeom_INCLUDEDEF_H
19 #define UndercarriageCtrlGeom_INCLUDEDEF_H
20 
21 #include <vector>
22 #include <string>
23 #include <stdexcept>
24 #include <boost/make_shared.hpp>
25 
27  double dVelLongMMS;
28  double dVelLatMMS;
29  double dRotRobRadS;
30 
31  const double getVelX() { return dVelLongMMS / 1000.0; }
32  const double getVelY() { return dVelLatMMS / 1000.0; }
33 
34  void setVelX(const double val) { dVelLongMMS = val * 1000.0; }
35  void setVelY(const double val) { dVelLatMMS = val * 1000.0; }
36 
38 };
39 struct WheelState {
44 };
45 struct WheelCommand : public WheelState {
48 };
49 struct WheelGeom{
50  std::string steer_name, drive_name;
51 
56  double dWheelXPosMM;
57  double dWheelYPosMM;
58 
60 
63 
64 };
65 struct WheelData {
67 
72  double dFactorVel;
73 
75 
84 
86 
87  void updateState(const WheelState &state);
88  double getVelX() const;
89  double getVelY() const;
90 
91  static double mergeRotRobRadS(const WheelData &wheel1, const WheelData &wheel2);
92 
93  WheelData(const WheelGeom &geom)
94  : geom_(geom),
95  dFactorVel(-geom_.dSteerDriveCoupling + geom_.dDistSteerAxisToDriveWheelMM / geom_.dRadiusWheelMM) {
97  }
98 };
99 
101 {
102 public:
103  // Get result of direct kinematics
104  virtual void calcDirect(PlatformState &state) const = 0;
105 
106  // Set actual values of wheels (steer/drive velocity/position) (Istwerte)
107  virtual void updateWheelStates(const std::vector<WheelState> &states) = 0;
108 
110 
111 protected:
112  template<typename V> static void updateWheelStates(V& wheels, const std::vector<WheelState> &states)
113  {
114  if(wheels.size() != states.size()) throw std::length_error("number of states does not match number of wheels");
115 
116  for(size_t i = 0; i < wheels.size(); ++i){
117  wheels[i]->updateState(states[i]);
118  }
119  }
120 
121  template<typename V> static void calcDirect(PlatformState &state, const V& wheels)
122  {
123  double dtempRotRobRADPS = 0; // Robot-Rotation-Rate in rad/s (in Robot-Coordinateframe)
124  double dtempVelXRobMMS = 0; // Robot-Velocity in x-Direction (longitudinal) in mm/s (in Robot-Coordinateframe)
125  double dtempVelYRobMMS = 0; // Robot-Velocity in y-Direction (lateral) in mm/s (in Robot-Coordinateframe)
126 
127  // calculate rotational rate of robot and current "virtual" axis between all wheels
128  for(int i = 0; i < wheels.size() ; i++)
129  {
130  const WheelData &wheel = *wheels[i];
131  const WheelData &other_wheel = *wheels[(i+1) % wheels.size()];
132 
133  dtempRotRobRADPS += WheelData::mergeRotRobRadS(wheel, other_wheel);
134  dtempVelXRobMMS += wheel.getVelX();
135  dtempVelYRobMMS += wheel.getVelY();
136  }
137 
138  // assign rotational velocities for output
139  state.dRotRobRadS = dtempRotRobRADPS/wheels.size();
140 
141  // assign linear velocity of robot for output
142  state.dVelLongMMS = dtempVelXRobMMS/wheels.size();
143  state.dVelLatMMS = dtempVelYRobMMS/wheels.size();
144 
145  }
146 
147 };
148 
150 public:
151  struct WheelParams {
153  };
154 
155  // Constructor
156  UndercarriageGeom(const std::vector<WheelParams> &params);
157 
158  // Get result of direct kinematics
159  virtual void calcDirect(PlatformState &state) const;
160 
161  // Set actual values of wheels (steer/drive velocity/position) (Istwerte)
162  virtual void updateWheelStates(const std::vector<WheelState> &states);
163 
164 private:
165  std::vector<boost::shared_ptr<WheelData> > wheels_;
166 };
167 
168 double limitValue(double value, double limit);
169 
170 template<typename T> class UndercarriageCtrlBase : public UndercarriageGeomBase {
171 public:
172  // Constructor
173  template<typename T2> UndercarriageCtrlBase(const std::vector<T2> &params){
174  for(typename std::vector<T2>::const_iterator it = params.begin(); it != params.end(); ++it){
175  wheels_.push_back(boost::make_shared<T>(*it));
176  }
177  }
178 
179  // Get result of direct kinematics
180  virtual void calcDirect(PlatformState &state) const {
182  }
183 
184  // Set actual values of wheels (steer/drive velocity/position) (Istwerte)
185  virtual void updateWheelStates(const std::vector<WheelState> &states) {
187  }
188  // Set desired value for Plattform Velocity to UndercarriageCtrl (Sollwertvorgabe)
189  void setTarget(const PlatformState &state) {
190  for(size_t i = 0; i < wheels_.size(); ++i){
191  wheels_[i]->setTarget(state);
192  }
193  }
194 
195  // Get set point values for the Wheels (including controller) from UndercarriangeCtrl
196  void calcControlStep(std::vector<WheelCommand> &commands, double dCmdRateS, bool reset) {
197  commands.resize(wheels_.size());
198 
199  for(size_t i = 0; i < wheels_.size(); ++i){
200  wheels_[i]->calcControlStep(commands[i], dCmdRateS, reset);
201  }
202  }
203 
204  void reset() {
205  for(size_t i = 0; i < wheels_.size(); ++i){
206  wheels_[i]->reset();
207  }
208  }
209 
210 protected:
211  std::vector<boost::shared_ptr<T> > wheels_;
212 };
213 
214 struct CtrlParams{
216 
219 };
220 
224 };
225 
226 struct CtrlData : public WheelData {
228 
229  double m_dAngGearSteerTargetRad; // choosen alternativ for steering angle
231 
232  // calculate inverse kinematics
233  void setTarget(const PlatformState &state);
234 
235  virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset);
236 
237  virtual void reset();
238 
239  template<typename P> CtrlData(const P &params)
240  : WheelData(params.geom), params_(params.ctrl) {
245  }
246 };
247 
248 class UndercarriageDirectCtrl : public UndercarriageCtrlBase < CtrlData > {
249 public:
251  UndercarriageDirectCtrl(const std::vector<WheelParams> &params) : UndercarriageCtrlBase(params) {}
252 };
253 
266 };
267 
272 };
273 
274 struct PosCtrlData : public CtrlData {
276 
277  // previous Commanded deltaPhi e(k-1)
278  // double m_dCtrlDeltaPhi; not used
279  // previous Commanded Velocity u(k-1)
281 
282  virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset);
283 
284  virtual void reset();
285 
287  : CtrlData(params), pos_params_(params.pos_ctrl),m_dCtrlVelCmdInt(0) {
292  }
293 };
294 
295 class UndercarriageCtrl : public UndercarriageCtrlBase < PosCtrlData > {
296 public:
298  void configure(const std::vector<PosCtrlParams> &pos_ctrl);
299  UndercarriageCtrl(const std::vector<WheelParams> &params) : UndercarriageCtrlBase(params) {}
300 };
301 
302 #endif
UndercarriageGeom
Definition: UndercarriageCtrlGeom.h:149
PosCtrlData
Definition: UndercarriageCtrlGeom.h:274
WheelData::getVelX
double getVelX() const
Definition: UndercarriageCtrlGeom.cpp:84
PosCtrlData::m_dCtrlVelCmdInt
double m_dCtrlVelCmdInt
Definition: UndercarriageCtrlGeom.h:280
WheelCommand
Definition: UndercarriageCtrlGeom.h:45
WheelState
Definition: UndercarriageCtrlGeom.h:39
PosCtrlParams
Definition: UndercarriageCtrlGeom.h:254
limitValue
double limitValue(double value, double limit)
Definition: UndercarriageCtrlGeom.cpp:151
UndercarriageGeomBase::calcDirect
static void calcDirect(PlatformState &state, const V &wheels)
Definition: UndercarriageCtrlGeom.h:121
UndercarriageGeom::updateWheelStates
virtual void updateWheelStates(const std::vector< WheelState > &states)
Definition: UndercarriageCtrlGeom.cpp:100
UndercarriageDirectCtrl::WheelParams
WheelCtrlParams WheelParams
Definition: UndercarriageCtrlGeom.h:250
WheelGeom::steer_name
std::string steer_name
Definition: UndercarriageCtrlGeom.h:50
UndercarriageDirectCtrl::UndercarriageDirectCtrl
UndercarriageDirectCtrl(const std::vector< WheelParams > &params)
Definition: UndercarriageCtrlGeom.h:251
WheelCtrlParams::geom
WheelGeom geom
Definition: UndercarriageCtrlGeom.h:222
UndercarriageCtrlBase::updateWheelStates
virtual void updateWheelStates(const std::vector< WheelState > &states)
Definition: UndercarriageCtrlGeom.h:185
UndercarriageGeomBase::~UndercarriageGeomBase
virtual ~UndercarriageGeomBase()
Definition: UndercarriageCtrlGeom.h:109
WheelCtrlPosParams
Definition: UndercarriageCtrlGeom.h:268
WheelGeom::dWheelYPosMM
double dWheelYPosMM
Definition: UndercarriageCtrlGeom.h:57
WheelCtrlPosParams::pos_ctrl
PosCtrlParams pos_ctrl
Definition: UndercarriageCtrlGeom.h:271
UndercarriageCtrlBase::setTarget
void setTarget(const PlatformState &state)
Definition: UndercarriageCtrlGeom.h:189
PosCtrlParams::dDPhiMax
double dDPhiMax
Definition: UndercarriageCtrlGeom.h:265
PosCtrlParams::dVirtM
double dVirtM
Definition: UndercarriageCtrlGeom.h:265
WheelData::m_dExWheelYPosMM
double m_dExWheelYPosMM
Definition: UndercarriageCtrlGeom.h:81
WheelGeom::dRadiusWheelMM
double dRadiusWheelMM
Definition: UndercarriageCtrlGeom.h:61
CtrlData::CtrlData
CtrlData(const P &params)
Definition: UndercarriageCtrlGeom.h:239
WheelCommand::WheelCommand
WheelCommand()
Definition: UndercarriageCtrlGeom.h:47
WheelData::m_dExWheelDistMM
double m_dExWheelDistMM
Definition: UndercarriageCtrlGeom.h:82
CtrlParams::dMaxDriveRateRadpS
double dMaxDriveRateRadpS
Definition: UndercarriageCtrlGeom.h:217
WheelData::getVelY
double getVelY() const
Definition: UndercarriageCtrlGeom.cpp:87
PosCtrlParams::dDDPhiMax
double dDDPhiMax
Definition: UndercarriageCtrlGeom.h:265
PlatformState::setVelY
void setVelY(const double val)
Definition: UndercarriageCtrlGeom.h:35
UndercarriageGeom::wheels_
std::vector< boost::shared_ptr< WheelData > > wheels_
Definition: UndercarriageCtrlGeom.h:165
UndercarriageCtrlBase::wheels_
std::vector< boost::shared_ptr< T > > wheels_
Definition: UndercarriageCtrlGeom.h:211
WheelData::state_
WheelState state_
Definition: UndercarriageCtrlGeom.h:74
PosCtrlData::PosCtrlData
PosCtrlData(const WheelCtrlPosParams &params)
Definition: UndercarriageCtrlGeom.h:286
UndercarriageCtrl::configure
void configure(const std::vector< PosCtrlParams > &pos_ctrl)
Definition: UndercarriageCtrlGeom.cpp:211
UndercarriageGeomBase
Definition: UndercarriageCtrlGeom.h:100
CtrlData::reset
virtual void reset()
Definition: UndercarriageCtrlGeom.cpp:205
PlatformState::getVelY
const double getVelY()
Definition: UndercarriageCtrlGeom.h:32
UndercarriageGeomBase::updateWheelStates
virtual void updateWheelStates(const std::vector< WheelState > &states)=0
WheelData::WheelData
WheelData(const WheelGeom &geom)
Definition: UndercarriageCtrlGeom.h:93
UndercarriageGeomBase::calcDirect
virtual void calcDirect(PlatformState &state) const =0
PlatformState::getVelX
const double getVelX()
Definition: UndercarriageCtrlGeom.h:31
UndercarriageCtrl::WheelParams
WheelCtrlPosParams WheelParams
Definition: UndercarriageCtrlGeom.h:297
WheelCtrlPosParams::geom
WheelGeom geom
Definition: UndercarriageCtrlGeom.h:269
UndercarriageGeom::WheelParams::geom
WheelGeom geom
Definition: UndercarriageCtrlGeom.h:152
PlatformState::setVelX
void setVelX(const double val)
Definition: UndercarriageCtrlGeom.h:34
WheelGeom::dSteerDriveCoupling
double dSteerDriveCoupling
Definition: UndercarriageCtrlGeom.h:59
CtrlParams::dWheelNeutralPos
double dWheelNeutralPos
Definition: UndercarriageCtrlGeom.h:215
PlatformState::dVelLongMMS
double dVelLongMMS
Definition: UndercarriageCtrlGeom.h:27
WheelCtrlPosParams::ctrl
CtrlParams ctrl
Definition: UndercarriageCtrlGeom.h:270
UndercarriageGeom::WheelParams
Definition: UndercarriageCtrlGeom.h:151
PosCtrlParams::dSpring
double dSpring
Definition: UndercarriageCtrlGeom.h:265
WheelData::geom_
WheelGeom geom_
Definition: UndercarriageCtrlGeom.h:66
WheelData::m_dExWheelXPosMM
double m_dExWheelXPosMM
Definition: UndercarriageCtrlGeom.h:80
PosCtrlData::calcControlStep
virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset)
Definition: UndercarriageCtrlGeom.cpp:183
CtrlData::calcControlStep
virtual void calcControlStep(WheelCommand &command, double dCmdRateS, bool reset)
Definition: UndercarriageCtrlGeom.cpp:162
UndercarriageCtrl::UndercarriageCtrl
UndercarriageCtrl(const std::vector< WheelParams > &params)
Definition: UndercarriageCtrlGeom.h:299
UndercarriageGeom::UndercarriageGeom
UndercarriageGeom(const std::vector< WheelParams > &params)
Definition: UndercarriageCtrlGeom.cpp:90
PlatformState::PlatformState
PlatformState()
Definition: UndercarriageCtrlGeom.h:37
PosCtrlParams::dDamp
double dDamp
Definition: UndercarriageCtrlGeom.h:265
WheelData::m_dExWheelAngRad
double m_dExWheelAngRad
Definition: UndercarriageCtrlGeom.h:83
UndercarriageCtrlBase::reset
void reset()
Definition: UndercarriageCtrlGeom.h:204
WheelData::mergeRotRobRadS
static double mergeRotRobRadS(const WheelData &wheel1, const WheelData &wheel2)
Definition: UndercarriageCtrlGeom.cpp:69
WheelData
Definition: UndercarriageCtrlGeom.h:65
UndercarriageCtrlBase
Definition: UndercarriageCtrlGeom.h:170
WheelGeom::dWheelXPosMM
double dWheelXPosMM
Definition: UndercarriageCtrlGeom.h:56
WheelData::dFactorVel
double dFactorVel
Definition: UndercarriageCtrlGeom.h:72
WheelState::dVelGearSteerRadS
double dVelGearSteerRadS
Definition: UndercarriageCtrlGeom.h:41
PlatformState
Definition: UndercarriageCtrlGeom.h:26
WheelGeom::dDistSteerAxisToDriveWheelMM
double dDistSteerAxisToDriveWheelMM
Definition: UndercarriageCtrlGeom.h:62
WheelState::dVelGearDriveRadS
double dVelGearDriveRadS
Definition: UndercarriageCtrlGeom.h:40
CtrlData::m_dAngGearSteerTargetRad
double m_dAngGearSteerTargetRad
Definition: UndercarriageCtrlGeom.h:229
UndercarriageDirectCtrl
Definition: UndercarriageCtrlGeom.h:248
WheelCtrlParams
Definition: UndercarriageCtrlGeom.h:221
PosCtrlData::reset
virtual void reset()
Definition: UndercarriageCtrlGeom.cpp:207
WheelGeom::drive_name
std::string drive_name
Definition: UndercarriageCtrlGeom.h:50
UndercarriageCtrl
Definition: UndercarriageCtrlGeom.h:295
CtrlData
Definition: UndercarriageCtrlGeom.h:226
UndercarriageCtrlBase::calcDirect
virtual void calcDirect(PlatformState &state) const
Definition: UndercarriageCtrlGeom.h:180
CtrlParams
Definition: UndercarriageCtrlGeom.h:214
UndercarriageCtrlBase::UndercarriageCtrlBase
UndercarriageCtrlBase(const std::vector< T2 > &params)
Definition: UndercarriageCtrlGeom.h:173
PosCtrlData::pos_params_
PosCtrlParams pos_params_
Definition: UndercarriageCtrlGeom.h:275
WheelCommand::dAngGearSteerRadDelta
double dAngGearSteerRadDelta
Definition: UndercarriageCtrlGeom.h:46
UndercarriageCtrlBase::calcControlStep
void calcControlStep(std::vector< WheelCommand > &commands, double dCmdRateS, bool reset)
Definition: UndercarriageCtrlGeom.h:196
WheelState::WheelState
WheelState()
Definition: UndercarriageCtrlGeom.h:43
CtrlData::params_
CtrlParams params_
Definition: UndercarriageCtrlGeom.h:227
WheelCtrlParams::ctrl
CtrlParams ctrl
Definition: UndercarriageCtrlGeom.h:223
WheelData::updateState
void updateState(const WheelState &state)
Definition: UndercarriageCtrlGeom.cpp:53
CtrlParams::dMaxSteerRateRadpS
double dMaxSteerRateRadpS
Definition: UndercarriageCtrlGeom.h:218
PlatformState::dRotRobRadS
double dRotRobRadS
Definition: UndercarriageCtrlGeom.h:29
WheelData::m_dVelWheelMMS
double m_dVelWheelMMS
Definition: UndercarriageCtrlGeom.h:85
UndercarriageGeom::calcDirect
virtual void calcDirect(PlatformState &state) const
Definition: UndercarriageCtrlGeom.cpp:96
CtrlData::setTarget
void setTarget(const PlatformState &state)
Definition: UndercarriageCtrlGeom.cpp:104
UndercarriageGeomBase::updateWheelStates
static void updateWheelStates(V &wheels, const std::vector< WheelState > &states)
Definition: UndercarriageCtrlGeom.h:112
WheelState::dAngGearSteerRad
double dAngGearSteerRad
Definition: UndercarriageCtrlGeom.h:42
WheelGeom
Definition: UndercarriageCtrlGeom.h:49
PlatformState::dVelLatMMS
double dVelLatMMS
Definition: UndercarriageCtrlGeom.h:28
CtrlData::m_dVelGearDriveTargetRadS
double m_dVelGearDriveTargetRadS
Definition: UndercarriageCtrlGeom.h:230


cob_omni_drive_controller
Author(s): Christian Connette, Mathias Lüdtke
autogenerated on Mon May 1 2023 02:44:36