Программирование на Dynamixel C: writeWord не будет изменять регистры, двигатели не будут двигаться - PullRequest
0 голосов
/ 19 сентября 2018

Я использую динаксельные двигатели 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, несмотря на то, что другие функции работают и следуют страницам учебникаЯ нашел.Надеюсь, я делаю что-то не так и легко исправить?

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...