2
* Robot3D Physical realistic 3D simulator for robots
4
* @license GNU Lesser General Public License
7
* @author Anne C. van Rossum
9
#include <srActuator/multiActuator.h>
14
MultiActuator::MultiActuator(dtCore::RefPtr<ActuatorBase> firstElement, const std::string name) :
15
ActuatorBase(name, "MultiActuator")
18
myActuators.push_back(firstElement);
20
// add parameters of the first element to our parameter list
21
myParameters = firstElement->getParameterList();
26
MultiActuator::~MultiActuator() {
27
// TODO Auto-generated destructor stub
32
//! add actuator to container
33
void MultiActuator::addActuator(dtCore::RefPtr<ActuatorBase> actuator) {
35
myActuators.push_back(actuator);
39
void MultiActuator::registerActuator() {
41
for (unsigned int i=0; i < getNumActuators(); i++) {
42
ActuatorBase::jointActuatorMap.insert(std::pair<dJointID, ActuatorBase*>(this->getHinge(i), this));
48
//! Sets ode parameters for the actuators in the list. For more Information, see www.ode.org/ode-latest-user-guide.org.
49
inline void MultiActuator::setODEParameter(int parameter, float value) {
51
for (unsigned int i=0; i<myActuators.size(); i++)
52
myActuators[i]->setODEParameter(parameter, value);
56
float MultiActuator::getODEParameter(int parameter) {
58
return myActuators[0]->getODEParameter(parameter);
64
void MultiActuator::setParameter(const std::string &name, ParameterReturnValue parameter) {
66
for (unsigned int i=0; i<myActuators.size(); i++)
67
myActuators[i]->setParameter(name, parameter);
71
void MultiActuator::getParameter(const std::string &name, ParameterReturnValue parameter) {
73
myActuators[0]->getParameter(name, parameter);
77
//returns the jointID of the hinge.
78
inline dJointID MultiActuator::getHinge() {
80
printf("Warning: This is a meta actuator. To get a hinge, use the getActuators function. Returning hinge of the first actuator \n");
81
return myActuators[0]->getHinge();
85
unsigned int MultiActuator::getNumActuators() {
87
return myActuators.size();
91
dJointID MultiActuator::getHinge(unsigned int index) {
93
printf("Warning: This is a meta actuator. To get a hinge, use the getActuators function. Returning hinge of the first actuator \n");
94
return ((index < myActuators.size()) ? myActuators[index]->getHinge() : NULL);
97
//! Setting a velocity.
98
/*! Motor tries to reach this velocity as fast as possible, but is constrained
101
void MultiActuator::setVel(float v, float deltaTime) {
103
for (unsigned int i=0; i<myActuators.size(); i++)
104
myActuators[i]->setVel(v, deltaTime);
108
//! Setting a torque directly to a joint, can't be greater than maxTorque.
109
void MultiActuator::setTorque(float torque, float deltaTime) {
111
for (unsigned int i=0; i<myActuators.size(); i++)
112
myActuators[i]->setTorque(torque, deltaTime);
116
//! Returns the current velocity of the joint.
117
float MultiActuator::getVel(float deltaTime) {return myActuators[0]->getVel(deltaTime);};
119
//! Returns the current position of the joint.
120
float MultiActuator::getPos() {return myActuators[0]->getPos();};
122
//! activate/deactivate the actuator
123
void MultiActuator::setActive(bool activate) {
125
for (unsigned int i=0; i<myActuators.size(); i++)
126
myActuators[i]->setActive(active);
130
//! will be called in the TickLocal function of the robotActorBase class
131
void MultiActuator::update(float deltaSimTime) {
133
for (unsigned int i=0; i<myActuators.size(); i++)
134
myActuators[i]->update(deltaSimTime);