NiryoOne V2 Dynamixel xl430-w250 not reaching goal position2018-10-16T17:05:11+00:00

Forums Niryo One Troubleshooting NiryoOne V2 Dynamixel xl430-w250 not reaching goal position

Tagged: , ,

Viewing 11 posts - 1 through 11 (of 11 total)
  • Author
    Posts
  • FindingNiryo
    Participant
    Post count: 44

    Moving between stored positions in NiryoOne Studio robot V2 Joints #4 & #5 (xl430-w250) do not reach zero.

    moving all joints from -45 degrees toward zero: joints 4&5 consistently stop at -0.023.

    moving all joints from +45 degrees toward zero: joint #4 consistently stops at 0.030, #5 consistently stops at 0.012.

    I would expect zero to be an exactly reachable joint position (joints 1,2,3, & 6 achieve it).

    Dynamixel xl430-w250 resolution is 4095/rev = about 0.001534 radians.

    Worst case error should be about +/- 0.000767 radians.

    Edouard Renard
    Keymaster
    Post count: 110

    I’ve also checked that on a robot we have here, and can confirm a lack of precision for Dynamixel XL430. We give the correct value to the motor from the code, so it seems that the motors have some looseness from the inside. This is likely to happen, due to the gear ratio of the motor (258.5 : 1), and the fact that the material used is plastic instead of full metal for gears (for example, the RX Dxl motors use full metal gears).

    We will try to investigate this further this week and see if there is something that can be done.

    FindingNiryo
    Participant
    Post count: 44

    There seems to be a dead band where Dynamixel joints will not move unless target is at least 0.015 radians offset from current position.

    The only parameter that corresponds to this behavior is: Moving (122)

    http://support.robotis.com/en/product/actuator/dynamixel_x/xl_series/xl430-w250.htm#bookmark31

    Moving Threshold(24) Default values of 10 units .088 degrees per second comes out to 0.015344 radians.

    The documentation indicates this will not trip while seeking goal, but it’s a suspicious coincidence.

    The other possibility is that that the I component of PID is not allowing the motor to settle on small offsets.

    Where are Dynamixel parameters (mode, min/max velocity,Moving Threshold(24), PID, etc.) set?

    Edouard Renard
    Keymaster
    Post count: 110

    I’ve made the test by using XL-430 motors only, without plugin anything on them, and can confirm the 0.015 radian precision.

    The issue happens when motors are used with the robot, as additional load is applied on them.

    Nice observation with the Moving Treshold (24). However, from what i understand, it will only set the Moving (122) to 1 or 0, and this value is just used by the user. This is not something used by the motor itself.

    We are planning to work soon on the internal PID of the motor to see if we can maybe improve it for Niryo One. Getting the same precision as the motor itself with no load would be great.

    The Dynamixel parameters you speak about are not currently set from the Niryo One program on RPi. If you want to change them by yourself, you have 2 choices:

    – use a device like USB2Dynamixel and connect the motors to your computer

    – or improve and use the Dxl driver we created on the Raspberry Pi (here)

    FindingNiryo
    Participant
    Post count: 44

    Dynamixel Workbench can be installed on the Raspberry Pi following these instructions:

    http://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_workbench/

    Should provide control of all the Dynamixel parameters, and easy testing of robot performance.

    would need to configure single_monitor.launchNeed correct device name and baud rate

    <arg name=”device_name” default=”/dev/ttyUSB0″/>
    <arg name=”baud_rate” default=”57600″/>

    Edouard Renard
    Keymaster
    Post count: 110

    We’ve also tried this Dynamixel Workbench package and confirm it works great (but for only one motor at a time).

    However if you are running this on the Raspberry Pi 3B, you’ll have to change:

    – device_name:  /dev/serial0

    – baud_rate: 1000000 (we have configured all motors to communicate at 1Mbps)

    (those info can be found here)

    Note that we’ll soon provide a script so you can directly change the Dynamixel registers on Niryo One, from the Raspberry Pi. So you won’t have to install any other package. I’ll make an update on the forum when the code is available on github.

    FindingNiryo
    Participant
    Post count: 44

    Looking forward to Niryo tools to set PID, in the mean time I tried building Dynamixel Workbench with catkin_make but get errors:

    [85%] Building CXX object dynamixel-workbench/dynamixel_workbench_single_manager_gui/CMakeFiles/dynamixel_workbench_single_manager_gui.dir/src/main.cpp

    c++:internal compiler error: Killed (program cc1plus)

    [91%] Build target dynamixel_workbench_single_manager_gui Makefile:138: receipe for target ‘all’ failed make:***[all] Error 2

    invoking “make -j4 -l4” failed

    Any assistance would be appreciated.

    • This reply was modified 2 weeks, 3 days ago by  FindingNiryo.
    FindingNiryo
    Participant
    Post count: 44

    Trying to run dynamixel_workbench

    with:

    sudo chmod a+rw /dev/serial0

    roslaunch my_dynamixel_workbench_tutorial single_manager.launch

    * /baud_rate: 1000000

    * /device_name: /dev/serial0

    result: “Please Check USB Port authorization and Baudrate [ex : 9600, 57600, 115200, 1000000, 2000000]

    …Failed to find dynamixel

     

    Edouard Renard
    Keymaster
    Post count: 110

    c++:internal compiler error: Killed (program cc1plus)

    invoking “make -j4 -l4” failed

    This is because the Raspberry Pi 3B can’t keep up with 4 cores, and the program crashes. You have to use “catkin_make -j2 -l2” so it will use only two cores 🙂

    …Failed to find dynamixel

    In fact, the Dynamixel workbench works well when you have a USB to Dxl adapter (there is a microcontroller on the adapter which handles the half-duplex communication). On the Raspberry Pi 3B + custom Niryo RPi shield, this won’t work like that. We added some hardware component to handle the half-duplex comm.

    So we had to modify the dynamixel_sdk to work with our setup, you can find the modification here on github.

    Conclusion -> either you

    1. Try to use dynamixel workbench with our customized dynamixel_sdk

    2. Get a USB to Dxl adapter

    3. Or wait a few days before we publish a script that will allow you to directly change (during runtime) the values inside Dynamixel motor registers 🙂

     

    FindingNiryo
    Participant
    Post count: 44

    Looking forward to option #3.  I see updates in Github repository for Dynamixel messages.

    Is there a general announcement with update instructions and/or example command line ROS message.

    Will this functionality be incorporated into NiryoOne Studio?

    Edouard Renard
    Keymaster
    Post count: 110

    Yes, we’ve just published 2 command line tools to setup and send custom value to any register you want ! You can find the tools here.

    I think we’ll make a general announcement will all new features when we release the 2.1.0 tag

Viewing 11 posts - 1 through 11 (of 11 total)

You must be logged in to reply to this topic.