Skip to content

Commit 7f47aa8

Browse files
authored
Fix: Also write run time when doing sync action (not only position). (#48)
1 parent dee6b44 commit 7f47aa8

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

src/Braccio++.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class BraccioClass
8080
void positions(float * buffer);
8181
void positions(float & a1, float & a2, float & a3, float & a4, float & a5, float & a6);
8282

83-
inline void speed(speed_grade_t const speed_grade) { _servos.setTime(SmartServoClass::BROADCAST, speed_grade); }
83+
inline void speed(speed_grade_t const speed_grade) { _servos.setTime(speed_grade); }
8484
inline void speed(int const id, speed_grade_t const speed_grade) { _servos.setTime(id, speed_grade); }
8585

8686
inline void disengage(int const id = SmartServoClass::BROADCAST) { _servos.disengage(id); }

src/lib/motors/SmartServo.cpp

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,9 @@ void SmartServoClass::begin()
193193
writeByteCmd(BROADCAST, REG(SmartServoRegister::SERVO_MOTOR_MODE), 1);
194194
writeByteCmd(BROADCAST, REG(SmartServoRegister::TORQUE_SWITCH) ,1);
195195
_positionMode = PositionMode::IMMEDIATE;
196+
197+
for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++)
198+
_targetSpeed[idToArrayIndex(i)] = 1000;
196199
}
197200

198201
void SmartServoClass::setPosition(uint8_t const id, float const angle)
@@ -231,13 +234,15 @@ void SmartServoClass::synchronize()
231234
_txPacket.length = MAX_TX_PAYLOAD_LEN;
232235
_txPacket.instruction = CMD(SmartServoOperation::SYNC_WRITE);
233236
_txPacket.payload[0] = REG(SmartServoRegister::TARGET_POSITION_H);
234-
_txPacket.payload[1] = 2;
237+
_txPacket.payload[1] = 4;
235238
int index = 2;
236239

237240
for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++) {
238241
_txPacket.payload[index++] = i;
239-
_txPacket.payload[index++] = _targetPosition[idToArrayIndex(i)] >>8;
242+
_txPacket.payload[index++] = _targetPosition[idToArrayIndex(i)]>>8;
240243
_txPacket.payload[index++] = _targetPosition[idToArrayIndex(i)];
244+
_txPacket.payload[index++] = _targetSpeed[idToArrayIndex(i)]>>8;
245+
_txPacket.payload[index++] = _targetSpeed[idToArrayIndex(i)];
241246
}
242247
sendPacket();
243248
}
@@ -254,9 +259,18 @@ void SmartServoClass::setTorque(uint8_t const id, bool const torque)
254259
writeByteCmd(id, REG(SmartServoRegister::TORQUE_SWITCH), torque ? 1 : 0);
255260
}
256261

262+
void SmartServoClass::setTime(uint16_t const time)
263+
{
264+
mbed::ScopedLock<rtos::Mutex> lock(_mtx);
265+
for (int i = MIN_MOTOR_ID; i <= MAX_MOTOR_ID; i++)
266+
_targetSpeed[idToArrayIndex(i)] = time;
267+
writeWordCmd(BROADCAST, REG(SmartServoRegister::RUN_TIME_H), time);
268+
}
269+
257270
void SmartServoClass::setTime(uint8_t const id, uint16_t const time)
258271
{
259272
mbed::ScopedLock<rtos::Mutex> lock(_mtx);
273+
if ((id >= MIN_MOTOR_ID) && (id <= MAX_MOTOR_ID)) _targetSpeed[idToArrayIndex(id)] = time;
260274
writeWordCmd(id, REG(SmartServoRegister::RUN_TIME_H), time);
261275
}
262276

src/lib/motors/SmartServo.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ class SmartServoClass
7575
void setMaxAngle(uint16_t const max_angle);
7676
void setMaxAngle(uint8_t const id, uint16_t const max_angle);
7777

78+
void setTime(uint16_t const time);
7879
void setTime(uint8_t const id, uint16_t const time);
7980

8081
void center(uint8_t const id, uint16_t const position);
@@ -97,7 +98,7 @@ class SmartServoClass
9798
static int constexpr NUM_MOTORS = 6;
9899
static float constexpr MAX_ANGLE = 315.0f;
99100

100-
static int idToArrayIndex(int const id) { return (id - 1); }
101+
static size_t idToArrayIndex(size_t const id) { return (id - 1); }
101102

102103
private:
103104

@@ -140,6 +141,8 @@ class SmartServoClass
140141
uint8_t _rxBuf[MAX_RX_PAYLOAD_LEN];
141142
uint8_t _rxLen;
142143
uint16_t _targetPosition[NUM_MOTORS];
144+
uint16_t _targetSpeed[NUM_MOTORS];
145+
143146
PositionMode _positionMode;
144147
};
145148

0 commit comments

Comments
 (0)