MX-28/64 firmware issues

I had a problem with my Poppy and I saw the firmware had an issue… I updated it to version 39 (instead of 36)
But it seems pypot does not work with this version of firmware.
Have you noticed that ?
Is there a way to downgrade the dynamixel firmware ?

Can you be more specific, what is the error message ?
Can you still change settings in the Robotis Dynamixel wizzard ?

Yes,

When I declare the robot, It says a warning : changing the angle limits, but it does this each time. When I plug the motor on dynamixel wizard (the last version) I see the angle limit was not changed.
I saw that the version 39 of the MX-28 firmware is different of version 36 because of change of protocol and it handles the Dynamixel v2.0.
I am downloading ROBOPLUS v1.0.26.0 to get the good firmware. unfortunately, it takes 3hours to download the software (150Mo).
It is unbelievable knowing the price of such a motor !!!

Hello,

Robotis has recently integrated the 2.0 protocol for the MX series. The motors firmware version is the 39 to use the 2.0 protocol, maybe that’s why it does not work… (cf. robotis).

Thanks. Did you try to update your Poppy motors to this version ?

not yet. But I want to try to integrate the 2.0 protocol. Maybe I’ll try after Innorobo :wink:

Good catch @damiend ! I opened an issue on pypot bug tracker.
Thanks for the report @Thot !

I went further :
to upgrade the Dynamixel to the good version (36 for MX-28 or 64), download the Roboplus 1.1.3
http://en.robotis.com/BlueAD/board.php?bbs_id=downloads&mode=view&bbs_no=1132559&page=2&key=&keyword=&sort=&scate=SOFTWARE

BUT DO NOT UPGRADE IF YOU ARE PROPOSED TO !!

1 Like

Thanks for the trick!

@Thot, have you tried to modify the robot configuration json file to tell that the motors use 2.0 protocol ? Maybe Pypot can communicate to the motors as for the XL-320 ?

I think my problem with Poppy is harder. I lost the control of the legs… The motors are sometimes not scanned and when they are scanned, their positions are updated every 30 seconds…

Does anyone already have this ? When I use Dynamixel wizard, I can scan and access all the motors

@DESKTOP-CHVOCBV[C:poppy_server]|1> import pypot.dynamixel
@DESKTOP-CHVOCBV[C:poppy_server]|2> a = pypot.dynamixel.D
pypot.dynamixel.Dxl320IO      pypot.dynamixel.DxlIO         pypot.dynamixel.DxlXL320Motor
pypot.dynamixel.DxlAXRXMotor  pypot.dynamixel.DxlMXMotor
pypot.dynamixel.DxlError      pypot.dynamixel.DxlSRMotor
@DESKTOP-CHVOCBV[C:poppy_server]|2> a = pypot.dynamixel.DxlIO("
894 possibilities found. Display? (y/n): n
@DESKTOP-CHVOCBV[C:poppy_server]|2> a = pypot.dynamixel.DxlIO("COM5")
@DESKTOP-CHVOCBV[C:poppy_server]|3> a.scan(range(30))
---------------------------------------------------------------------------
DxlCommunicationError                     Traceback (most recent call last)
<ipython-input-3-13e3d5610c6e> in <module>()
----> 1 a.scan(range(30))

C:\Python27\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in scan(self, ids)
    219     def scan(self, ids=range(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:\Python27\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:\Python27\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in _send_packet(self, instruction_packet, wait_for_status_packet, error_handler, _force_lock)
    525
    526         if not error_handler:
--> 527             return self.__real_send(instruction_packet, wait_for_status_packet, _force_lock)
    528
    529         try:

C:\Python27\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in __real_send(self, instruction_packet, wait_for_status_packet, _force_lock)
    493                 return
    494
--> 495             status_packet = self.__real_read(instruction_packet, _force_lock=True)
    496
    497             logger.debug('Receiving %s', status_packet,

C:\Python27\lib\site-packages\pypot\dynamixel\io\abstract_io.pyc in __real_read(self, instruction_packet, _force_lock)
    515             except ValueError:
    516                 msg = 'could not parse received data {}'.format(bytearray(data))
--> 517                 raise DxlCommunicationError(self, msg, instruction_packet)
    518
    519             return status_packet

DxlCommunicationError: could not parse received data   after sending DxlPingPacket(id=0)

Is this with the motors you have just flashed ?

I had a similar problem once. The communication with the motors were good using low level or dynamixel wizard, but did not work with pypot.

To solve that, I changed most of the cables that were (very) old. It was better but it sometimes continues bugging.
Actually, the problem has changed and became a “ID not found …” for one motor, an error that appears from times to times. I guess this motor was “damaged” but functional. I never found any issue on this motor in low level (power supply test, update firmware…), so I just replaced it, and since it has been replaced, I do not have this issue anymore.

I know that it looks like a very particular situation, but maybe it can give you some ideas.

Otherwise, the only case I know when this issue happens is when it does not work in low level too, and that means that a motor (or several) is in cause (same ID, broken motor, bad configuration…)