Edit on GitHub

Overview

ROS-enabled OpenManipulator is a full open robot platform consisting of OpenSoftware​, OpenHardware and OpenCR(Embedded board)​.

OpenSoftware

OpenManipulator are based on ROS ​and OpenSource. ROS official hardware platform ,TurtleBot series has been supporting ‘TurtleBot Arm’. The OpenManipulator has full hardware compatibility with TurtleBot3​, and allows users to control it more easily by linking with the MoveIT! package. Even if you do not have a real robot, you can control the robot in the Gazebo simulator​.

OpenHardware

The OpenManipulator is oriented towards Open Hardware​. Most of the components except for some frames are uploaded as STL files that can be 3d printing. This allows users to modify the length of the link and the design of the robot to suit the intended use. The open manipulator also uses the Dynamixel X ​series used in TurtleBot 3. Dynamixel has a modular form and adopts daisy chain method. This allows users to easily change and add joints for some torque and degree of freedom they need. Taking advantage of these advantages, we are planning a total of seven different types (For example, Chain, SCARA, Link, Planar, Delta, Stewart and Linear) of OpenManipulator.

OpenCR (Embedded board)

The OpenManipulator can also be controlled via OpenCR (Open-source Control module for ROS), the control board of TurtleBot3. OpenCR’s computing power and real-time control are used to support forward, inverse kinematics, and profile control examples. In addition, OpenCR can interoperate with many functions provided by ROS through message communication with ROS, which will evolve into ROS 2.0 in the future.

Dynamixel Examples

OpenManipulator is composed by Dynamixel X series and 3D printing parts. Dynamixel has a modular form and adopts daisy chain method. This allows users to easily change and add joints for some torque and degree of freedom they need. Moreover, growing 3D printing technology makes anyone can make anything they want with low cost and rapid time. We suggest some examples of links and safety parts. Taking advantage of these advantages, we are planning a total of seven different types of OpenManipulator.

Introduction Video

ROSCon 2017 Vancouver Day 1: Introducing OpenManipulator; the full open robot platform from OSRF on Vimeo.

Specification

Hardware Specification

Items Unit RM-X52-TNM
Actuator   Dynamixel XM430-W350-T
Input Voltage V 12
DOF - 5 (4 DOF + 1 DOF Gripper)
Payload g 500
Speed(Joint) RPM 46
Weight kg (lb) 0.70 (1.54)
Reach mm (in) 380 (14.9)
Gripper Stroke mm (in) 20~75 (0.79~2.95)
Communication - TTL (Level Multidrop BUS)
Software - ROS, Dynamixel SDK, Arduino, Processing
Main Controller - PC, OpenCR

Dimension

Hardware Setup

Part Lists

  Part Name Quantity
Chassis Parts LINK FRAME(LONG) 1
. LINK FRAME(SHORT) 1
. RAIL BRACKET(LEFT) 1
. RAIL BRACKET(RIGHT) 1
. PALM GRIPPER 2
. LINK ROD 2
. FLANGE BUSH 4
. CRANK ARM 1
. RAIL BLOCK 2
. FR12-S101-K 1
. FR12-S102-K 2
. FR12-H101-K 2
. FR12-H104-K 1
Actuators Dynamixel XM430-W350-T 5
Cables CABLE-X3P-100 1
. CABLE-X3P-180 2
. CABLE-X3P-240 2
Tools Screw Driver 1
. Wrench-1.5 1
. Wrench-2.0 1
. Wrench-2.5 1
Miscellaneous X-SP 24
. NUT-M2.5 16
. NUT-M3 4
. FHS-M2.5x14 12
. WB-M2x3 38
. WB-M2x4 4
. WB-M2.5x4 4
. WB-M2.5x6 8
. WB-M2.5x8 16
. WB-M2.5x12 8
. WB-M2.5x20 4
. WB-M3x10 4
. DC12-IDLER 3
. DC12-IDLER-CAP 3
. DC12-P-BEARING 3
. RUBBER PAD 2
  Part Name Quantity
Powers SMPS 12V5A 1
Boards OpenCR 1
. U2D2 1
Plate Base Plate-02 1
. . 1

3D Printed Parts

We offer 3D printed parts to safety. User can modify cad files and 3D Printed it to assemble OpenManipulator.

Assembly Manual

OpenManipulator is delivered as unassembled parts in the boxes. Follow the instructions to assemble it.

Below video might be help you.

PC Setup

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • If you want to control OpenManipulator on OpenCR(Embedded board) instead of ROS, please set it up as described in How to Control on OpenCR.

Install Ubuntu on PC

Download and install the Ubuntu 16.04 on the PC (your desktop or laptop PC) from the following link.

If you need more help for installing Ubuntu, check out the step-by-step guide from the link below.

Install ROS on PC

The following script will allow you to simplify the ROS installation procedure. Run the following command in a terminal window. The terminal application can be found with the Ubuntu search icon on the top left corner of the screen, or you can use shortcut key for terminal is Ctrl+Alt+T. After install ROS, please reboot PC.

$ sudo apt-get update
$ sudo apt-get upgrade
$ wget https://raw.githubusercontent.com/ROBOTIS-GIT/robotis_tools/master/install_ros_kinetic.sh && chmod 755 ./install_ros_kinetic.sh && bash ./install_ros_kinetic.sh

NOTE: In order to check which packages are installed, please check this link out. install_ros_kinetic.sh

If you prefer manual installation, please following the link below.

Install ROS Packages

Install dependent packages for the OpenManipulator. Run the following command in a terminal window.

NOTE: The terminal application can be found with the Ubuntu search icon on the top left corner of the screen. Shortcut key for terminal is Ctrl+Alt+T.

$ sudo apt-get install ros-kinetic-ros-controllers ros-kinetic-gazebo* ros-kinetic-moveit* ros-kinetic-industrial-core
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ROBOTIS-GIT/DynamixelSDK.git
$ git clone https://github.com/ROBOTIS-GIT/dynamixel_workbench.git
$ git clone https://github.com/ROBOTIS-GIT/dynamixel_workbench_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/robotis_manipulator.git
$ git clone https://github.com/ROBOTIS-GIT/open_manipulator.git
$ git clone https://github.com/ROBOTIS-GIT/open_manipulator_msgs.git
$ git clone https://github.com/ROBOTIS-GIT/open_manipulator_simulations.git
$ cd ~/catkin_ws && catkin_make

If catkin_make command is completed without any errors, preparation for OpenManipulator is done.

Usb Settings

Run roscore.

$ roscore

The following commands allow to use USB port

$ rosrun open_manipulator_controller create_udev_rules

NOTE:

  • Please run roscore before rosrun, because rosrun can’t operate without roscore. The rosrun and roscore should be run in each other terminal.
  • This run file make usb latency timer 1 ms. If you want to check this setting, Run the following command in a terminal window.
    cat /sys/bus/usb-serial/devices/ttyUSB0/latency_timer

Controller

Open Manipulator Controller is provided for basic manipulation of OpenManipulator. You can control the dynamixel of OpenManipulator and check states of OpenManipulator through messages of the controller.

NOTE: This instruction was tested on Ubuntu 16.04 and ROS Kinetic Kame.

Run roscore

Run roscore.

$ roscore

Launch Controller

Launch Open Manipulator Controller to start Basic Manipulation.

$ roslaunch open_manipulator_controller open_manipulator_controller.launch

WARNING: If you start the controller in a pose where the components of OpenManipulator are in contact with each other, the OpenManipulator will not move by joint limit. It is recommended to place the Open Manipulator in the following Pose and start the control.

If OpenManipulator controller launched successfully, the terminal will represent below messages.

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.14

NODES
  /
    open_manipulator (open_manipulator_controller/open_manipulator_controller)

ROS_MASTER_URI=http://localhost:11311

process[open_manipulator-1]: started with pid [23452]
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
Gripper Dynamixel ID : 15, Model Name :XM430-W350
[ INFO] [1544509070.096942788]: Succeeded to init /open_manipulator

TIP:

  • If you can’t load Dynamixels, please check your Dynamixels information. You can use find_dynamixel example in Dynamixel-Workbench packages.
    rosrun dynamixel_workbench_controllers find_dynamixel /dev/ttyUSB0
    Even if you can’t find any Dynamixels, please check firmware to use ROBOTIS software (R+ Manager 2.0 or R+ Manager 1.0)
  • If you want to change Dynamixel ID, Please check OpenManipulator.cpp in open_manipulator_lib folder. The default ID is that joint is 11, 12, 13, 14 and gripper is 15

NOTE: open_manipulator_controller is compatible with Protocol 2.0. Because Protocol 1.0 doesn’t support SyncRead instructions that makes access multiple Dynamixels simultaneously. MX2, X and Pro series can be controllered by Protocol 2.0 but AX, RX, EX series can’t.

Check Setting

Manipulator Description

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.
  • Make sure to run the Open Manipulator controller instructions before running the instructions below.

Publish a topic message to check the OpenManipulator setting.

$ rostopic pub /open_manipulator/option std_msgs/String "print_open_manipulator_setting"

<Manipulator Description> will be printed on the terminal launch the open_manipulator_controller. It is shown that present state of the OpenManipulator.
This parameter is descripted on OpenManipulator.cpp in open_manipulator_libs pkg
~/catkin_ws/src/open_manipulator/open_manipulator_libs/src/OpenManipulator.cpp

----------<Manipulator Description>----------
<Degree of freedom>
 4.000
<Size of Components>
 5.000

<Configuration of world>
 [Name]
 -World Name : world
 -Child Name : joint1
 [Static Pose]
 -Position : 
(0.000, 0.000, 0.000)
 -Orientation : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 [Dynamic Pose]
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)

<Configuration of gripper>
 [Component Type]
  Tool
 [Name]
 -Parent Name : joint4
 [Actuator]
 -Actuator Name : tool_dxl
 -ID :  15
 -Joint Axis : 
(0.000, 0.000, 0.000)
 -Coefficient :  -0.015
 -Limit : 
    Maximum : 0.010, Minimum : -0.010
 [Actuator Value]
 -Value :  0.008
 -Velocity :  0.000
 -Acceleration :  0.000
 -Effort :  0.000
 [Constant]
 -Relative Position from parent component : 
(0.130, 0.000, 0.000)
 -Relative Orientation from parent component : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Mass :  0.000
 -Inertia Tensor : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Center of Mass : 
(0.000, 0.000, 0.000)
 [Variable]
 -Position : 
(0.138, -0.005, 0.015)
 -Orientation : 
(-0.006, 0.043, 0.999
 0.000, 0.999, -0.043
 -1.000, 0.000, -0.006)
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)

<Configuration of joint1>
 [Component Type]
  Active Joint
 [Name]
 -Parent Name : world
 -Child Name 1 : joint2
 [Actuator]
 -Actuator Name : joint_dxl
 -ID :  11
 -Joint Axis : 
(0.000, 0.000, 1.000)
 -Coefficient :  1.000
 -Limit : 
    Maximum : 3.142, Minimum : -3.142
 [Actuator Value]
 -Value :  -0.043
 -Velocity :  0.000
 -Acceleration :  0.000
 -Effort :  0.000
 [Constant]
 -Relative Position from parent component : 
(0.012, 0.000, 0.017)
 -Relative Orientation from parent component : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Mass :  0.000
 -Inertia Tensor : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Center of Mass : 
(0.000, 0.000, 0.000)
 [Variable]
 -Position : 
(0.012, 0.000, 0.017)
 -Orientation : 
(0.999, 0.043, 0.000
 -0.043, 0.999, 0.000
 0.000, 0.000, 1.000)
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)

<Configuration of joint2>
 [Component Type]
  Active Joint
 [Name]
 -Parent Name : joint1
 -Child Name 1 : joint3
 [Actuator]
 -Actuator Name : joint_dxl
 -ID :  12
 -Joint Axis : 
(0.000, 1.000, 0.000)
 -Coefficient :  1.000
 -Limit : 
    Maximum : 1.571, Minimum : -2.050
 [Actuator Value]
 -Value :  -0.052
 -Velocity :  0.000
 -Acceleration :  0.000
 -Effort :  0.000
 [Constant]
 -Relative Position from parent component : 
(0.000, 0.000, 0.058)
 -Relative Orientation from parent component : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Mass :  0.000
 -Inertia Tensor : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Center of Mass : 
(0.000, 0.000, 0.000)
 [Variable]
 -Position : 
(0.012, 0.000, 0.075)
 -Orientation : 
(0.998, 0.043, -0.052
 -0.043, 0.999, 0.002
 0.052, 0.000, 0.999)
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)

<Configuration of joint3>
 [Component Type]
  Active Joint
 [Name]
 -Parent Name : joint2
 -Child Name 1 : joint4
 [Actuator]
 -Actuator Name : joint_dxl
 -ID :  13
 -Joint Axis : 
(0.000, 1.000, 0.000)
 -Coefficient :  1.000
 -Limit : 
    Maximum : 1.530, Minimum : -1.571
 [Actuator Value]
 -Value :  0.546
 -Velocity :  0.000
 -Acceleration :  0.000
 -Effort :  0.000
 [Constant]
 -Relative Position from parent component : 
(0.024, 0.000, 0.128)
 -Relative Orientation from parent component : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Mass :  0.000
 -Inertia Tensor : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Center of Mass : 
(0.000, 0.000, 0.000)
 [Variable]
 -Position : 
(0.029, -0.001, 0.204)
 -Orientation : 
(0.880, 0.043, 0.474
 -0.038, 0.999, -0.020
 -0.474, 0.000, 0.880)
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)

<Configuration of joint4>
 [Component Type]
  Active Joint
 [Name]
 -Parent Name : joint3
 -Child Name 1 : gripper
 [Actuator]
 -Actuator Name : joint_dxl
 -ID :  14
 -Joint Axis : 
(0.000, 1.000, 0.000)
 -Coefficient :  1.000
 -Limit : 
    Maximum : 2.000, Minimum : -1.800
 [Actuator Value]
 -Value :  1.083
 -Velocity :  0.000
 -Acceleration :  0.000
 -Effort :  -2.690
 [Constant]
 -Relative Position from parent component : 
(0.124, 0.000, 0.000)
 -Relative Orientation from parent component : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Mass :  0.000
 -Inertia Tensor : 
(1.000, 0.000, 0.000
 0.000, 1.000, 0.000
 0.000, 0.000, 1.000)
 -Center of Mass : 
(0.000, 0.000, 0.000)
 [Variable]
 -Position : 
(0.138, -0.005, 0.145)
 -Orientation : 
(-0.006, 0.043, 0.999
 0.000, 0.999, -0.043
 -1.000, 0.000, -0.006)
 -Linear Velocity : 
(0.000, 0.000, 0.000)
 -Linear acceleration : 
(0.000, 0.000, 0.000)
 -Angular Velocity : 
(0.000, 0.000, 0.000)
 -Angular acceleration : 
(0.000, 0.000, 0.000)
---------------------------------------------

RViz

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.

Load an OpenManipulator on RViz.

$ roslaunch open_manipulator_description open_manipulator_rviz.launch

NOTE:

  • When the user launch the Rviz with the OpenManipulator controller, the OpenManipulator model of Rviz is synchronized with the actual OpenManipulator.
  • If the user wants to check only model of OpenManipulator without control the actual OpenManipulator, the user can launch the Rviz without the OpenManipulator controller. The user can change each joint by GUI, if the user launch only Rviz by executing the following command : $ roslaunch open_manipulator_description open_manipulator_rviz.launch use_gui:=true
  • Red Box is showing end-effector position.

Basic Manipulation

Message List

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.
  • Make sure to run the Open Manipulator controller instructions before running the instructions below.

Open Manipulator Controller provides topic and service messages to control manipulator and check the states of manipulator.

Topic

Topic Monitor

In order to check the topics of OpenManipulator Controller, we will use rqt provided by ROS. The rqt is a Qt-based framework for GUI development for ROS. The rqt is a tool that allows users to easily see the topic status by displaying all the topics in the topic list. There are topic names, types, bandwidth, Hz, value in GUI.

Run the rqt.

$ rqt

TIP: If rqt is not displayed, select the plugin -> Topics -> Topic Monitor.

When rqt is first run, the topic values are not monitored. To monitor the topic, click the checkbox next to each topic.

If you want to see more detail topic message, click the button next to each checkbox.

Published Topic List

Published Topic List : The topic list is published by open_manipulator_controller.

NOTE: These topics are messages for checking the status of the robot regardless of the robot’s motion.

/open_manipulator/joint_states(sensor_msgs/JointState) is a message indicating the states of the joints in OpenManipulator. “name” of this message indicates joint component names OpenManipulator have. “effort” indicates currents of the joint Dynamixels. “position” and “velocity” indicates the angle and angular velocity of each joints.

/open_manipulator/gripper/kinematics_pose(open_manipulator_msgs/KinematicsPose) is a message indicating the pose(position and orientation) in task space. “position” indicates x, y, and z value of the center of the end-effector(tool). “Orientation” indicates the direction of the end-effector(tool) as quaternion.

/open_manipulator/states(open_manipulator_msgs/OpenManipulatorState) is a message indicating the status of OpenManipulator. “open_manipulator_actuator_state” indicates whether the torque of the actuator(Dynamixel) is enable(“ACTUATOR_ENABLE”) or disable(“ACTUATOR_DISABLE”). “open_manipulator_moving_state” indicates whether OpenManipulator is “MOVING” or “STOPPED” along the trajectory.

Subscribed Topic List

Subscribed Topic List: The topic list is subscribed by open_manipulator_controller.

NOTE: These topics are messages for checking the status of the robot regardless of the robot’s motion.

/open_manipulator/option(std_msgs::String) is used to set OpenManipulator options (std :: string type).

In addition, you can monitor topics through rqt whenever you have a topic added in your controller.

Service

Service Server List

NOTE: These services are messages to operate the OpenManipulator or to change the status of the Dynamixels of OpenManipulator.

Service Server List : This is Service Server list of open_manipulator_controller.

GUI Program

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.
  • Make sure to run the Open Manipulator controller instructions before running the instructions below.

The user can use GUI program to manipulate the OpenManipulator. Launch open_manipulator_control_gui node. This program shows the status of the manipulator and provides the ability to operate the manipulator.

  $ roslaunch open_manipulator_control_gui open_manipulator_control_gui.launch

To manipulate the OpenManipulator, first click the Timer Start button.

The user can check the states of the OpenManipulator (joint states, kinematics pose).

The user can manipulate the OpenManipulator in the joint space. Enter the joint angles and total time of the trajectory. Then click the send button.

The user can manipulate the OpenManipulator in the task space. Enter the kinematics pose of the OpenManipulator end-effector(tool) in the task space and the total time of the trajectory. Then click the send button.

The user can create a drawing trajectory with the OpenManipulator. First, choose the drawing trajectory type(line, circle, rhombus, heart). And enter the parameters according to the drawing trajectory type and the total time of the drawing trajectory. Then click the send button.

Teleoperation

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.
  • Make sure to run the Open Manipulator controller instructions before running the instructions below.

Keyboard

TIP: The terminal application can be found with the Ubuntu search icon on the top left corner of the screen. Shortcut key for terminal is Ctrl-Alt-T.

Launch open_manipulator_teleop_keyboard node for simple teleoperation test using the keyboard.

  $ roslaunch open_manipulator_teleop open_manipulator_teleop_keyboard.launch 

If the node is successfully launched, the following instruction will be appeared to the terminal window.

  ---------------------------
  Control Your OpenManipulator!
  ---------------------------
  w : increase x axis in task space
  s : decrease x axis in task space
  a : increase y axis in task space
  d : decrease y axis in task space
  z : increase z axis in task space
  x : decrease z axis in task space

  y : increase joint 1 angle
  h : decrease joint 1 angle
  u : increase joint 2 angle
  j : decrease joint 2 angle
  i : increase joint 3 angle
  k : decrease joint 3 angle
  o : increase joint 4 angle
  l : decrease joint 4 angle

  g : gripper open
  f : gripper close
        
  1 : init pose
  2 : home pose
        
  q to quit
  ---------------------------
  Present Joint Angle J1: 0.000 J2: 0.000 J3: 0.000 J4: 0.000
  Present Kinematics Position X: 0.000 Y: 0.000 Z: 0.000
  ---------------------------

PS4 Joystick

Connect PS4 joystick to the PC via Bluetooth or with USB cable.

Install packages for teleoperation using PS4 joystick.

$ sudo apt-get install ros-kinetic-joy ros-kinetic-joystick-drivers ros-kinetic-teleop-twist-joy
$ sudo pip install ds4drv

Launch teleoperation packages for PS4 joystick.

$ sudo ds4drv
$ roslaunch open_manipulator_teleop open_manipulator_teleop_joystick.launch

XBOX 360 Joystick

Connect XBOX 360 joystick to the PC with Wireless Adapter or USB cable.

Install packages for teleoperation using XBOX 360 joystick.

$ sudo apt-get install xboxdrv ros-kinetic-joy ros-kinetic-joystick-drivers ros-kinetic-teleop-twist-joy

Launch teleoperation packages for XBOX 360 joystick.

$ sudo xboxdrv --silent
$ roslaunch open_manipulator_teleop open_manipulator_teleop_joystick.launch

MoveIt!

TIP: The terminal application can be found with the Ubuntu search icon on the top left corner of the screen. Shortcut key for terminal is Ctrl-Alt-T.

Before you launch MoveIt!, let’s check open_manipulator_moveit launch file.

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

    <arg name="dynamixel_usb_port"     default="/dev/ttyUSB0"/>
    <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="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>

Parameters List : The parameters list is supposed to set loading move_group package.

use_moveit is a parameter to set whether user use MoveIt!
planning_group_name is a parameter when you set in setup_assistant
moveit_sample_duration is a parameter is to set sampling time when joint trajectory is planned from MoveIt!

After set the parameters, load a controller.

  $ roslaunch open_manipulator_controller open_manipulator_controller.launch use_moveit:=true

Service Server List : This is Service Server list of open_manipulator_controller.

TIP: If someone want to use inverse kinematics with position_only. Please check open_manipulator_moveit -> config -> kinematics.yaml. And change a parameter(position_only_ik) to True.

Gazebo Simulation

NOTE:

  • This instructions were tested on Ubuntu 16.04 and ROS Kinetic Kame.
  • This instructions are supposed to be running on PC ROS packages installed in. Please run the instructions below on your PC ROS packages installed in.

Controller for gazebo

Launch an OpenManipulator controller for gazebo simulation.

  $ roslaunch open_manipulator_controller open_manipulator_controller.launch use_platform:=false

NOTE : To control the OpenManipulator in the Gazebo environment using the Open Manipulator Controller, the controller must set the use_platform parameter to false because it needs to send messages to gazebo instead of Platform.

If the OpenManipulator controller for gazebo simulation Launched successfully, the terminal will represent below messages.

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: False
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES
  /
    open_manipulator (open_manipulator_controller/open_manipulator_controller)

ROS_MASTER_URI=http://localhost:11311

process[open_manipulator-1]: started with pid [9820]
[ INFO] [1544506914.862653563]: Ready to simulate /open_manipulator on Gazebo

NOTE : In OpenManipulator controller for gazebo simulation, Joint and Gripper Dynamixel are not enable, following messages will not display :
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
Gripper Dynamixel ID : 15, Model Name :XM430-W350

Launch gazebo

Load an OpenManipulator on Gazebo simulator and click Play button .

  $ roslaunch open_manipulator_gazebo open_manipulator_gazebo.launch

A red box is pointing end-effector link.

Enter rostopic list to list up the activated topics.

  /clock
  /gazebo/link_states
  /gazebo/model_states
  /gazebo/set_link_state
  /gazebo/set_model_state
  /open_manipulator/gripper/kinematics_pose
  /open_manipulator/gripper_position/command
  /open_manipulator/gripper_sub_position/command
  /open_manipulator/joint1_position/command
  /open_manipulator/joint2_position/command
  /open_manipulator/joint3_position/command
  /open_manipulator/joint4_position/command
  /open_manipulator/joint_states
  /open_manipulator/option
  /open_manipulator/states
  /rosout
  /rosout_agg

Open an open_manipulator_control_gui

How to Control on OpenCR

OpenManipulator is compatible with OpenCR. We offer API to easily control manipulator. This API supports Dynamixel, Dynamixel X including protocol 1.0 and 2.0. Furthermore, this code can be used Friends of OpenManipulator. User can make thier code in Arduino IDE and simulate or control using Processing GUI.

Setup

Connect micro USB (connected to PC), Dynamixel(OpenManipulator), and 12V Power to OpenCR as shown below.

Please refer the detailed description of OpenCR

Arduino IDE

Download Arduino IDE and load OpenCR board on it

Find example source codes.

Go to Examples > OpenManipulator > example > Chain > open_manipulator_chain on Arduino IDE for OpenCR.

Processing

Download Processing and load OpenCR board on it

Open Processing and Go to Tools > Add Tool... Search ControlP5 and install it.

Download processing source code for OpenManipulator.

$ git clone https://github.com/ROBOTIS-GIT/open_manipulator_processing.git

Open processing source code file (open_manipulator_processing > Chain > Chain.pde) on Processing IDE, and Run it.

NOTE: Upload OpenCR example source code to OpenCR before run processing source code.

Basic Manipulation on OpenCR

NOTE: Upload OpenCR example source code to OpenCR before run processing source code.

Control Interface

The user can use processing program to manipulate the OpenManipulator.
To manipulate the OpenManipulator, click the toggle button to CONTROLLER ON.

The user can manipulate the OpenManipulator in the joint space.
Set the joint angles. Then click the SEND JOINT ANGLE button. And set the gripper parameter. Then click the SET GRIPPER button.

The user can manipulate the OpenManipulator in the (task space). Click the TASK SPACE CONTROL button to change the tab.
Click the desired direction button to manipulate the OpenManipulator.

Teleoperation RC100

The settings for ROBOTIS RC-100B controller is included in the OpenCR firmware for OpenManipulator. This controller can be used with the Bluetooth module BT410.

Hand guiding

The user can make the demonstration using hand guiding function.

  1. Click the HAND GUIDING button to change the tab.
  2. Holds the OpenManipulator by hand and click the toggle button to TORQUE OFF.
  3. Move the OpenManipulator to the desired pose by hand.
  4. Click the SAVE JOINT POSE to save the present pose.
  5. Repeat step 3 and 4 to create the demonstration.
  6. Click the toggle button to TORQUE ON
  7. Click the MOTION START button to start the saved poses.

Click the toggle button to MOTION REPEAT ON if you want to repeat the demonstration.
The total time of the trajectory between saved poses is the same as 2 seconds.

Camera Application

Coming Soon

Tool Modification

Vacuum Gripper

Coming Soon

Pen Holder

Coming Soon

Mobile Manipulation

TIP: You can get a more information about it in Manipulation section of TurtleBot3

Install dependent packages

  $ cd ~/catkin_ws/src
  $ git clone https://github.com/ROBOTIS-GIT/open_manipulator_with_tb3.git
  $ git clone https://github.com/ROBOTIS-GIT/open_manipulator_with_tb3_msgs.git
  $ git clone https://github.com/ROBOTIS-GIT/turtlebot3.git
  $ cd ~/catkin_ws && catkin_make

Load a TurtleBot3 Waffle or Waffle Pi with OpenManipulator on RViz.

TIP: TB3_MODEL = waffle, waffle_pi

  $ export TURTLEBOT3_MODEL=${TB3_MODEL}
  $ roslaunch open_manipulator_with_tb3_description open_manipulator_with_tb3_rviz.launch

Friends

Friends List

OpenManipulator SCARA

Specification

Items Unit  
Actuator   Dynamixel XM430-W350-T
Input Voltage V 12
DOF - 4 (3 DOF + 1 End-Effector)
Speed(Joint) RPM 46
Reach mm (in) 276 (10.87)
Communication - TTL (Level Multidrop BUS)
Software - Dynamixel SDK, Arduino, Processing
Main Controller - PC, OpenCR

Dimension

Hardware Setup

Part Lists

  Part Name Quantity Link
Chassis Parts BASE FRAME 1 Download Link
. PEN HOLDER 1 Download Link
. FRM BASE 1 Download Link
. TAP HOLDER 1 Download Link
. FR12_H101_K 4 Shop Link
. FR12_S102_K 3 Shop Link
. HN12_I101 4 Shop Link
Actuators Dynamixel XM430-W350-T 4 Shop Link
Cables CABLE_3P_130MM 3 Shop Link
. CABLE_3P_240MM 1 Shop Link
Miscellaneous WB_M2X03 24 Shop Link
. WB_M2_5X4 14 Shop Link
. WB_M2_5X06 8 Shop Link
. WB_M2_5X12 2 Shop Link
. FHS_M2_5X14 12 Shop Link
. NUT_M2_5(0.45P) 8 Shop Link

3D Printed Parts

Software Setup

OpenCR

Go to Examples > OpenManipulator > example > Arduino > SCARA > open_manipulator_SCARA on Arduino IDE for OpenCR.

Processing

Open processing source code file (OpenCR > arduino > opencr_arduino > opencr > libraries > OpenManipulator > example > Processing > SCARA > SCARA.pde) on Processing IDE, and Run it.

NOTE: Upload OpenCR example source code to OpenCR before run processing source code.

Video

Specification

Items Unit  
Actuator   Dynamixel XM430-W350-T
DOF - 3
Payload With Suction g (lb) 500 (1.10)
Speed(Joint) rad/sec 4.82
Weight kg(lb) 0.55 (1.21)
Reach mm (in) 350 (13.78)
Communication - TTL (Level Multidrop BUS)
Software - Dynamixel SDK, Arduino, Processing
Main Controller - PC, OpenCR

Dimension

Hardware Setup

Part Lists

  Part Name Quantity Link
Chassis Parts BASE FRAME 1 Download Link
. BASE LINK 1 Download Link
. ROTATION BASE 1 Download Link
. HOLDER A 1 Download Link
. HOLDER B 1 Download Link
. LINK 50 1 Download Link
. LINK 200 A 1 Download Link
. LINK 50 FOR 250 1 Download Link
. LINK 200 FOR 250 1 Download Link
. LINK 200 B 4 Download Link
. TRIANGLE LINK 1 Download Link
. TOOL LINK 1 Download Link
Actuators Dynamixel XM430-W350-T 3 Shop Link
Cables CABLE_3P_180MM 1 Shop Link
. CABLE_3P_240MM 1 Shop Link
Miscellaneous FHS_M2x3mm 16 Shop Link
. FHS_M2x6mm 4 Shop Link
. FHS_M2.5x5mm 8 Shop Link
. FHS_M2.5x10mm 4 Shop Link
. FHS_M3x10mm 4 Shop Link
. NUT_M2 4 Shop Link
. NUT_M2.5 4 Shop Link
. PSCBRJ6-9 18 Shop Link
. MSRB6-1.0 40 Shop Link
. NSFMR6-38 1 Shop Link
. NSFMR6-42 1 Shop Link
. NSFMR6-24 6 Shop Link
. Ball Bearing(O.D 10mm / I.D 6mm) 20 Shop Link

3D Printed Parts

CAD Files (Onshape, Thingiverse)

Software Setup

OpenCR

Go to Examples > OpenManipulator > example > Arduino > Link > open_manipulator_link on Arduino IDE for OpenCR.

Processing

Open processing source code file (OpenCR > arduino > opencr_arduino > opencr > libraries > OpenManipulator > example > Processing > Link > Link.pde) on Processing IDE, and Run it.

NOTE: Upload OpenCR example source code to OpenCR before run processing source code.

Video

OpenManipulator Planar

Specification

Dimension

Hardware Setup

Parts of OpenManipulator

CAD Files (Onshape, Thingiverse)

Software Setup

Video

OpenManipulator Delta

Specification

Dimension

Hardware Setup

Parts of OpenManipulator

CAD Files

Software Setup

Video

OpenManipulator Stewart

Specification

Dimension

Hardware Setup

Parts of OpenManipulator

CAD Files

Software Setup

Video

OpenManipulator Linear

Specification

Dimension

Hardware Setup

Parts of OpenManipulator

CAD Files

Software Setup

Video