@@ -16,8 +16,9 @@ class PositionManager {
16
16
stepsToAccelerate(stepsToAccelerate), decelerationSteps(decelerationSteps), req(req) {}
17
17
18
18
// Motor control functions
19
+ inline void holdPosition (float position);
19
20
inline void holdPositionDuration (float position, float duration);
20
- inline void homing (float & commandedPosition, float & currentPosition);
21
+ inline bool homing (float & commandedPosition, float & currentPosition);
21
22
22
23
inline void performAcceleration (float & commandedPosition, float & currentPosition);
23
24
inline void performCruising (float & commandedPosition, float & currentPosition);
@@ -53,13 +54,13 @@ void PositionManager::performAcceleration(float& commandedPosition, float& curre
53
54
54
55
float currentVelocity = 0 .0f ;
55
56
float accelerationPerStep = -maxSpeed / stepsToAccelerate; // Negative for reverse direction
56
- std::cout << " Reverse Acceleration Per Step: " << accelerationPerStep << std::endl;
57
+ std::cout << " Acceleration Per Step: " << accelerationPerStep << std::endl;
57
58
58
59
for (int i = 1 ; i <= stepsToAccelerate; i++) {
59
60
currentVelocity += accelerationPerStep;
60
61
float newPosition = accelPositions.back () + currentVelocity;
61
62
accelPositions.push_back (newPosition);
62
- std::cout << " Current Reverse Velocity : " << currentVelocity << " \t New Reverse Position : " << newPosition << std::endl;
63
+ std::cout << " CurrentVelocity : " << currentVelocity << " \t NewPosition : " << newPosition << std::endl;
63
64
}
64
65
65
66
for (size_t i = 0 ; i < accelPositions.size (); i++) {
@@ -71,7 +72,7 @@ void PositionManager::performAcceleration(float& commandedPosition, float& curre
71
72
currentPosition = controller_state[0 ];
72
73
torques.push_back (controller_state[2 ]);
73
74
}
74
- std::cout << " Reverse Step: " << i << " , Target: " << accelPositions[i]
75
+ std::cout << " Step: " << i << " , Target: " << accelPositions[i]
75
76
<< " , Actual: " << currentPosition << " \t Velocity" << controller_state[1 ] << std::endl;
76
77
}
77
78
}
@@ -88,7 +89,7 @@ void PositionManager::performCruising(float& commandedPosition, float& currentPo
88
89
currentPosition = controller_state[0 ];
89
90
torques.push_back (controller_state[2 ]);
90
91
}
91
- std::cout << " Reverse Cruising at position: " << currentPosition << " \t Velocity" << controller_state[1 ] << " \t Torque" << controller_state[2 ] << std::endl;
92
+ std::cout << " Cruising at position: " << currentPosition << " \t Velocity" << controller_state[1 ] << " \t Torque" << controller_state[2 ] << std::endl;
92
93
}
93
94
}
94
95
@@ -108,10 +109,10 @@ void PositionManager::performDeceleration(float& commandedPosition, float& curre
108
109
currentPosition = controller_state[0 ];
109
110
torques.push_back (controller_state[2 ]);
110
111
}
111
- std::cout << " Reverse Decelerating, step " << step + 1 << " : Position = " << controller_state[0 ]
112
+ std::cout << " Decelerating, step " << step + 1 << " : Position = " << controller_state[0 ]
112
113
<< " : Velocity = " << controller_state[1 ] << std::endl;
113
114
if (currentVelocity >= 0 ) { // Check for stopping condition
114
- std::cout << " Reverse Deceleration complete at step " << step + 1 << std::endl;
115
+ std::cout << " Deceleration complete at step " << step + 1 << std::endl;
115
116
break ;
116
117
}
117
118
}
@@ -207,8 +208,21 @@ void PositionManager::holdPositionDuration(float position, float duration) {
207
208
}
208
209
}
209
210
211
+ // HOLD POSITION
212
+ void PositionManager::holdPosition (float position) {
213
+
214
+ struct timespec req = {0 , 1200 * 1000 };
215
+ controller.sendWriteCommand (position, 0.0 );
216
+ nanosleep (&req, NULL );
217
+ auto controller_state = controller.sendReadCommand ();
218
+ if (controller_state[0 ] >= 450 && controller_state[0 ] <= 550 ) {
219
+ torques.push_back (controller_state[2 ]);
220
+ }
221
+ // std::cout << "Position: " << controller_state[0] << " Velocity: " << controller_state[1] << " Torque: " << controller_state[2] << std::endl;
222
+ }
223
+
210
224
// HOMING
211
- void PositionManager::homing (float & commandedPosition, float & currentPosition) {
225
+ bool PositionManager::homing (float & commandedPosition, float & currentPosition) {
212
226
std::cout << " Starting Homing..." << std::endl;
213
227
controller.sendRezeroCommand (500.0 ); // sets the current position to 500.0
214
228
int index = 0 ;
@@ -233,7 +247,7 @@ void PositionManager::homing(float& commandedPosition, float& currentPosition) {
233
247
auto controller_state = controller.sendReadCommand ();
234
248
torques.push_back (controller_state[2 ]);
235
249
}
236
- break ;
250
+ return false ;
237
251
}
238
252
}
239
253
// Check if the button is pressed
@@ -248,7 +262,7 @@ void PositionManager::homing(float& commandedPosition, float& currentPosition) {
248
262
commandedPosition = 500 .0f ;
249
263
currentPosition = 500 .0f ;
250
264
std::cout << " HOMED" << std::endl;
251
- return ;
265
+ return true ;
252
266
} // End HOMING
253
267
254
268
#endif // POSITION_MANAGER_H
0 commit comments