Page 4 of 4 FirstFirst 1234
Results 31 to 39 of 39

Thread: Servos resetting IDs?

  1. #31

    Re: Servos resetting IDs?

    Hi,
    I wonder if there is been any news with the Servos resetting itself to ID 1.
    I was having this problem so many times, running the Phantom Phoneix Code,
    that I switched now to bench External Power Supply that can provides up to 18A (12v),
    but still sometimes one servo reset itself (every day) , usually this happens, just after turning the BOT on.

    I was thinking as a "temporary" solution, to avoid the SERVO ID 1, and modify the code, to scan for servo 1, and move it to the missing SERVO ID .

    any suggestions or news, im listening

    cheers
    Ezequiel

  2. #32

    Re: Servos resetting IDs?

    I still run into this from time to time and also thought it would be a good idea to not have a servo #1, as to make it easier to detect and correct. Could easily add code to query the servos and see which ones don't respond and potentially update them. All of that code is currently in my ax12 test program (except to automatically reassign).

    Kurt

  3. #33

    Re: Servos resetting IDs?

    My start-up code sends out a broadcast "lock the EEPROM" message the first thing it does. This has kept the IDs from moving around on my MX servos. It might work for you, too?
    The draw-back is that I have to power cycle the servos if I actually want to change some EEPROM parameter.

  4. #34
    Join Date
    Sep 2010
    Location
    ಠ_ಠ
    Posts
    2,300
    Images
    27
    Rep Power
    278

    Re: Servos resetting IDs?

    Quote Originally Posted by ezex View Post
    Hi,
    I wonder if there is been any news with the Servos resetting itself to ID 1.
    I was having this problem so many times, running the Phantom Phoneix Code,
    that I switched now to bench External Power Supply that can provides up to 18A (12v),
    but still sometimes one servo reset itself (every day) , usually this happens, just after turning the BOT on.

    I was thinking as a "temporary" solution, to avoid the SERVO ID 1, and modify the code, to scan for servo 1, and move it to the missing SERVO ID .

    any suggestions or news, im listening

    cheers
    Ezequiel
    Where in the chain is the servo located? If it is at the end of a long chain of servos, the others servos might cause too large a voltage drop during that initial application of power. Also, are you sending any dynamixel packets during that initial power-up?


    Quote Originally Posted by jwatte View Post
    My start-up code sends out a broadcast "lock the EEPROM" message the first thing it does. This has kept the IDs from moving around on my MX servos. It might work for you, too?
    The draw-back is that I have to power cycle the servos if I actually want to change some EEPROM parameter.
    And it only works if the ID reset is not triggered by a brown-out, which seems to be the most frequent suspect as adding supplemental power and/or better monitoring battery voltage tends to greatly reduce its occurrence.
    Please pardon the pedantry... and the profanity... and the convoluted speech pattern...
    "You have failed me, Brain!"
    bleh
    more bleh

  5. #35

    Re: Servos resetting IDs?

    I agree that sending the "lock EEPROM" command is too late if the problem is a brown-out during start-up.
    If the problem is a brown-out during actual movement or any time later, then it's effective.
    Making sure you have enough juice, and keep each string short, is generally a good idea for performance, not just ID stability, so I definitely agree with that advice!

  6. #36

    Re: Servos resetting IDs?

    If it is like my setup (which is what was in the documentation), there are only 3 servo per chain. (i.e. the servos of one leg). Each of the Coxa servos plug either directly into the hub on the Arbotix controller, or into the other hub that is connected to the Arbotix controller.

    It was it did not appear like there was any real pattern on which one might get reset. Sometimes it is a Coxa, other times a tibia or Femur.

    If it is typically right at startup, maybe we should put in some form of stagger into the startup code.

  7. #37

    Re: Servos resetting IDs?

    Hi,

    I will try the LOCK EPROM command,

    Sometimes the Self Reset servo is the first one on the chain, sometimes in the end, etc, I didn't, count each time it happens, so I do not have a real statistics, but is random.

    At least i know is not ONLY in the ARBOTIX CODE, but happens to KurtE & KevinO using the code from the RPi.

    I already changed the servo ID 1 to 19, with only this change at least, is very easy to find the Faulty Servo, connect to USB2Dynamixel and fix.
    and I will see to make an autodetect and correct function, this will work when ONLY one SERVO reseted, I never happens to me with more than 1, but read here up to 3 servos, rigth ?

    I have a servo that dissapear on any scan, was not reset to id 1, but stopped responding, I still have to try to put a new firmware on it , and see if revives. I have to replace it with a backup one for now.

    "... Making sure you have enough juice, and keep each string short, is generally a good idea for performance, not just ID stability, so I definitely agree with that advice! ..."
    Will keep this in mind, thank you.

    As soon I have some autodetect/fix script, I will share it.

    eZe

  8. #38

    Re: Servos resetting IDs?

    Not using ID 1 seems smart, and once you've mentioned it, totally obvious :-)

    Another thing I do is to broadcast the "max torque" value as something smaller (200 out of 1024 typically) before sending the "torque on" broadcast, and then ramping up the torque over a few seconds. This may even out the current draw. Also, the fact that I send "lock EEPROM" before I send "torque enable" should help with the start-up current draw brown-out sequencing.

  9. #39

    Re: Servos resetting IDs?

    Hi,
    I Changed my servo ID 1 to 19, so I can detect and servo that was automatically reset.

    here is some part of the code, if anyone would like to use or checkit.
    Im using the phoenix code ported by KurtE, but I guess can be implemented easily on stock firmware too.
    Im nost sure about the delays, etc, any suggestions welcome.
    also changed NUMSERVOS to 19 (instead of 18),

    Code:
    hex_cfg.h :
    #define cLFCoxaPin 19 //BEFORE ID 1 Front Left leg Hip Horizontal
    #define AXMonit
    
    
    Phoenix_Driver_AX12.h :
    #define NUMSERVOS (NUMSERVOSPERLEG*6)+1
    
    And added the following lines of code on ServoDriver:Init(void)
    
    //-----------------------------------------------------------------------
    // Try to recover from SERVO RESET to ID 1
    // will work only with 1 servo reset at the same time
    //--------------------------------------------------------------------
    #ifdef AXMonit 
    DFTSerial.write("Checking for Servo ID 1\n\r");
    word w1;
    w1 = ax12GetRegister(1,AX_PRESENT_POSITION_L,2); // Check If SERVO ID =1 EXIST (USING PRESENT POSITION, 
    delay(50); // IF SOMETHING BETTER, CHANGE IT )
    if (w1== 0xffff ) { w1 = ax12GetRegister(1,AX_PRESENT_POSITION_L,2); delay(50); } // RETRY IF NOT FOUND
    if (w1!= 0xffff ) { //IF SERV0 ID 1 IS FOUND
         DFTSerial.println("Error Servo ID 1 is Present");
    // CHECK FOR WHICH SERVO IS MISSING (ONLY 1 ALLOWED)-->if we can get a UNIQUE SN will be better
    int miss =0;
    word missid;
         for(int i=0;i<NUMSERVOS-1;i++){
         byte id = pgm_read_byte(&cPinTable[i]); //Obtain ID from cPinTable position i
         word w2;
         w2 = ax12GetRegister(id,AX_PRESENT_POSITION_L,2); // Get present position from Servo id
    if (w2== 0xffff ) { w2 = ax12GetRegister(id,AX_PRESENT_POSITION_L,2); delay(50); } // RETRY IF NOT FOUND 
    if (w2== 0xffff ) { //if servo is missing count & save
    miss++; missid=id;
    DFTSerial.print("Missing ID:");
         DFTSerial.print(missid,DEC);
    DFTSerial.print(" of ");DFTSerial.println(miss,DEC);
    } 
         delay(25); 
         }
    if (miss==1) { //IF SERVO ID 1 AND ONLY 1 SERVO ID MISSING WILL REPLACE IT
    //check if this servo is really missing (second check, in case was delayed only)
    word w2;
    w2 = ax12GetRegister(missid,AX_PRESENT_POSITION_L,2);delay(100); 
    if (w2== 0xffff) { 
    DFTSerial.println("recovering missing Servo ID");
         word wx = 1;
         ax12SetRegister(wx,AX_ID,missid); //TEST, MOVE ID 19 to 1
         ax12ReadPacket(6); // git the response...
    }
    }
    } //end if Servo ID 1 is found
    // now will send LOCK EPROM command
    word wx = 254; // BROADCAST
    int epromlock =1;
    DFTSerial.println("Sending eprom lock command");
    ax12SetRegister(wx,AX_LOCK,epromlock);
    ax12ReadPacket(6); // git the response... 
    delay(25);
    
    #endif
    Last edited by ezex; 09-05-2013 at 08:33 AM.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Servos
    By byi in forum Mech Warfare
    Replies: 8
    Last Post: 07-15-2010, 11:51 PM
  2. Question(s) what servos
    By Grand Robot Master in forum DYNAMIXEL & Robot Actuators
    Replies: 21
    Last Post: 06-10-2009, 08:48 AM
  3. Hot Servos
    By Grand Robot Master in forum DYNAMIXEL & Robot Actuators
    Replies: 1
    Last Post: 04-17-2009, 12:06 PM
  4. Question(s) best servos for the job??
    By Bug57 in forum Robotics General Discussion
    Replies: 37
    Last Post: 12-16-2008, 07:21 PM
  5. HITEC Servos: Can the OEM RN-1 Servos handle 7.4V?
    By MYKL in forum DYNAMIXEL & Robot Actuators
    Replies: 10
    Last Post: 06-23-2008, 04:39 PM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •