Beaglebone Black: Ubuntu 14.04 + ROS (Indigo) install

I have started to update my old projects with Beaglebone Black and ROS Indigo version.


Before ROS installation the best option is to install the Ubuntu 14.04(LTS) arm version. It is recommended because package install will be available for ROS and there’s no need to build the them.

Ubuntu Arm 14.04 Install

I had chosen to install it on an SD card (16GB class 10) since then there will be more than enough space for everything I need. The other option could be to use eMMC on-board flash storage, but that has only 4GB space.

1. Download the image to your computer. Update: the image no longer available here is another image
2. On Windows unpack the above downloaded file and use the Win32DiskImager to write the image on the SD card.
3. Put the SD card to the Beaglebone Black, and press and hold the switch 2
bbbsw2 while you are booting.
4. Login to the Beaglebone Black via ssh, user/pass ubuntu/temppwd .

Ubuntu post install steps

The partition will be only 2Gb you can check if you ssh to the BBB and give the following command:

df -h

To have the full card size use the following commnads on the BBB:

cd /opt/scripts/tools
git pull
sudo ./
sudo reboot

Changing the kernel version

The bone-ubuntu-14.04.2-console-armhf-2015-07-08-2gb.img image has some issues with the kernel. It only allows 720Mhz for the maximum frequency. It can be seen if the


command has given in the BeagleBone Black terminal. It is easy to fix this, all that needs to be done is to change the kernel version. Once again give this on the BBB:

sudo apt-get update
sudo apt-get install linux-image-4.1.3-ti-r7

I have tried this version and it worked for me. See more info in this link.

Optional post step

The Beaglebone Black has only 512 MB ram, any extra memory could come handy. It can be extended by creating swap file on the SD card. On the BBB:

sudo mkdir -p /var/cache/swap/   
sudo dd if=/dev/zero of=/var/cache/swap/swapfile bs=1M count=1024
sudo chmod 0600 /var/cache/swap/swapfile 
sudo mkswap /var/cache/swap/swapfile 
sudo swapon /var/cache/swap/swapfile 

Change the /etc/fstab file to have these settings even after reboot.

/var/cache/swap/swapfile    none    swap    sw    0   0

More info .

I have followed this guide, here is more useful information about the linux installation on BBB.

ROS Indigo Install

Jade is the latest version of the ROS, but since Indigo has the LTS (Long Term Support) I will stick with this version. SSH to the BBB and give the following command series:

1. Setting the locale


2. Setup sources.list

sudo sh -c 'echo "deb trusty main" > /etc/apt/sources.list.d/ros-latest.list'

3. Setup keys

wget -O - | sudo apt-key add -

4. Installation

sudo apt-get update
sudo apt-get install ros-indigo-ros-base

5. Initialize rosdep

sudo apt-get install python-rosdep
sudo rosdep init
rosdep update

6. Environment setup

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

More information about the installation can be found here.

After installation everything is in place. If you are new to the ROS I recommend these tutorials.

Here is a sneak-peek what can be done easily with ROS and BBB:

20 thoughts on “Beaglebone Black: Ubuntu 14.04 + ROS (Indigo) install

  1. rosdep init and rosdep update don’t seem to be able to retrieve files
    rosdep init can be bypased by using wget and manually downloading 20-default.list into the rosdep directory. However, not sure how to manually satisfy rosdep update (getting errno 1 on each file)
    Looking around it seems that the issue lies with SSLv3 requirements, and python 2.7 only seems to support SSL23.
    Any advice, I’ve followed through your steps and thats the only issue I’ve been having

    1. That is one of the issues I encountered on my laptop (no wonder). It’s very annoying and have to say that it even depends on ISP. I ha e the same issues when I’m at home, but the university for instance seems to provide those certificates so from there the same thing on the same laptop works…

      I actually haven’t got around figuring this out

  2. Hey, nice tutorial! I have a question though. After I upgraded the Kernel to 4.x I got issues with the Adafruit BBIO library which I used to contrl the PWM pins on the BBB (and worked fine with the 3.8 Kernel). So my question, are you using and did you manage to get the PWM pins to work with your rover? Cheers!

    1. Thank you!:). Currently I’m not using the PWM on the BBB. I have a Tiva launchpad and controlling it through Rosserial. For that reason I haven’t faced this issue yet. However my plan is to use directly the PWM on BBB, when I’ve managed it I will share the howto with you.

  3. Hello, I am sorry for duplicating my message in this branch but may be it is better to post it here. I would like to write a wrapper ROS (Indigo) code for BeagleBone (Rev. C) with the installed Debian 8.7 2017-03-19 4GB SD IoT image on it. I installed the latest image available at Would suggested procedure work for my configuration?
    Thank you!

    1. Hi,

      If you want to use Debian 8.7, then I would recommend to use ROS – Kinetic (latest version). Here is the guide for that. I haven’t checked the changes in Kinetic after Indigo, but I know that catkin build system is still there in Kinetic.
      I you want to keep the ROS – Indigo, then there is image for Wheezy Debian on and here is the instructions for that combination.
      I vote on doing the 1st version(Jessie + Kinetic).
      To back to your original question, I had a quick look on the differences between two install instructions and I haven’t seen big changes, however I recommend to use directly the ROS wiki. Hope that helps!

      1. Thank you for the great answer. May be you could help me to clear some more things? First, I have no freedom to switch to the ROS-Kinetic and have to keep the ROS-Indigo. I am using Jessie because it was in the latest image. I wrote some scripts suing gpio, adc, and pru and I would like to control them using the ROS-Indigo. I can change the image but will I keep the functionality of stuff I have done so far (tree-overlay, c- and assembly code)? What would you recommend in this case (Ubuntu or Wheezy Debian, or may be something else)?

      2. I have tried the combination that I mention in this article( Indigo + Ubuntu 14.04) and all the issues I had I was able to resolve. Unfortunatly I don’t find the full images for BB anymore however you could try out the min fs version. I expect that you have to download a lot of packages and might have to change the kernel to your flavor( to make sure that gpio, etc. works properly).
        Other option is to take the latest the 16.04 image and use docker to make Indigo work together with this version. I have never tried this but in theory it could work. @bmagyar might able to help you out, I will check with him.
        I would spend a few day just to try out different combinations to find out which fits the best for you. My vote is on Ubuntu it is well supported for ROS, but of course you need to make sure it fits your needs.

        One more thing, if you finished with your project and you put it to a public place( eg.: github) please don’t forget to share with us! 🙂

      3. Hello,

        thank you again! I am sorry for late reply, I got sick and went to bed early yesterday.

        Yes, I will try different combinations and see what works. I have only one BB, therefore, before I start experiments, I will document everything I have done so far:) I will try things that you mentioned before using Docker and if nothing get work I will ask again for your help with the use of Docker.

        I would gladly upload everything I did, and I would ask for your feedback but I am not sure I am allowed to do that. I am doing unpaid intern and signed some disclosure papers. I will ask. However, I did not do anything fancy like you did or would not be accessible on web, in my project BB serve as a hardware management system (reading signals from adc, dc-dc convertors,
        sensors, control ssr …).

        I am sorry for off-topic but I could not get two prus working. I wanted to split assembly code for three sensors in two parts (2+1) and use first 12 bytes of their shared memory at 0x00010000 to write/read their signals but only first prussdrv_exec_program() worked in any combination of two exec lines. So, I am using one pru for all three sensors.

        prussdrv_map_prumem(PRUSS0_SHARED_DATARAM, &pruDataMemory);

        prussdrv_exec_program (0, “./pru0.bin”);
        prussdrv_exec_program (1, “./pru1.bin”);

        Thank you for your help!!!

      4. Hi,
        Unfortunatly I couldn’t bring the PRU-s to live on my projects. I’m a newbie in that area, but that is definetly my next step to learn. For that reason I cannot help in these issues. I’m currently using a TIVA launchpad with rosserial to avoid these.

      5. Hi,

        I could not get interrupts working for prus 🙂 I am doing address poling. And as I understand, the PRU‐ICSS is not currently supported by Texas Instruments. I might move to the TIVA launcpad as well.

Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.