1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /** \file itasc/ControlledObject.cpp
- * \ingroup itasc
- */
- /*
- * ControlledObject.cpp
- *
- * Created on: Jan 5, 2009
- * Author: rubensmits
- */
- #include "ControlledObject.hpp"
- namespace iTaSC {
- ControlledObject::ControlledObject():
- Object(Controlled),m_nq(0),m_nc(0),m_nee(0)
- {
- // max joint variable = 0.52 radian or 0.52 meter in one timestep
- m_maxDeltaQ = e_scalar(0.52);
- }
- void ControlledObject::initialize(unsigned int _nq,unsigned int _nc, unsigned int _nee)
- {
- assert(_nee >= 1);
- m_nq = _nq;
- m_nc = _nc;
- m_nee = _nee;
- if (m_nq > 0) {
- m_Wq = e_identity_matrix(m_nq,m_nq);
- m_qdot = e_zero_vector(m_nq);
- }
- if (m_nc > 0) {
- m_Wy = e_scalar_vector(m_nc,1.0);
- m_ydot = e_zero_vector(m_nc);
- }
- if (m_nc > 0 && m_nq > 0)
- m_Cq = e_zero_matrix(m_nc,m_nq);
- // clear all Jacobian if any
- m_JqArray.clear();
- // reserve one more to have a zero matrix handy
- if (m_nq > 0)
- m_JqArray.resize(m_nee+1, e_zero_matrix(6,m_nq));
- }
- ControlledObject::~ControlledObject() {}
- const e_matrix& ControlledObject::getJq(unsigned int ee) const
- {
- assert(m_nq > 0);
- return m_JqArray[(ee>m_nee)?m_nee:ee];
- }
- double ControlledObject::getMaxTimestep(double& timestep)
- {
- e_scalar maxQdot = m_qdot.array().abs().maxCoeff();
- if (timestep*maxQdot > m_maxDeltaQ) {
- timestep = m_maxDeltaQ/maxQdot;
- }
- return timestep;
- }
- }
|