JetsonHacks

Developing on NVIDIA® Jetson™ for AI on the Edge

Robot Operating System (ROS) on NVIDIA Jetson TK1

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 now install it on the Jetson! Looky here:

Background

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.

Installation

The original port over to the NVIDIA Jetson TK1 was done by Austin Hendrix.

On the ROS Wiki NVIDIA Jetson TK1 page, there are instructions for installing ROS on the Jetson. It is suggested that you install the Grinch kernel to start the installation so that you can harvest the many drivers that the Grinch provides. You can see how to install the Grinch Kernel on this blog entry.

After that, the standard Ubuntu installation instructions should work. For ease of installation, those instructions have been gathered up and turned in to a script. The script is available on the Github JetsonHacks account, in the installROS repository.

To install ROS on the Jetson:

$ git clone https://github.com/jetsonhacks/installROS.git
$ cd installROS
$ ./installROS.sh

This will install ROS Indigo ros-base, rosdep, and rosinstall.

When asking questions or looking for help running ROS on the TK1, use the jetson_tk1 tag on ROS answers.

ROS has a huge number of packages to chose from (over 1700), it will be up to you to select which ones you need for your particular application. ROS is very much hands on. You should look at the installation script to make sure you understand the intent. The script is provided for ease of use.

Next

This should be one of several entries on ROS. Subscribe to the usual JetsonHacks social thingies such as YouTube, Twitter, and the RSS feed of this blog to be kept up to date. The next installment should discuss workspaces and next steps to get ROS working.

Note: The installation in the video was done on a fresh Linux for Tegra (L4T) JetPack installation with the standard JetsonHacks postFlash done afterwards. The Grinch Kernel was applied immediately thereafter.

Facebook
Twitter
LinkedIn
Reddit
Email
Print

15 Responses

    1. Hi Corey,
      I wrote up a short piece on the subject: http://wp.me/p51nTS-d9
      The script just blindly installs OpenCV with GPU optimizations. This is mostly because I want to use visual odometry in my applications and need the proprietary algorithms that opencv-nonfree provides. The script tries to install OpenCV, so if the package gets ‘fixed’ so that aptitude recognizes OpenCV4Tegra as the real OpenCV it will use that. If you use SIFT/SURF, that’s going to be a problem as OpenCV4Tegra doesn’t contain those items.

  1. have you meet this error?

    [ERROR] [1450191971.626716789]: Plugin cam_imu_sync load exception: Failed to lo ad library /opt/ros/jade/lib//libmavros_extras.so. Make sure that you are callin g the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consi stent between this macro and your XML. Error string: Could not load library (Poc o exception = libcudart.so.6.0: cannot open shared object file: No such file or directory)
    [ERROR] [1450191971.642961757]: Failed to load nodelet [/viewer] of type [image_ view/image] even after refreshing the cache: Failed to load library /opt/ros/jad e/lib//libimage_view.so. Make sure that you are calling the PLUGINLIB_EXPORT_CLA SS macro in the library code, and that names are consistent between this macro a nd your XML. Error string: Could not load library (Poco exception = libcudart.so .6.0: cannot open shared object file: No such file or directory)
    [ERROR] [1450191971.643283086]: The error before refreshing the cache was: Faile d to load library /opt/ros/jade/lib//libimage_view.so. Make sure that you are ca lling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are c onsistent between this macro and your XML. Error string: Could not load library (Poco exception = libcudart.so.6.0: cannot open shared object file: No such file or directory)

    I try to use camera but don’t know how to do .

    1. Which version of L4T are you using? The error appears to be having an issue with the CUDA installation (libcudart is part of CUDA). Is CUDA loaded on your Jetson?

      It looks like you are trying to use ROS Jade, the demonstration above uses Indigo. I haven’t tried to use Jade yet.

  2. I use L4T 21.4 . I try to use jade to connect Pixhawk as well as a Logitech C270 Webcam .Firstly I use indigo but it tells me cannot open image_view,I install image_view use apt-get install ros-indigo-image-view but not works.then I try to use jade and meet this problem

        1. The error message is that you are missing libcudart.so.6 so you need to find out if that is installed on your machine.
          If you are using L4T 21.4, the matching CUDA version 6.5
          I am not sure if having both versions on your machine is an issue.
          Does the webcam work in the Cheese application?

          1. The webcam didn’t work in the Cheese. Cheese crashes.I remove cuda 6.5 and use 6.0 for L4T 19.4 and it work.I will check if it work with 6.5 later and post

Leave a Reply

Your email address will not be published. Required fields are marked *

Disclaimer

Some links here are affiliate links. If you purchase through these links I will receive a small commission at no additional cost to you. As an Amazon Associate, I earn from qualifying purchases.

Books, Ideas & Other Curiosities