source: proiecte/SIMEO/Simeo/src/SimeoEngine/ActuatorProvider.cpp @ 167

Last change on this file since 167 was 167, checked in by (none), 14 years ago

Simeo: added final project and also older proof of concept code.

We used Git for version control, so look at the Git repo
in SIMEO/Simeo/ for more info.

File size: 1.1 KB
Line 
1#include <stdio.h>
2#include "ActuatorProvider.h"
3
4
5ActuatorProvider::ActuatorProvider(Channel *chan, btHingeConstraint *joint, int orient)
6: XProvider(chan)
7{
8        m_joint = joint;
9        m_orient = orient;
10}
11
12ActuatorProvider::~ActuatorProvider()
13{
14}
15
16btHingeConstraint *ActuatorProvider::getConstraint()
17{
18        return m_joint;
19}
20
21int ActuatorProvider::getOrient()
22{
23        return m_orient;
24}
25
26void ActuatorProvider::updatePost()
27{
28        float angle;
29        float speed = 200.0;
30        float force = 1000.0;
31        m_chan->read(&angle, MPI_FLOAT, 1);
32        m_joint->enableAngularMotor(true, computeVelocity(m_joint->getHingeAngle(), btScalar(angle)) * speed, btScalar(force));
33}
34
35void ActuatorProvider::packData(channelData *data, int id)
36{
37        data->angle = m_joint->getHingeAngle();
38        data->maxAngle = m_joint->getUpperLimit();
39        data->minAngle = m_joint->getLowerLimit();
40        data->orient = m_orient;
41        data->type = ACTUATOR;
42}
43
44btScalar ActuatorProvider::computeVelocity(btScalar currentAngle, btScalar targetAngle) {
45
46        btScalar deltaAngle = targetAngle - currentAngle;
47
48        if(deltaAngle < 0)
49                deltaAngle += 2 * M_PI;
50
51        if(deltaAngle > M_PI)
52                deltaAngle -= 2 * M_PI;
53
54        return deltaAngle;
55}
Note: See TracBrowser for help on using the repository browser.