NOTE: AS OF OCTOBER 29, 2020, THIS REPO IS IN LEGACY MODE!!!!!!
Check out the new and improved arm repo at https://github.com/Interbotix/interbotix_ros_manipulators or turret repo at https://github.com/Interbotix/interbotix_ros_turrets. No hardware changes are needed to use those repos. Please note that to work with the new code, you should either delete or rename your old interbotix_ws catkin workspace to something else. Also note, that if you are commanding arm (not turret) joint positions directly in your code (not by commanding an end-effector pose, but actually commanding a joint position directly), the positive direction of the 'elbow' and 'wrist_angle' joints have been inverted. This is to keep consistency in the ROS frames at each joint. So just flip the sign on those commands if needed in your custom ROS packages or python scripts.
Welcome to the interbotix_ros_arms repo! This repository contains ROS packages meant to be used with the many X-Series robotic arms and X-Series Turrets sold by Trossen Robotics. Packages were tested on Ubuntu Linux 16.04 & 18.04 using ROS Kinetic and ROS Melodic respectively. Communication with the robot is done over USB via the U2D2. This device converts USB signals to TTL which allows a computer to 'talk' with each of the Dynamixel servo motors that make up each robot. For the most part, the ROS nodes were written in C++ with a couple nodes written in Python. However, any programming language capable of sending ROS messages can be used to control the robots. To that effect, the core packages that make up this repo are as follows:
Finally, there is also an interbotix_examples directory containing various examples of how the above mentioned core packages can be used. While the majority of them demo how to work with the arms, the interbotix_turret_control package demos how to work with the turrets. So what are you waiting for? Let's get started!
Below is a list of the hardware you will need to get started:
There is not much required to get the robot ready to work as most of the setup is done for you. Just make sure to do the following steps:
Open a terminal on your computer and create a new catkin workspace called interbotix_ws
$ mkdir -p ~/interbotix_ws/src
$ cd ~/interbotix_ws/
$ catkin_make
Make sure that your new workspace is sourced every time a terminal is opened
$ source ~/interbotix_ws/devel/setup.bash
$ echo "source ~/interbotix_ws/devel/setup.bash" >> ~/.bashrc
Change into your src
directory and clone the repository (install 'git' first). Make sure to change the branch to either 'kinetic' or 'melodic' based on your ROS distro.
$ cd ~/interbotix_ws/src
$ git clone https://github.com/Interbotix/interbotix_ros_arms.git
$ cd ~/interbotix_ws/src/interbotix_ros_arms
$ git checkout <distro>
Before doing another catkin_make
, make sure that all required dependencies are installed. rosdep
will be used to do this efficiently.
$ cd ~/interbotix_ws
$ rosdep update
$ rosdep install --from-paths src --ignore-src -r -y
There is one dependency that rosdep
doesn't know about that must be installed manually. Known as modern_robotics, a robotic manipulation library created at Northwestern University, this API is used in the interbotix_joy_control example package and in the Interbotix Python API to perform inverse kinematics on the arm.
$ sudo apt install python-pip
$ sudo pip install modern_robotics
Now that all the dependencies are installed, it's time to build!
$ cd ~/interbotix_ws
$ catkin_make
$ source ~/.bashrc
Copy over the udev rules to the right directory. The rules create a symlink for the port to which the U2D2 is connected. This ensures that the computer always 'recognizes' the U2D2. It also reduces USB latency to 1 ms so that there is minimal lag during communication. Afterwards, reload and trigger the updated udev rules.
$ sudo cp ~/interbotix_ws/src/interbotix_ros_arms/interbotix_sdk/10-interbotix-udev.rules /etc/udev/rules.d
$ sudo udevadm control --reload-rules && udevadm trigger
Plug in the micro-usb cable (that should already be connected to the U2D2) to your computer and verify that the port shows up under the symlink /dev/ttyDXL
$ cd /dev
$ ls
Get familiar with the virtual robot model by launching it in Rviz and playing with the joint_state_publisher. Note that you must specify which robot model is being used as a command line argument. For example, the WidowX 200 robot arm can be launched as follows:
$ roslaunch interbotix_descriptions description.launch robot_name:=wx200 jnt_pub_gui:=true
Get familiar with the physical robot arm (let's say... a ViperX 250!) by executing the following command in the terminal (Cntrl-C from Step 9 first):
$ roslaunch interbotix_sdk arm_run.launch robot_name:=vx250
By default, all the motors in the robot are torqued on so it will be very difficult to manually manipulate it. To torque off the motors, execute the command below in another terminal. Be aware though that this will cause the robot to collapse so manually hold the arm or turret before executing it.
$ rosservice call /vx250/torque_joints_off
Now you should be able to freely manipulate the arm and gripper. Take note of how the Rviz model accurately mimics the real robot. To make the robot hold a certain pose, manually hold the robot in the desired pose and execute the following command:
$ rosservice call /vx250/torque_joints_on
You can now let go and observe how the arm stays in place.
For ROS Melodic users, open the following Gazebo config file to fix an issue described here.
$ nano ~/.ignition/fuel/config.yaml
Now change the url inside from https://api.ignitionfuel.org
to https://api.ignitionrobotics.org
.
That ends the quickstart tutorial. To get familiar with the architecture and launch file arguments, refer to the READMEs of the core packages. Start with the interbotix_descriptions package, then the interbotix_sdk package, followed by the interbotix_gazebo package and lastly the interbotix_moveit package. This is the most logical approach to take as each package builds on top of the previous packages (for the most part). Afterwards, feel free to check out the examples in the interbotix_examples directory.