Robot Operating System (ROS) on NVIDIA Jetson TX2

Note: An updated article for this subject is available: Install ROS on Jetson TX. This article is left for historical reasons.

Robot Operating System (ROS) was originally developed at Stanford University as a platform to integrate methods drawn from all areas of artificial intelligence, including machine learning, vision, navigation, planning, reasoning, and speech/natural language processing. You can install it on the NVIDIA Jetson TX2! Looky here:


From 2008 until 2013, development on ROS was performed primarily at the robotics research company Willow Garage who open sourced the code. During that time, researchers at over 20 different institutions collaborated with Willow Garage and contributed to the code base. In 2013, ROS stewardship transitioned to the Open Source Robotics Foundation.

From the ROS website:

The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.

Why? Because creating truly robust, general-purpose robot software is hard. From the robot’s perspective, problems that seem trivial to humans often vary wildly between instances of tasks and environments. Dealing with these variations is so hard that no single individual, laboratory, or institution can hope to do it on their own.

Core Components

At the lowest level, ROS offers a message passing interface that provides inter-process communication. Like most message passing systems, ROS has a publish/subscribe mechanism along with request/response procedure calls. An important thing to remember about ROS, and one of the reason that it is so powerful, is that you can run the system on a heterogeneous group of computers. This allows you to distribute tasks across different systems easily.

For example, you may want to have the Jetson running as the main node, and controlling other processors as control subsystems. A concrete example is to have the Jetson doing a high level task like path planning, and instructing micro controllers to perform lower level tasks like controlling motors to drive the robot to a goal.

At a higher level, ROS provides facilities and tools for a Robot Description Language, diagnostics, pose estimation, localization, navigation and visualization.

You can read more about the Core Components here.


The installROSTX2 repository on the JetsonHacks Github account contains scripts which install ROS on the TX2.

The main script,, is a straightforward implementation of the install instructions taken from the ROS Wiki.

You can grab the repository and run the script:

$ git clone
$ cd installROSTX2
$ ./installROSTX2

The script installs ros-base, rosdep and rosinstall. You can modify the script to install ros-desktop or ros-desktop-full if desired. ROS has a huge number of packages (over 1700) to choose from, this script provides an outline for installation.

There is a convenience script to install a Catkin Workspace, which is a tool support environment for ROS. The script is called An optional parameter after the script names the workspace, the default name is catkin_workspace. The workspace will be installed in the home directory. For example:

$ ./ jetsonbot

will create a Catkin Workspace directory named jetsonbot in the home directory.


  • In the video, the Jetson TX2 was flashed with L4T 27.1 using JetPack 3.0. L4T 27.1 is derived from Ubuntu 16.04.
  • A custom kernel was compiled for the TX2. See this article. Note that this is an optional step, installing ROS will work on a stock kernel.


  1. I would like to run decision making part in Jetson TX2 ROS and want to use Ubuntu work station over the network for ROS simulated environment. Do you know how to setup this so that I can use both Jetson Tx2 and ROS simulator on the desktop please?

  2. Thanks for writing this tutorial. Great, that your script automatically fixes the rosdep issue.
    Even so, when I first ran your script I was having some trouble with the apt install commands. I had to add uncomment the “universe” and “multiverse” repositories in /etc/apt/sources.list before I could run you install script successfully. Could you possibly add that to your how-to? I also had to source /opt/ros/kinetic/setup.bash manually after the installation before I could run roscore.
    Running the install script several times also might cause some (minor) issues, e.g. the “source …” line was added twice to .bashrc.

  3. Hi,


    sudo apt-key adv –keyserver hkp:// –recv-key 0xB01FA116

    command doesn’t work for me it says, “pgp server timeout error”

    after that,

    apt-get update command doesn’t work ─░it says invalid Date in release file ?

    how can i resolve

  4. Thanks for your work on this. I just tried with a brand new Jetson TX2, and it seems there are now broken packages. sudo apt-get install ros-kinetic-ros-base -y now produces the following errors:
    Some packages could not be installed. This may mean that you have
    requested an impossible situation or if you are using the unstable
    distribution that some required packages have not yet been created
    or been moved out of Incoming.
    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    ros-kinetic-ros-base : Depends: ros-kinetic-actionlib but it is not going to be installed
    Depends: ros-kinetic-bond-core but it is not going to be installed
    Depends: ros-kinetic-class-loader but it is not going to be installed
    Depends: ros-kinetic-dynamic-reconfigure but it is not going to be installed
    Depends: ros-kinetic-nodelet-core but it is not going to be installed
    Depends: ros-kinetic-pluginlib but it is not going to be installed
    Depends: ros-kinetic-ros-core but it is not going to be installed
    E: Unable to correct problems, you have held broken packages.

    • Hi Stephan,
      I’ve installed using this method several times on new TX2s since you wrote this, and have not encountered any issues. My initial guess is that it’s an issue with the mirror or certificate servers at your geographical location. When you set up your sources list and keys, do you notice any issues?

    • I get the same error “The following packages have unmet dependencies: ros-kinetic-ros-base” with a Jetson Tk2 out of the box. Did you find a solution other than to flash to the lastest OS?


      • It is not recommended to run a Jetson TX2 “right out of the box”. Unlike a desktop PC or laptop, the Jetson does not auto-update the system software. Like most embedded systems, a placeholder image is placed into system memory. This placeholder image was created before the Jetson went into production. Installing the new system software with JetPack fixes the known issues since the placeholder image was created. Simply, the placeholder image should not be considered production quality software.

      • Thanks for the advice. I got it to work after including Universe & Multiverse repositories. I was eager to test it and had no pc with ubuntu 14.04 right now.

        Also thanks for all the articles!

  5. Hello,

    I am looking to run ROS Lunar on the TX2 Development Kit platform.

    Has anyone had success with this and, if so, is there are link that I can follow to duplicate the install?

    Thank you for your consideration!

  6. Hi,

    has anybody faced problems with the last command in the installscript?

    sudo apt-get install python-rosinstall -y

    Looks like there is a missing install candidate for mercurial. I did the same install couple of month back and had no problems. No running on R28. But i can change if needed.

    The following information may help to resolve the situation:

    The following packages have unmet dependencies:
    python-rosinstall : Depends: python-vcstools (>= 0.1.38) but it is not going to be installed
    Depends: python-wstool (>= 0.1.12) but it is not going to be installed
    Depends: mercurial but it is not installable

Leave a Reply

Your email address will not be published.