Skip to content

Commit cb87a59

Browse files
committed
Bugfix: Runtime is in milliseconds, not seconds.
1 parent 7acbf71 commit cb87a59

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

Diff for: src/lib/motors/SmartServo.cpp

+13-2
Original file line numberDiff line numberDiff line change
@@ -227,8 +227,19 @@ void SmartServoClass::setPosition(uint8_t const id, float const angle)
227227
*/
228228
if (angular_velocity_deg_per_sec > MAX_ANGULAR_VELOCITY_deg_per_sec)
229229
{
230-
float const limited_runtime_sec = abs_position_diff_deg / MAX_ANGULAR_VELOCITY_deg_per_sec;
231-
setTime(id, static_cast<uint16_t>(limited_runtime_sec));
230+
float const limited_runtime_sec = abs_position_diff_deg / MAX_ANGULAR_VELOCITY_deg_per_sec;
231+
float const limited_runtime_ms = limited_runtime_sec * 1000.f;
232+
uint16_t const limited_runtime_ms_param = max(5000, static_cast<uint16_t>(limited_runtime_ms));
233+
234+
if (_positionMode == PositionMode::IMMEDIATE)
235+
{
236+
mbed::ScopedLock<rtos::Mutex> lock(_mtx);
237+
writeWordCmd(id, REG(SmartServoRegister::RUN_TIME_H), limited_runtime_ms_param);
238+
}
239+
else if (_positionMode == PositionMode::SYNC)
240+
{
241+
_targetSpeed[idToArrayIndex(id)] = limited_runtime_ms;
242+
}
232243

233244
char msg[64] = {0};
234245
snprintf(msg, sizeof(msg), "targed = %0.2f, actual = %0.2f, diff = %0.2f, omega_vel = %0.2f",

0 commit comments

Comments
 (0)