Openmanipulator (with XM430-W350-R motors) serial connection fails

Use the following template to help create your post:

  1. What model(s) of servo are you using?
    I have 4 XM430-W350-R motors setup on openmanipulator-x with no gripper.
  2. Describe your control environment. Include the controller or interface, operating system (and version #) of your computer, and how you are powering your robot.
    -OS UBUNTU 16.04 LTS
    -ROS Kinetic
    -OpenCR
    -My robot is connected to OpenCR board

I have been following the instructions on the openmanipulator-x manual (OpenMANIPULATOR-X) webpage and i have done the instructions on step 4. As you can understand i am trying to control the robot via openCR and ROS. After the step 4 Option 2 : Use OpenCR as a communication interface instructions i proceed to 4.2.Basic Operation tab which is telling me to run this command ;


and when i run it i get the below result;

user@user:~/catkin_ws$ roslaunch open_manipulator_controller open_manipulator_controller.launch usb_port:=/dev/ttyACM0 baud_rate:=1000000
... logging to /home/user/.ros/log/83dd1302-132d-11ed-9d2c-507b9d65ae7d/roslaunch-user-8679.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://user:36199/

SUMMARY
========

PARAMETERS
 * /open_manipulator/control_period: 0.01
 * /open_manipulator/moveit_sample_duration: 0.05
 * /open_manipulator/planning_group_name: arm
 * /open_manipulator/using_moveit: False
 * /open_manipulator/using_platform: True
 * /rosdistro: kinetic
 * /rosversion: 1.12.17

NODES
  /
    open_manipulator (open_manipulator_controller/open_manipulator_controller)

auto-starting new master
process[master]: started with pid [8689]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to 83dd1302-132d-11ed-9d2c-507b9d65ae7d
process[rosout-1]: started with pid [8702]
started core service [/rosout]
process[open_manipulator-2]: started with pid [8705]
[PortHandlerLinux::SetupPort] Error opening serial port!
[ERROR] [DynamixelDriver] Failed to open the port!
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[PortHandlerLinux::SetupPort] Error opening serial port!
[ERROR] [DynamixelDriver] Failed to open the port!
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[ERROR] [TxRxResult] Failed transmit instruction packet!
[ERROR] groupSyncRead getdata failed
[ERROR] groupSyncRead getdata failed
[ERROR] groupSyncRead getdata failed
[open_manipulator-2] process has died [pid 8705, exit code -11, cmd /home/user/catkin_ws/devel/lib/open_manipulator_controller/open_manipulator_controller /dev/ttyUSB0 1000000 __name:=open_manipulator __log:=/home/user/.ros/log/83dd1302-132d-11ed-9d2c-507b9d65ae7d/open_manipulator-2.log].
log file: /home/user/.ros/log/83dd1302-132d-11ed-9d2c-507b9d65ae7d/open_manipulator-2*.log

I have no problem controlling the motors via Dynamixel Wizard 2.
Arduino ide seems to be uploading the OpenCR tool to the board correctly as shown in the instructions. Motor ID’s are 11, 12, 13, 14.
Baud rates all set to 1000000.
And here is the port ;

user@user:~$ ls -la /dev/ttyACM0 
crwxrwxrwx 1 root dialout 166, 0 Aug  3 16:34 /dev/ttyACM0

The result you are receiving from your command looks like a permissions issue accessing the serial port.

Try adding yourself to the dialout user group with this command:

sudo usermod -aG dialout YOUR_USER_ID 

Logging out and back in afterwards should update your permissions, then try running roslaunch again.

I apologize for the late reply, i was off laboratory. I did that before here is the groups that my user is in:

user@user:~$ groups
user root adm dialout cdrom sudo dip plugdev lpadmin sambashare

Still the same output.

I am updating the situation. I have changed the launch file that i am trying to run, turns out port value is set to /dev/ttyUSB0 there so i changed it and here is the new error message i am receiving :

user@user:~/catkin_ws$ roslaunch open_manipulator_controller open_manipulator_controller.launch usb_port:=/dev/ttyACM1 baud_rate:=1000000
... logging to /home/user/.ros/log/b791810a-1400-11ed-bab2-507b9d65ae7d/roslaunch-user-2029.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://user:33851/

SUMMARY
========

PARAMETERS
 * /open_manipulator/control_period: 0.01
 * /open_manipulator/moveit_sample_duration: 0.05
 * /open_manipulator/planning_group_name: arm
 * /open_manipulator/using_moveit: False
 * /open_manipulator/using_platform: True
 * /rosdistro: kinetic
 * /rosversion: 1.12.17

NODES
  /
    open_manipulator (open_manipulator_controller/open_manipulator_controller)

ROS_MASTER_URI=http://localhost:11311

process[open_manipulator-1]: started with pid [2052]
Joint Dynamixel ID : 11, Model Name : XM430-W350
Joint Dynamixel ID : 12, Model Name : XM430-W350
Joint Dynamixel ID : 13, Model Name : XM430-W350
Joint Dynamixel ID : 14, Model Name : XM430-W350
[ERROR] [TxRxResult] There is no status packet!
[ERROR] Please check your Dynamixel ID
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelDriver] Failed to get the Tool
[ERROR] [DynamixelWorkbench] Failed to change torque status!
[open_manipulator-1] process has died [pid 2052, exit code -11, cmd /home/user/catkin_ws/devel/lib/open_manipulator_controller/open_manipulator_controller /dev/ttyACM0 1000000 __name:=open_manipulator __log:=/home/user/.ros/log/b791810a-1400-11ed-bab2-507b9d65ae7d/open_manipulator-1.log].
log file: /home/user/.ros/log/b791810a-1400-11ed-bab2-507b9d65ae7d/open_manipulator-1*.log
all processes on machine have died, roslaunch will exit
shutting down processing monitor...
... shutting down processing monitor complete
done
 

And here is the content of my launch file ;

<launch>
  <arg name="use_robot_name"         default="open_manipulator"/>

  <arg name="dynamixel_usb_port"     default="/dev/ttyACM0"/>
  <arg name="dynamixel_baud_rate"    default="1000000"/>

  <arg name="control_period"         default="0.010"/>

  <arg name="use_platform"           default="true"/>

  <arg name="use_moveit"             default="false"/>
  <arg name="planning_group_name"    default="arm"/>
  <arg name="moveit_sample_duration" default="0.050"/>

  <group if="$(arg use_moveit)">
    <include file="$(find open_manipulator_controller)/launch/open_manipulator_moveit.launch">
      <arg name="robot_name"      value="$(arg use_robot_name)"/>
      <arg name="sample_duration" value="$(arg moveit_sample_duration)"/>
    </include>
  </group>

  <node name="$(arg use_robot_name)" pkg="open_manipulator_controller" type="open_manipulator_controller" output="screen" args="$(arg dynamixel_usb_port) $(arg dynamixel_baud_rate)">
      <param name="using_platform"       value="$(arg use_platform)"/>
      <param name="using_moveit"         value="$(arg use_moveit)"/>
      <param name="planning_group_name"  value="$(arg planning_group_name)"/>
      <param name="control_period"       value="$(arg control_period)"/>
      <param name="moveit_sample_duration"  value="$(arg moveit_sample_duration)"/>
  </node>

</launch>

A small edit there is torque on motors.

@padre

  1. The OpenCR’s port is /dev/ttyACM0" not “/dev/ttyUSB0”

  2. For the use of OpenCR as a comm interface, you are required to give an port option in your running command

roslaunch open_manipulator_controller open_manipulator_controller.launch usb_port:=/dev/ttyACM0 baud_rate:=1000000
  1. Return a launch file as default if you have modified it, to prevent any issues caused by unnecessary change.

  2. Can not find ID 15 (Gripper) in your resulting terminal. Check it the ID 15 is properly connected. Make sure that your power souece is really powering all actuators.

I dont think you understand the situation.

1- I changed the port value on launch file from /dev/ttyUSB0 to /dev/ttyACM0 not the other way around.
2- I am already giving a port option and a baudrate option if you look carefully you will see that i am executing the command like you sad.
3- The only thing that i have changed in the launch file is the port value which is /dev/ttyACM0 right now, everything else is default you can see my launch file in the previous message.
4- There is no gripper on my robot only 4 XM430-W350-R. Which i have told before. There is power on the system joints are not lose.
So what should i do now ?

Oh… I see. I missed that information. (I only read second comment and missed your command).

I have my own OpenManipulator so that, I am able to test my own one then see what it differ from yours (although I have been away from ROS for a long time).

Okay thank you for trying anyway. I will be waiting for your results.

Is there anyone else who can help ? I still have not solved the problem…

1 Like

Hi, I found that the issue is caused by the

  1. Regarding the Serial Port opening issue, I found that the usb_port and baud_rate argument was used wronly. Use the command dynamixel_usb_port and dynamixel_baud_rate instead.

    roslaunch open_manipulator_controller open_manipulator_controller.launch dynamixel_usb_port:=/dev/ttyACM_@YOUR_PORT_NUMBER dynamixel_baud_rate:=1000000
    

Alternatively, edit the launch fille, open_manipulator_controller.launch, as below

          <arg name="usb_port"     default="/dev/ttyUSB0"/>
          <arg name="baud_rate"    default="1000000"/>
        
          <arg name="control_period"         default="0.010"/>
        
          <arg name="use_platform"           default="true"/>
        
          <arg name="use_moveit"             default="false"/>
          <arg name="planning_group_name"    default="arm"/>
          <arg name="moveit_sample_duration" default="0.050"/>
        
          <group if="$(arg use_moveit)">
            <include file="$(find open_manipulator_controller)/launch/open_manipulator_moveit.launch">
              <arg name="robot_name"      value="$(arg use_robot_name)"/>
              <arg name="sample_duration" value="$(arg moveit_sample_duration)"/>
            </include>
          </group>
        
          <node name="$(arg use_robot_name)" pkg="open_manipulator_controller" type="open_manipulator_controller" output="screen" args="$(arg usb_port) $(arg baud_rate)">
              <param name="using_platform"       value="$(arg use_platform)"/>
              <param name="using_moveit"         value="$(arg use_moveit)"/>
              <param name="planning_group_name"  value="$(arg planning_group_name)"/>
              <param name="control_period"       value="$(arg control_period)"/>
              <param name="moveit_sample_duration"  value="$(arg moveit_sample_duration)"/>
          </node>
        
        </launch>
  1. I just tested my OpenManipulator-X without Gripper connected, and it rejects me access the application due to the internal rule of OpenManipulator package which I haven’t looked yet.

If possible, mount DYNAMIXEL (ID 15, 1M bps) or modify the code rules on your own. Seems to me you are doing your custom design. The folllowing is the refernce posting that may help proceeding to doing the customization: https://github.com/ROBOTIS-GIT/open_manipulator/issues/84

When I am free, I will spending on looking at the code as I am planning to study ROS soon, but not guarantee I can make my schedule quick. I hope that I am back again for it.

1 Like

Thank you for taking your time and trying with your own manipulator.
I have noticed the argument name inconsistency in the launch file and the roslaunch command as you mentioned.
At least now i have an idea of the problem and i will try to modify code rules as you suggest. I will post my results if i succeed.

1 Like