Revision 45345055 src/server/reflexxes_motion_generator.cpp
src/server/reflexxes_motion_generator.cpp | ||
---|---|---|
60 | 60 |
float max_speed, float max_accel){ |
61 | 61 |
assert(dof < dof_count); |
62 | 62 |
|
63 |
//set up reflexxes:
|
|
63 |
// set up reflexxes control loop
|
|
64 | 64 |
reflexxes_position_input->TargetPositionVector->VecData[dof] = target; |
65 | 65 |
reflexxes_position_input->SelectionVector->VecData[dof] = true; |
66 | 66 |
reflexxes_position_input->MaxVelocityVector->VecData[dof] = max_speed; |
67 | 67 |
reflexxes_position_input->MaxAccelerationVector->VecData[dof] = max_accel; |
68 | 68 |
reflexxes_position_input->TargetVelocityVector->VecData[dof] = 0.0; //target speed is zero (really?) |
69 | 69 |
|
70 |
/* |
|
71 |
// feed back current pos & velocity |
|
72 |
// as we have to deal with some latency we will forecast the current |
|
73 |
// position using the old speed, position and the latency: |
|
74 |
float time_diff = humotion::Timestamp::now().to_seconds() - timestamp.to_seconds(); |
|
75 |
if (time_diff > 0.1) { |
|
76 |
printf("WARNING: timestamp of position data older than 0.1s (measured %fs)!\n",time_diff); |
|
77 |
printf(" this should never happen! clocks not in sync?\n"); |
|
78 |
} |
|
79 |
// assuming this time difference is small we will now do a linear |
|
80 |
// approximation of the current position based on these old measurements |
|
81 |
// under the assumption that the speed is "constant" during this short period |
|
82 |
float position_now = current_position + time_diff * current_speed; |
|
83 |
|
|
84 |
|
|
85 |
reflexxes_position_input->CurrentPositionVector->VecData[dof] = position_now; |
|
86 |
reflexxes_position_input->CurrentVelocityVector->VecData[dof] = current_speed; |
|
87 |
*/ |
|
88 |
|
|
89 | 70 |
// safety: libreflexxes does not like zero accellerations... |
90 | 71 |
if (reflexxes_position_input->MaxAccelerationVector->VecData[dof] == 0.0){ |
91 | 72 |
reflexxes_position_input->MaxAccelerationVector->VecData[dof] = 0.0001; |
... | ... | |
106 | 87 |
} |
107 | 88 |
} |
108 | 89 |
|
109 |
//feed back values:
|
|
90 |
// feed back values
|
|
110 | 91 |
for(int i=0; i<dof_count; i++){ |
111 | 92 |
reflexxes_position_input->CurrentPositionVector->VecData[i] = reflexxes_position_output->NewPositionVector->VecData[i]; |
112 | 93 |
reflexxes_position_input->CurrentVelocityVector->VecData[i] = reflexxes_position_output->NewVelocityVector->VecData[i]; |
Also available in: Unified diff