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
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 !!
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…)