SCL  1.0
Standard Control Library : Control, dynamics, physics, and simulation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Friends Macros Groups Pages
CRobot.hpp
1 /* This file is part of scl, a control and simulation library
2 for robots and biomechanical models.
3 
4 scl is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 3 of the License, or (at your option) any later version.
8 
9 Alternatively, you can redistribute it and/or
10 modify it under the terms of the GNU General Public License as
11 published by the Free Software Foundation; either version 2 of
12 the License, or (at your option) any later version.
13 
14 scl is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18 
19 You should have received a copy of the GNU Lesser General Public
20 License and a copy of the GNU General Public License along with
21 scl. If not, see <http://www.gnu.org/licenses/>.
22 */
23 /* \file CRobot.hpp
24  *
25  * Created on: Dec 27, 2010
26  *
27  * Copyright (C) 2010
28  *
29  * Author: Samir Menon <smenon@stanford.edu>
30  */
31 
32 #ifndef CROBOT_HPP_
33 #define CROBOT_HPP_
34 
35 #include <scl/DataTypes.hpp>
36 
37 #include <scl/Singletons.hpp>
38 #include <scl/robot/data_structs/SRobot.hpp>
39 #include <scl/dynamics/CDynamicsBase.hpp>
40 #include <scl/control/CControllerBase.hpp>
41 
42 #include <sutil/CMappedList.hpp>
43 
44 #include <string>
45 #include <vector>
46 #include <fstream>
47 
48 namespace scl
49 {
63  class CRobot
64  {
65  public:
66  // **********************************************************************
67  // Primary Computation functions
68  // **********************************************************************
69 
72  void computeServo();
73 
76  void computeDynamics();
77 
81 
87  void integrateDynamics();
88 
89 
90  // **********************************************************************
91  // Initialization helper functions
92  // **********************************************************************
93 
96  sBool initFromDb(std::string arg_robot_name,
97  CDynamicsBase* arg_dynamics,
98  CDynamicsBase* arg_integrator);
99 
109  sBool init(std::string arg_robot_name,
110  CDynamicsBase* arg_dynamics,
111  CDynamicsBase* arg_integrator,
112  SRobotParsed *arg_robot,
113  SRobotIO *arg_io_data,
114  std::vector<SControllerBase*>& arg_ctrls);
115 
118 
119  // **********************************************************************
120  // Robot helper functions
121  // Runtime overrides for config file settings
122  // **********************************************************************
123 
125  SRobot* getData() { return &data_; }
126 
130  void setFlagApplyDamping(sBool arg_flag)
131  { data_.parsed_robot_data_->flag_apply_gc_damping_ = arg_flag; }
132 
135  sBool setDamping(const Eigen::VectorXd& arg_d);
136 
141  { data_.parsed_robot_data_->flag_apply_gc_pos_limits_ = arg_flag; }
142 
145  sBool setGcPosLimits(const Eigen::VectorXd& arg_max,
146  const Eigen::VectorXd& arg_min);
147 
151  { data_.parsed_robot_data_->flag_apply_actuator_force_limits_ = arg_flag; }
152 
155  sBool setActuatorForceLimits(const Eigen::VectorXd& arg_max,
156  const Eigen::VectorXd& arg_min);
157 
160  void setFlagControllerOn(sBool arg_flag)
161  { data_.parsed_robot_data_->flag_controller_on_ = arg_flag; }
162 
163  // **********************************************************************
164  // Robot state helper functions
165  // **********************************************************************
166 
167  const Eigen::VectorXd& getGeneralizedCoordinates()
168  { return data_.io_data_->sensors_.q_; }
169 
170  const Eigen::VectorXd& getGeneralizedVelocities()
171  { return data_.io_data_->sensors_.dq_; }
172 
173  const Eigen::VectorXd& getGeneralizedAccelerations()
174  { return data_.io_data_->sensors_.ddq_; }
175 
176  const Eigen::VectorXd& getGeneralizedForcesMeasured()
177  { return data_.io_data_->sensors_.force_gc_measured_; }
178 
179  const Eigen::VectorXd& getGeneralizedForcesCommanded()
180  { return data_.io_data_->actuators_.force_gc_commanded_; }
181 
182  void setGeneralizedCoordinates(const Eigen::VectorXd& arg_q)
183  { data_.io_data_->sensors_.q_ = arg_q; }
184 
185  void setGeneralizedVelocities(const Eigen::VectorXd& arg_dq)
186  { data_.io_data_->sensors_.dq_ = arg_dq; }
187 
188  void setGeneralizedAccelerations(const Eigen::VectorXd& arg_ddq)
189  { data_.io_data_->sensors_.ddq_ = arg_ddq; }
190 
191  void setGeneralizedForcesMeasured(const Eigen::VectorXd& arg_f)
192  { data_.io_data_->sensors_.force_gc_measured_ = arg_f; }
193 
194  void setGeneralizedForcesCommanded(const Eigen::VectorXd& arg_f)
195  { data_.io_data_->actuators_.force_gc_commanded_ = arg_f; }
196 
197  void setGeneralizedCoordinatesToZero()
198  { data_.io_data_->sensors_.q_.setZero(data_.parsed_robot_data_->dof_); }
199 
200  void setGeneralizedVelocitiesToZero()
201  { data_.io_data_->sensors_.dq_.setZero(data_.parsed_robot_data_->dof_); }
202 
203  void setGeneralizedAccelerationsToZero()
204  { data_.io_data_->sensors_.ddq_.setZero(data_.parsed_robot_data_->dof_); }
205 
206  void setGeneralizedForcesMeasuredToZero()
207  { data_.io_data_->sensors_.force_gc_measured_.setZero(data_.parsed_robot_data_->dof_); }
208 
209  void setGeneralizedForcesCommandedToZero()
210  { data_.io_data_->actuators_.force_gc_commanded_.setZero(data_.parsed_robot_data_->dof_); }
211 
212  // **********************************************************************
213  // Controller helper functions
214  // **********************************************************************
215 
229  sBool addController(SControllerBase* arg_ctrl_ds);
230 
232  CControllerBase* getControllerCurrent();
233 
236  sBool setControllerCurrent(std::string arg_ctrl_name);
237 
239  SControllerBase* getControllerDataStruct(const std::string& arg_ctrl_name);
240 
243  { return static_cast<const CDynamicsBase*>(dynamics_); }
244 
250  sBool getProportionalGain(Eigen::VectorXd& ret_gains,
251  const std::string& arg_ctrl_name="",
252  const std::string& arg_task_name="");
253 
259  sBool getDerivativeGain(Eigen::VectorXd& ret_gains,
260  const std::string& arg_ctrl_name="",
261  const std::string& arg_task_name="");
262 
268  sBool getIntegralGain(Eigen::VectorXd& ret_gains,
269  const std::string& arg_ctrl_name="",
270  const std::string& arg_task_name="");
271 
277  sBool setProportionalGain(const Eigen::VectorXd& arg_kp,
278  const std::string& arg_ctrl_name="",
279  const std::string& arg_task_name="");
280 
286  sBool setDerivativeGain(const Eigen::VectorXd& arg_kv,
287  const std::string& arg_ctrl_name="",
288  const std::string& arg_task_name="");
289 
295  sBool setIntegralGain(const Eigen::VectorXd& arg_ki,
296  const std::string& arg_ctrl_name="",
297  const std::string& arg_task_name="");
298 
299  // **********************************************************************
300  // Logging functions
301  // **********************************************************************
302 
306  sBool setLogFile(const std::string &arg_file);
307 
310  sBool logState(bool arg_log_gc=true, bool arg_log_gc_matrices=true,
311  bool arg_log_task_matrices=false);
312 
313  // **********************************************************************
314  // Constructors etc.
315  // **********************************************************************
316 
318  CRobot();
319 
321  virtual ~CRobot();
322 
323  private:
333 
334  SDatabase *db_;
335 
341 
347 
350 
353 
355  std::string log_file_name_;
356  std::fstream log_file_;
357  sBool logging_on_;
358  };
359 
360 }
361 
362 #endif /* CROBOT_HPP_ */
Eigen::VectorXd force_gc_commanded_
Definition: SRobotIO.hpp:93
CControllerBase * getControllerCurrent()
Definition: CRobot.cpp:457
sBool setLogFile(const std::string &arg_file)
Definition: CRobot.cpp:799
CControllerBase * ctrl_current_
Definition: CRobot.hpp:352
std::string log_file_name_
Definition: CRobot.hpp:355
Definition: SRobotIO.hpp:107
Eigen::VectorXd ddq_
Definition: SRobotIO.hpp:59
sBool getProportionalGain(Eigen::VectorXd &ret_gains, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:532
SRobotActuators actuators_
Definition: SRobotIO.hpp:117
sBool setControllerCurrent(std::string arg_ctrl_name)
Definition: CRobot.cpp:472
const CDynamicsBase * getControllerDynamics()
Definition: CRobot.hpp:242
SControllerBase * getControllerDataStruct(const std::string &arg_ctrl_name)
Definition: CRobot.cpp:504
Definition: SRobotParsed.hpp:51
sBool addController(SControllerBase *arg_ctrl_ds)
Definition: CRobot.cpp:378
sBool logState(bool arg_log_gc=true, bool arg_log_gc_matrices=true, bool arg_log_task_matrices=false)
Definition: CRobot.cpp:830
Definition: CMappedList.hpp:85
Definition: SDatabase.hpp:239
CRobot()
Definition: CRobot.cpp:883
void setFlagControllerOn(sBool arg_flag)
Definition: CRobot.hpp:160
void setFlagApplyGcPosLimits(sBool arg_flag)
Definition: CRobot.hpp:140
Definition: SRobot.hpp:54
sBool setActuatorForceLimits(const Eigen::VectorXd &arg_max, const Eigen::VectorXd &arg_min)
Definition: CRobot.cpp:361
sutil::CMappedList< std::string, CControllerBase * > ctrl_
Definition: CRobot.hpp:349
SRobot * getData()
Definition: CRobot.hpp:125
Definition: CDynamicsBase.hpp:55
sBool getIntegralGain(Eigen::VectorXd &ret_gains, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:626
void computeServo()
Definition: CRobot.cpp:51
sBool setGcPosLimits(const Eigen::VectorXd &arg_max, const Eigen::VectorXd &arg_min)
Definition: CRobot.cpp:347
bool sBool
Definition: DataTypes.hpp:54
sBool setIntegralGain(const Eigen::VectorXd &arg_ki, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:757
SRobot data_
Definition: CRobot.hpp:332
virtual ~CRobot()
Definition: CRobot.cpp:894
void setFlagApplyActuatorForceLimits(sBool arg_flag)
Definition: CRobot.hpp:150
Eigen::VectorXd dq_
Definition: SRobotIO.hpp:56
sBool initFromDb(std::string arg_robot_name, CDynamicsBase *arg_dynamics, CDynamicsBase *arg_integrator)
Definition: CRobot.cpp:184
sUInt dof_
Definition: SRobotParsed.hpp:83
sBool has_been_init_
Definition: SObject.hpp:72
Definition: CControllerBase.hpp:59
CDynamicsBase * integrator_
Definition: CRobot.hpp:346
sBool getDerivativeGain(Eigen::VectorXd &ret_gains, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:579
SRobotSensors sensors_
Definition: SRobotIO.hpp:113
CDynamicsBase * dynamics_
Definition: CRobot.hpp:340
sBool setDerivativeGain(const Eigen::VectorXd &arg_kv, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:714
void setFlagApplyDamping(sBool arg_flag)
Definition: CRobot.hpp:130
void computeDynamics()
Definition: CRobot.cpp:74
Definition: CRobot.hpp:63
void computeNonControlOperations()
Definition: CRobot.cpp:90
sBool init(std::string arg_robot_name, CDynamicsBase *arg_dynamics, CDynamicsBase *arg_integrator, SRobotParsed *arg_robot, SRobotIO *arg_io_data, std::vector< SControllerBase * > &arg_ctrls)
Definition: CRobot.cpp:232
sBool setDamping(const Eigen::VectorXd &arg_d)
Definition: CRobot.cpp:336
Eigen::VectorXd q_
Definition: SRobotIO.hpp:53
sBool setProportionalGain(const Eigen::VectorXd &arg_kp, const std::string &arg_ctrl_name="", const std::string &arg_task_name="")
Definition: CRobot.cpp:671
Eigen::VectorXd force_gc_measured_
Definition: SRobotIO.hpp:62
sBool hasBeenInit()
Definition: CRobot.hpp:117
sBool flag_apply_gc_damping_
Definition: SRobotParsed.hpp:94
void integrateDynamics()
Definition: CRobot.cpp:109