Я использую динаксельные двигатели XL и XM здесь:
http://support.robotis.com/en/product/actuator/dynamixel_x/xl_series/xl430-w250.htm http://support.robotis.com/en/product/actuator/dynamixel_x/xm_series/xm430-w350.htm
8 из них подключены последовательно.Я использую плату OpenCM9.04.
По какой-то причине я не могу двигать сервоприводы или изменять их скорости / скорости.Однако я могу точно читать позиции и включать / выключать крутящий момент.
Вот что не работает:
SerialUSB.print("min positions "); PrintAttribute(52, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("max positions "); PrintAttribute(48, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("operating mode "); PrintAttribute(11, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("goal velocity "); PrintAttribute(104, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("profile acceleration "); PrintAttribute(108, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("profile velocity "); PrintAttribute(112, NUMBER_SERVOS); SerialUSB.println("");
SerialUSB.print("goal position "); PrintAttribute(116, NUMBER_SERVOS); SerialUSB.println("");
for (int j = 1; j <= NUMBER_SERVOS; j++) {
Dxl.writeWord(j, 104, 0x100); int test_result = Dxl.getResult();
Dxl.writeWord(j, 108, 0x100);
Dxl.writeWord(j, 112, 0x100);
Dxl.writeWord(j, 116, 0x0);
SerialUSB.println("");
SerialUSB.print("Dxl.getResult() :: "); SerialUSB.print(test_result);
}
Моя функция печати работает нормально, и Dxl.getResult фактически выдает значение успеха.Но вывод никогда не меняется, несмотря на попытку записать слова (за исключением чтения позиции, если я вручную переместил его с отключенным моментом):
min positions
Attribute: 52: 0 / 0 / 0 / 0 / 0 / 0 / 0 / 0 /
max positions
Attribute: 48: 4095 / 4095 / 4095 / 4095 / 4095 / 4095 / 4095 / 4095 /
operating mode
Attribute: 11: 65283 / 65283 / 65283 / 65283 / 65283 / 65283 / 65283 / 65283 /
goal velocity
Attribute: 104: 350 / 350 / 350 / 350 / 350 / 350 / 415 / 415 /
profile acceleration
Attribute: 108: 0 / 0 / 0 / 0 / 0 / 0 / 0 / 0 /
profile velocity
Attribute: 112: 0 / 0 / 0 / 0 / 0 / 0 / 0 / 0 /
goal position
Attribute: 116: 1608 / 1776 / 2333 / 1956 / 2143 / 925 / 2056 / 2045 /
Значения для атрибутов 104,108,112,116 никогда не меняются, независимо от того, к чему я пытаюсь писатьих.И, конечно же, сервоприводы не двигаются физически.Тем не менее, следующий код работает очень хорошо ниже и включает / выключает крутящие моменты двигателей:
torque_toggle = torque_toggle * -1;
SerialUSB.print("torque_toggle: "); SerialUSB.print(torque_toggle);
int toggle = torque_toggle;
if (toggle == -1) toggle = 0;
// a - ID of dynamixel/servo
// b - register/address to write
// c - new value
//Dxl.writeByte(a, b, c);
// Ex: turn torque ON (addr 64 for our servos)
SerialUSB.println("");
SerialUSB.print("toggle: "); SerialUSB.print(toggle);
for (int j = 1; j <= NUMBER_SERVOS; j++) {
Dxl.writeByte(j, TORQUE_ENABLE, toggle);
Dxl.writeByte(j, LED_ENABLE, toggle);
int test_result = Dxl.getResult();
SerialUSB.println("");
SerialUSB.print("Dxl.getResult() :: "); SerialUSB.print(test_result);
}
Очень расстраивает, так как я не могу перемещать динаксели XL и XM, несмотря на то, что другие функции работают и следуют страницам учебникаЯ нашел.Надеюсь, я делаю что-то не так и легко исправить?
Спасибо за любую помощь.