Results 1 to 5 of 5

Thread: Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

  1. Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

    Hi, I am currently trying to deploy the clam arm as found in the following site: http://correll.cs.colorado.edu/clam/


    We have set up a similar servo-motors in the same physical configuration and connected them also in a daisy chain. The only difference is that we are using an MX-105 instead of an EX-105.


    We have been working with 2 USB2Dynamixels from the start and also use an SMPS2Dynamixel board to provide power to the three AX-12 servos and the rest of the RX28/64/105 servos.


    We can connect to both the TTL and RS-485 through the ttyUSB* devices. However, we can only talk to the motors associated with the TTL protocol but not the RS-485 motors.


    We have set up the clam arm as follows: 8 sevos:
    1) AX-12A - shoulder pan (ID 1)
    2) MX-105 - shoulder pitch (ID 2)
    3) RX-64 - elbow pan (ID 3)
    4) RX-64 - elbow pitch (ID 4)
    5) RX-28 - Wrist pan (ID 5)
    6) RX-28 - Wrist pitch (ID 6)
    7) AX-12A - Gripper Roll (ID 7)
    8) AX-12A - Gripper Open (ID 8)


    The three AX-12A servos are connected to a single USB2Dynamixel on TTL, the rest of the dynamixels are connected to another USB2Dynamixel on RS_485. All of the servo's are getting power from the same line that goes out to an SMPS2Dynamixel and is set at 12V.


    In Windows, using Roboplus we have set up the baud rates of all servo's to 1,000,000 along with the IDs indicated above.


    In linux, we are currently using the following udev rules:
    SUBSYSTEMS=="usb",DRIVERS=="ftdi_sio",ATTRS{interf ace}=="FT232R USB UART",SYMLINK+="dynamixel_rs485"
    SUBSYSTEMS=="usb",DRIVERS=="ftdi_sio",ATTRS{interf ace}=="AX12",SYMLINK+="dynamixel_ttl"


    Also, this is a description of our drivers on our Linux Ubuntu 12.04 64 bit Precise System:
    >>$ dmesg | grep FTDI
    [ 2.152351] usb 3-1: Manufacturer: FTDI
    [ 2.288205] usb 3-2: Manufacturer: FTDI
    [ 9.257810] usbserial: USB Serial support registered for FTDI USB Serial Device
    [ 9.257848] ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
    [ 9.258016] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB0
    [ 9.258032] ftdi_sio 3-2:1.0: FTDI USB Serial Device converter detected
    [ 9.258171] usb 3-2: FTDI USB Serial Device converter now attached to ttyUSB1
    [ 523.473572] ftdi_sio ttyUSB1: FTDI USB Serial Device converter now disconnected from ttyUSB1
    [ 525.983273] ftdi_sio ttyUSB0: FTDI USB Serial Device converter now disconnected from ttyUSB0
    [ 529.516641] usb 3-2: Manufacturer: FTDI
    [ 529.519658] ftdi_sio 3-2:1.0: FTDI USB Serial Device converter detected
    [ 529.520022] usb 3-2: FTDI USB Serial Device converter now attached to ttyUSB0
    [ 556.802910] usb 3-1: Manufacturer: FTDI
    [ 556.805618] ftdi_sio 3-1:1.0: FTDI USB Serial Device converter detected
    [ 556.806003] usb 3-1: FTDI USB Serial Device converter now attached to ttyUSB1


    When we connect the motors we see the following:


    >>$ ls -la dynamixel_rs485
    lrwxrwxrwx 1 root root 7 Jun 24 12:54 dynamixel_rs485 -> ttyUSB1


    and


    >>$ ls -la ttyUSB*
    crwxrwxrwx 1 vmrguser vmrguser 188, 0 Jun 24 12:54 ttyUSB0
    crwxrwxrwx 1 vmrguser vmrguser 188, 1 Jun 24 12:54 ttyUSB1


    When I run my code I get these error messages:
    [ INFO] [1403586043.738854910]: port_rs485: Found 3 motors - 3 AX-12 [1, 7, 8], initialization complete.
    [ERROR] [1403586043.872589609]: Failed to open device /dev/dynamixel_ttl with error: (2) No such file or directory
    [INFO] [WallTime: 1403586044.086157] clam_controller_spawner_rs485: all services are up, starting 5 controllers...
    [tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
    [INFO] [WallTime: 1403586044.287487] arm_trajectory_controller_spawner: all services are up, starting 1 controllers...
    [INFO] [WallTime: 1403586044.292541] clam_controller_spawner_ttl: all services are up, starting 3 controllers...
    [tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
    [ERROR] [1403586044.402859653]: shoulder_pitch_controller: motor id 2 is not connected to port port_rs485 or it is connected and not responding
    [ERROR] [1403586044.402913446]: Initializing controller 'shoulder_pitch_controller' failed
    [ERROR] [WallTime: 1403586044.403243] clam_controller_spawner_rs485: service [/clam_controller_manager/load_controller] responded with an error:


    If I use the Read/Write Example for Linux I get the following:


    Succeed to open USB2Dynamixel!
    Press Enter key to continue!(press ESC and Enter to quit)


    COMM_RXCORRUPT: Incorrect status packet!
    Press Enter key to continue!(press ESC and Enter to quit)


    If I use the Sync/Write:
    The third servo (RX-64 Shoulder Pitch) moves and I get:
    512 955 68
    528 947 60
    544 938 53
    560 929 46
    576 919 40
    592 909 34
    607 899 28
    623 888 23
    639 877 18
    654 866 14
    670 854 11
    685 842 8
    700 830 5
    715 817 3
    729 804 1
    744 790 0
    758 777 0
    772 763 0
    786 749 0
    799 734 1
    812 720 2
    825 705 4
    838 690 7
    850 675 10
    862 659 13
    874 644 17
    885 628 21
    896 613 26
    906 597 32
    916 581 37
    926 565 44
    935 549 51
    944 533 58
    952 517 65
    960 501 74
    968 485 82
    975 469 91
    981 453 100
    988 437 110
    993 421 120
    998 405 131
    1003 389 142
    1007 374 153
    1011 358 165
    1014 343 177
    1017 328 189
    1019 313 202
    1021 298 215
    1022 284 228
    1023 270 242
    1023 256 255
    1023 242 270
    1022 228 284
    1021 215 298
    1019 202 313
    1017 189 328
    1014 177 343
    1011 165 358
    1007 153 374
    1003 142 389
    998 131 405
    993 120 421
    988 110 437
    981 100 453
    975 91 469
    968 82 485
    960 74 501
    952 65 517
    944 58 533
    935 51 549
    926 44 565
    916 37 581
    906 32 597
    896 26 613
    885 21 628
    874 17 644
    862 13 659
    850 10 675
    838 7 690
    825 4 705
    812 2 720
    799 1 734
    786 0 749
    772 0 763
    758 0 777
    744 0 790
    729 1 804
    715 3 817
    700 5 830
    685 8 842
    670 11 854
    654 14 866
    639 18 877
    623 23 888
    607 28 899
    592 34 909
    576 40 919
    560 46 929
    544 53 938
    528 60 947
    511 68 955
    495 76 963
    479 85 970
    463 94 977
    447 104 983
    431 114 989
    416 124 995
    400 135 1000
    384 146 1005
    369 157 1009
    353 169 1012
    338 181 1015
    323 193 1018
    308 206 1020
    294 219 1022
    279 233 1023
    265 246 1023
    251 260 1023
    237 274 1023
    224 289 1022
    211 303 1021
    198 318 1019
    185 333 1016
    173 348 1013
    161 364 1010
    149 379 1006
    138 395 1002
    127 410 997
    117 426 991
    107 442 986
    97 458 979
    88 474 972
    79 490 965
    71 506 958
    63 522 949
    55 538 941
    48 554 932
    42 570 923
    35 586 913
    30 602 903
    25 618 892
    20 634 881
    16 649 870
    12 665 858
    9 680 846
    6 695 834
    4 710 821
    2 725 808
    1 739 795
    0 753 781
    0 768 767
    0 781 753
    1 795 739
    2 808 725
    4 821 710
    6 834 695
    9 846 680
    12 858 665
    16 870 649
    20 881 634
    25 892 618
    30 903 602
    35 913 586
    42 923 570
    48 932 554
    55 941 538
    63 949 522
    71 958 506
    79 965 490
    88 972 474
    97 979 458
    107 986 442
    117 991 426
    127 997 410
    138 1002 395
    149 1006 379
    161 1010 364
    173 1013 348
    185 1016 333
    198 1019 318
    211 1021 303
    224 1022 289
    237 1023 274
    251 1023 260
    265 1023 246
    279 1023 233
    294 1022 219
    308 1020 206
    323 1018 193
    338 1015 181
    353 1012 169
    369 1009 157
    384 1005 146
    400 1000 135
    416 995 124
    431 989 114
    447 983 104
    463 977 94
    479 970 85
    495 963 76


    And I also get these types of message for lsusb:


    Bus 003 Device 009: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
    Couldn't open device, some information will be missing
    Device Descriptor:
    bLength 18
    bDescriptorType 1
    bcdUSB 2.00
    bDeviceClass 0 (Defined at Interface level)
    bDeviceSubClass 0
    bDeviceProtocol 0
    bMaxPacketSize0 8
    idVendor 0x0403 Future Technology Devices International, Ltd
    idProduct 0x6001 FT232 USB-Serial (UART) IC
    bcdDevice 6.00
    iManufacturer 1
    iProduct 2
    iSerial 3
    bNumConfigurations 1

    And, when I follow the ROS Tutorial on Dynamixels:

    http://wiki.ros.org/dynamixel_contro...ToDynamixelBus


    I can talk to the TTL motors but I cannot talk to the rs485 motors. I have tried baud rates of 1,000,000 and 57142.

  2. #2
    Join Date
    Sep 2010
    Location
    ಠ_ಠ
    Posts
    2,289
    Images
    27
    Rep Power
    276

    Re: Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

    I'm pretty sure your udev rules need work. Unless you already have other udev rules assigning one of the dongles the interface name 'AX12', then you are doing it very wrong. The two USB2Dynamixel dongles will be assigned their 'ttyUSB0' or 'ttyUSB1' device name based on the order of connection and enumeration, so the udev rules must use the 'ATTRS{serial}==' attribute tag to uniquely identify each USB2Dynamixel.
    To get the unique ID assigned to the FT232RL IC by FTDI, use
    Code:
    udevadm info -a -n /dev/ttyUSB0 | grep '{serial}' | head -n1 | sed 's/ //g'
    This resulted in a udev rule of
    Code:
    SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A700e5GR", SYMLINK+="ttyFTDI0"
    for my FTDI breakout board. I've had issues with it in the demo program of a DARwIn-OP, so YMMV. If it does not work, the FT232RL will always show up in '/dev/serial/by-id/' with the unique serial number (although the last two entries in the name may change?).
    Please pardon the pedantry... and the profanity... and the convoluted speech pattern...
    "You have failed me, Brain!"
    bleh

  3. Re: Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

    Thanks for the info. I will try and get back to you.

    However, I have also tried using ttyUSB0 and ttyUSB1 and paying attention to the order of connection just to see if I can talk to the rs485 servo's, but I still can't. Even when I just try talking to the rs485 serov's in linux, I can't (in Windows I can through Roboplus/Wizard).

  4. #4
    Join Date
    Sep 2010
    Location
    ಠ_ಠ
    Posts
    2,289
    Images
    27
    Rep Power
    276

    Re: Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

    What library are you using in your code to control the servos through the USB2Dynamixels? The Windows/Linux libraries released by Robotis cannot handle more than a single USB2Dynamixel at any time within a single program, and I am not up to date on the operation of other dynamixel libraries/nodes available for ros.
    Please pardon the pedantry... and the profanity... and the convoluted speech pattern...
    "You have failed me, Brain!"
    bleh

  5. #5
    danielespitia Guest

    Re: Manipulator arm with different servos. Can talk to small servos on TTL but cannot talk to larger servos on RS_485

    Hi Rojas70, I have an arm with AX-12 and RX-64 servos working with 2 USB2Dynamixel.

    The steps I followed were:

    1. Install the arbotix driver
    2. Install the turtlebot_arm package
    3. Copy the turtlebot_arm/turtlebot_arm_bringup/config/arm.yaml to arm1.yaml and arm2.yaml
    4. Edit the arm1.yaml for the TTL network
    5. Edit the arm2.yaml for the RS485 network
    6. Edit the turtlebot_arm/turtlebot_arm_bringup/launch/arm.launch and include both nodes (arm1.yaml and arm2.yaml).
    7. Run the arm.launch

    Here a copy of my files:

    arm1.yaml

    port: /dev/ttyUSB0
    baud: 1000000
    read_rate: 15
    write_rate: 25
    joints: {
    arm_shoulder_pan_joint: {id: 1, neutral: 512, max_angle: 180, min_angle: -60, max_speed: 150},
    arm_wrist_flex_joint: {id: 4, max_angle: 100, min_angle: -100, max_speed: 150},
    gripper_joint: {id: 5, max_speed: 150},
    }
    controllers: {
    arm_controller: {type: follow_controller, joints: [arm_shoulder_pan_joint, arm_wrist_flex_joint], action_name: arm_controller/follow_joint_$
    }

    arm2.yaml

    port: /dev/ttyUSB1
    baud: 1000000
    read_rate: 15
    write_rate: 25
    joints: {
    arm_shoulder_lift_joint: {id: 2, max_angle: 150, min_angle: -150, max_speed: 150},
    arm_elbow_flex_joint: {id: 3, max_angle: 150, min_angle: -150, max_speed: 150},
    }
    controllers: {
    arm_controller: {type: follow_controller, joints: [arm_shoulder_lift_joint, arm_elbow_flex_joint], action_name: arm_controller/follow_joint$
    }

    arm.launch

    <launch>
    <arg name="simulation" default="false"/>

    <param name="robot_description" command="$(find xacro)/xacro.py '$(find turtlebot_arm_description)/urdf/arm.urdf.xacro'"/>
    <node name="robot_state_pub" pkg="robot_state_publisher" type="robot_state_publisher"/>
    <node name="fake_joint_pub" pkg="turtlebot_arm_bringup" type="fake_joint_pub.py"/>

    <node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
    <rosparam file="$(find turtlebot_arm_bringup)/config/arm1.yaml" command="load"/>
    <param name="sim" value="$(arg simulation)"/>
    </node>

    <node name="arbotix1" pkg="arbotix_python" type="arbotix_driver" output="screen">
    <rosparam file="$(find turtlebot_arm_bringup)/config/arm2.yaml" command="load"/>
    <param name="sim" value="$(arg simulation)"/>
    </node>


    <node name="gripper_controller" pkg="arbotix_controllers" type="gripper_controller">
    <!--
    Gripper controller parameters:
    more than the physical properties of the gripper, these values are an ad-hoc configuration
    that works with arbotix_ros/gripper_controller/OneSideGripperModel
    -->
    <param name="model" value="singlesided"/>
    <param name="invert" value="true"/>
    <param name="center" value="0.07"/>
    <param name="pad_width" value="0.025"/>
    <param name="finger_length" value="0.03"/>
    <param name="min_opening" value="0.0"/>
    <param name="max_opening" value="0.054"/>
    </node>
    </launch>
    Last edited by danielespitia; 12-09-2014 at 03:47 PM.

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. Let's talk about bending metal
    By billyzelsnack in forum Mechanics / Construction
    Replies: 44
    Last Post: 12-16-2013, 12:17 AM
  2. Talk to Arduino with Visual Studio in C++
    By tuzzer in forum Mech Warfare
    Replies: 3
    Last Post: 04-16-2012, 01:48 PM
  3. Talk to my robot?
    By robotech in forum Software and Programming
    Replies: 12
    Last Post: 06-08-2009, 06:14 PM
  4. Let's Talk A/V
    By Adrenalynn in forum Mech Warfare
    Replies: 18
    Last Post: 02-08-2009, 10:01 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, 05: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
  •