---
title: Your first robotic arm with Ubuntu Core, coming from Niryo
description: Niryo's 3D-printed, affordable robotic arm is fully open source and based
  on ROS. Great for education and to start robotic development with Ubuntu.
url: https://canonical.com/blog/your-first-robotic-arm-with-ubuntu-core-coming-from-niryo?format=md
---

1. [Blog](https://canonical.com/blog)
2. Article

---

[alfonsosanchezbeato](https://canonical.com/blog/author/alfonsosanchezbeato "More about alfonsosanchezbeato")

on 18 June 2019

# Your first robotic arm with Ubuntu Core, coming from Niryo

[niryo](https://canonical.com/blog/tag/niryo)
[Raspberry Pi](https://canonical.com/blog/tag/raspberry-pi)
[robotics](https://canonical.com/blog/tag/robotics)
[ROS](https://canonical.com/blog/tag/ros)
[snapcraft](https://canonical.com/blog/tag/snapcraft)
[Snaps](https://canonical.com/blog/tag/snaps)
[Ubuntu Core](https://canonical.com/blog/tag/ubuntu-core)

Share on:* [Facebook](https://www.facebook.com/sharer/sharer.php?u=https://www.canonical.com/blog/your-first-robotic-arm-with-ubuntu-core-coming-from-niryo "Share on Facebook")
* [Twitter](https://twitter.com/share?text=Your%20first%20robotic%20arm%20with%20Ubuntu%20Core%2C%20coming%20from%20Niryo&url=https://www.canonical.com/blog/your-first-robotic-arm-with-ubuntu-core-coming-from-niryo&hashtags=ubuntu "Share on Twitter")
* [LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https://www.canonical.com/blog/your-first-robotic-arm-with-ubuntu-core-coming-from-niryo&title=Your%20first%20robotic%20arm%20with%20Ubuntu%20Core%2C%20coming%20from%20Niryo "Share on LinkedIn")

---

---

## Newsletter signup

Get the latest Canonical news and updates in your inbox.

Work email:

\*I agree to receive information about Canonical's
products and services.

By submitting this form, I confirm that I have read and agree to [Canonical's Privacy Policy](https://canonical.com/legal/data-privacy).

Sign up

> Please note that this blog post has out technical information that may no longer be correct. For latest updated documentation about robotics in Canonical please visit <https://ubuntu.com/robotics/docs>.

[Niryo](https://niryo.com/) has built a fantastic 6-axis robotic arm called ‘Niryo One’. It is a 3D-printed, affordable robotic arm focused mainly on educational purposes. Additionally, it is fully open source and based on [ROS](https://www.ros.org/). On the hardware side, it is powered by a Raspberry Pi 3 and NiryoStepper motors, based on Arduino microcontrollers. When we found out all this, guess what we thought? This is a perfect target for [Ubuntu Core](https://ubuntu.com/core) and snaps!

When the robotic arm came to my hands, the first thing I did was play with [Niryo Studio](https://niryo.com/download/); a tool from Niryo that lets you move the robotic arm, teach sequences to it and store them, and many more things. You can programme the robotic arm with Python or with a graphical editor based on Google’s [Blocky](https://developers.google.com/blockly/). Niryo Studio is a great tool that makes starting on robotics easy and pleasant.

Nyrio Studio

After this, I started the task of creating a snap with the ROS stack that controls the robotic arm. [Snapcraft](https://snapcraft.io/) supports ROS, so this was not a difficult task: the `catkin` plugin takes care of almost everything. However, as happens with any non-trivial project, the Niryo stack had peculiarities that I had to address:

* It uses a library called [WiringPi](http://wiringpi.com/) which needs an additional part in the snap recipe.
* GCC crashed when compiling on the RPi3, due to the device running out of memory. This is an issue [known by Niryo](https://niryo.com/docs/niryo-one/developer-tutorials/get-started-with-the-niryo-one-ros-stack/) that can be solved by using only two cores when building (this can be done by using `-j2 -l2` make options). Unfortunately we do not have that much control when using Snapcraft’s `catkin` plugin. However, Snapcraft is incredibly extensible so we can resort to creating a [local plugin](https://docs.snapcraft.io/writing-local-plugins) by copying around the `catkin` plugin shipped with Snapcraft and doing the needed modifications. That is what I did, and the `catkin-niryo` plugin I created added the `-j2 -l2` options to the build command so I could avoid the GCC crash.
* There were a bunch of hard coded paths that I had to change in the code. Also, I had to add some missing dependencies, and there are other minor code changes. The resulting patches can be found [here](https://github.com/alfonsosanchezbeato/niryo_snap/tree/master/patch).
* I also had to copy around some configuration files inside the snap.
* Finally, there is also a Node.js package that needs to be included in the build. The `nodejs` plugin worked like a charm and that was easily done.

After addressing all these challenges, I was able to build a snap in an RPi3 device. The resulting recipe can be found in the [niryo\_snap repo](https://github.com/alfonsosanchezbeato/niryo_snap/) in GitHub, which includes the (simple) build instructions. I went forward and published it in the Snap Store with name `abeato-niryo-one`. Note that the snap is not confined at the moment, so it needs to be installed with the `--devmode` option.

Then, I downloaded an [Ubuntu Core image](http://cdimage.ubuntu.com/ubuntu-core/16/stable/ubuntu-core-16-pi3.img.xz) for the RPi3 and flashed it to an SD card. Before inserting it in the robotic arm’s RPi3, I used it with another RPi3 to which I could attach to the UART serial port, so I could run console-conf. With this tool I configured the network and the Ubuntu One user that would be used in the image. Note that the Nyrio stack tries to configure a WiFi AP for easier initial configuration, but that is not yet supported by the snap, so the networking configuration from console-conf determines how we will be able to connect later to the robotic arm.

At this point, snapd will possibly refresh the kernel and core snaps. That will lead to a couple of system reboots, and once complete  those snaps will have been updated. After this, we need to modify some files from the first stage bootloader because Niryo One needs some changes in the default GPIO configuration so the RPi3 can control all the attached sensors and motors. First, edit `/boot/uboot/cmdline.txt`, remove `console=ttyAMA0,115200`, and add `plymouth.ignore-serial-consoles`, so the content is:

```
dwc_otg.lpm_enable=0 console=tty0 elevator=deadline rng_core.default_quality=700 plymouth.ignore-serial-consoles
```

Then, add the following lines at the end of `/boot/uboot/config.txt`:

```
...
# For niryo
init_uart_clock=16000000
dtparam=i2c1=on
dtparam=uart0=on
```

Now, it is time to install the needed snaps and perform connections:

```
snap install network-manager
snap install --devmode --beta abeato-niryo-one
snap connect abeato-niryo-one:network-manager network-manager
```

We have just installed and configured a full ROS stack with these simple commands!

The robotic arm in action

Finally, insert the SD card in the robotic arm, and wait until you see that the LED at the base turns green. After that you can connect to it using Niryo Studio in the usual way. You can now handle the robotic arm in the same way as when using the original image, but now with all the Ubuntu Core goodies: minimal footprint, atomic updates, confined applications, app store…

As an added bonus, the snap can also be installed on your x86 PC to use it in simulation mode. You just need to stop the service and start the simulation with:

```
snap install --devmode --beta abeato-niryo-one
snap stop --disable abeato-niryo-one
sudo abeato-niryo-one.simulation
```

Then, run Niryo Studio and connect to 127.0.0.1, as simple as that – no need at all to add the ROS archive and install manually lots of deb packages.

And this is it – as you can see, moving from a ROS debian based project to Ubuntu Core and snaps is not difficult, and has great gains. Easy updates, security first, 10 years updates, and much more, is a few keystrokes away!

#### Related posts

---

[Florencia Cabral Berenfus](https://canonical.com/blog/author/flor-cabral)

17 December 2025

### [Extending ROS Noetic Support with ESM-Enabled Content Snaps](https://canonical.com/blog/extending-ros-noetic-support-with-esm-enabled-content-snaps)

Robotics

Ubuntu tech blog

Canonical has now extended its ESM (Expanded Security Maintenance) for ROS coverage to ROS Noetic content-sharing snaps. With ESM for ROS now available in both deb and snap formats, Ubuntu continues to be the trusted foundation for secure, long-term robotics innovation. ...

---

[Gabriel Aguiar Noury](https://canonical.com/blog/author/g-aguiar-noury)

22 October 2025

### [Discover your fully open source robotics observability at ROSCon 2025](https://canonical.com/blog/roscon-2025)

Robotics

Ubuntu tech blog

Another year, another ROSCon! This year we’re heading to Singapore, and Canonical is once again thrilled to sponsor this important community event. Just like last year in Odense, Denmark, we’re looking forward to the talks and workshops, which always inspire us and teach us new things about robotics. We’re excited to reconnect with our So ...

---

[Gabriel Aguiar Noury](https://canonical.com/blog/author/g-aguiar-noury)

20 August 2025

### [Canonical is now a platinum member in the Open Source Robotics Alliance](https://canonical.com/blog/osra-membership)

Robotics

Ubuntu tech blog

Ubuntu is the home of ROS. The very first ROS distribution, Box Turtle, launched on Ubuntu 8.04 LTS, Hardy Heron, and since then, Ubuntu and ROS have grown hand in hand. With every Ubuntu LTS release, a new ROS distribution follows, an intentional alignment that ensures ROS works out of the box on Ubuntu Desktop, ...
