How to check the broken motor


#1

Hello,

i have seen this Topic and have the same error.

my code is:

import time
import pypot.robot
from poppy_humanoid import PoppyHumanoid
poppy=PoppyHumanoid()
for m in poppy.motors:
    m.compliant = False
for m in poppy.motors:
    m.goto_position(0, 5)
time.sleep(5)

my error so like this:

SerialTimeoutException                    Traceback (most recent call last)
<ipython-input-2-8d9580d17572> in <module>()
      2 import pypot.robot
      3 from poppy_humanoid import PoppyHumanoid
----> 4 poppy=PoppyHumanoid()
      5 
      6 for m in poppy.motors:

C:\Anaconda\lib\site-packages\poppy\creatures\abstractcreature.pyc in __new__(cls, base_path, config, simulator, scene, host, port, id, use_snap, snap_host, snap_port, sync)
     71 
     72         else:
---> 73             poppy_creature = from_json(config, sync)
     74             poppy_creature.simulated = False
     75 

C:\Anaconda\lib\site-packages\pypot\robot\config.pyc in from_json(json_file, sync)
    198         config = json.load(f)
    199 
--> 200     return from_config(config, sync=sync)
    201 
    202 

C:\Anaconda\lib\site-packages\pypot\robot\config.pyc in from_config(config, strict, sync)
     54 
     55         attached_ids = [m.id for m in attached_motors]
---> 56         dxl_io = dxl_io_from_confignode(config, c_params, attached_ids, strict)
     57 
     58         check_motor_limits(config, dxl_io, motor_names)

C:\Anaconda\lib\site-packages\pypot\robot\config.pyc in dxl_io_from_confignode(config, c_params, ids, strict)
    103 
    104     if port == 'auto':
--> 105         port = pypot.dynamixel.find_port(ids, strict)
    106         logger.info('Found port {} for ids {}'.format(port, ids))
    107 

C:\Anaconda\lib\site-packages\pypot\dynamixel\__init__.pyc in find_port(ids, strict)
     48             try:
     49                 with DxlIOCls(port) as dxl:
---> 50                     founds = len(dxl.scan(ids))
     51 
     52                     if strict and founds == len(ids):

C:\Anaconda\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in scan(self, ids)
    219     def scan(self, ids=xrange(254)):
    220         """ Pings all ids within the specified list, by default it finds all the motors connected to the bus. """
--> 221         return [id for id in ids if self.ping(id)]
    222 
    223     # MARK: - Specific Getter / Setter

C:\Anaconda\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in ping(self, id)
    212 
    213         try:
--> 214             self._send_packet(pp, error_handler=None)
    215             return True
    216         except DxlTimeoutError:

C:\Anaconda\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in _send_packet(self, instruction_packet, wait_for_status_packet, error_handler, _force_lock)
    522 
    523         if not error_handler:
--> 524             return self.__real_send(instruction_packet, wait_for_status_packet, _force_lock)
    525 
    526         try:

C:\Anaconda\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in __real_send(self, instruction_packet, wait_for_status_packet, _force_lock)
    481 
    482             data = instruction_packet.to_string()
--> 483             nbytes = self._serial.write(data)
    484             if len(data) != nbytes:
    485                 raise DxlCommunicationError(self,

C:\Anaconda\lib\site-packages\serial\serialwin32.pyc in write(self, data)
    293                 err = win32.GetOverlappedResult(self.hComPort, self._overlappedWrite, ctypes.byref(n), True)
    294                 if n.value != len(data):
--> 295                     raise writeTimeoutError
    296             return n.value
    297         else:

SerialTimeoutException: Write timeout

maybe the motor ist demaged but not enough to be broken. I think maybe one or two motor in legs are broken. but how should i check this? In Herborist all Motor looks fine.
Thanks a lot

Best Regards
Shuting


#2

Hi Shuting,

have you checked if all the motors are well-configured ? Sometimes the motors can reset themselves. (Baudrate at 1M, return delay time at 0).

If they are not dead and well-configured, do they work in low-level ?

If yes, how are they supplied ? With 2 SMPS linked by a 4-wire connection ? If so, try to delete the 2 data wires on this connection (cut the D+ and D- wires).

Let me know if it helps you :wink:


#3

Hi Damlend,

Thanks a lot for you Answer. I think maybe the problem is power supplied. Sometimes it said also the NotImplementedError with

29     # MARK: - Motor errors
     30     def handle_input_voltage_error(self, instruction_packet):
---> 31         raise NotImplementedError

my power supplied is from a 12V transformer and the power connection is from transformer to head_y motor and then to other motor. now i plan to change the connection: head_y, l_shoulder_y, r_shoulder_y, l_hip_x, r_hip_x is directly connected to the transformer.
Is that the right way to solve the problem?

Best Regards
Shuting


#4

Do you mean that there is only 1 power supply for all the motors of the PoppyHumanoid, torso and legs ?

It must work. In fact, since there is 1 power supply for the upper part (arms, head, torso), and 1 power supply for the legs and hip, there must be no issue.

You’re not using the Robotis power supply with the SMPS ?