< All Topics

NEPI Engine – Customizing the NEPI File System


This tutorial will walk you through how to customization different components of the NEPI Engine File System that would be useful for NEPI developers.

What you will need:

1) 1x NEPI-enabled device with internet access. This tutorial uses an edge-compute processor box that includes an NVIDIA Jetson Xavier NX embedded GPU with NEPI Engine software installed.

NOTE: See available off-the-shelf NEPI enabled edge-compute options at: https://numurus.com/products-nepi-enabled-hardware/

2) 1x PC with internet access and configured to access the NEPI device’s File System.

NOTE: Instructions for configuration a PC and connecting to a NEPI device’s File System are provided in the NEPI Engine – Getting Started – Accessing the NEPI File System tutorial at: https://nepi.com/nepi-tutorials/

Customizing NEPI System Configuration

While most NEPI Engine settings are configurable through the RUI, API calls, and user c, there are some low-level configuration items like serial number, logos, and SSH keys that require changes at the file system level using SSH access. The following sections assume you have set up and tested your SSH access as described in the “Accessing the NEPI File System” tutorial.

Assuming you have set up an SSH alias as described during the SSH setup process, just open a terminal on your Linux connected PC and type:


NOTE: Both Linux vi and nano editors are installed in the NEPI file system. While this document uses the vi editor in examples, some might find the nano editor easier to use.

Add Useful Command Line Shortcut Aliases

If you would like to set up useful short cut commands for your NEPI device SSH terminal, do the following from an SSH connected terminal window:

sudo vi ~/.bashrc

Then add any aliases to simplify your work. The following aliases and source commands are pre-installed on most NEPI images:

alias ros="source /opt/nepi/ros/setup.bash"

alias rosstop="sudo systemctl stop roslaunch"

alias rosstart="sudo /opt/nepi/ros/etc/roslaunch.sh"

alias auto="cd /mnt/nepi_storage/automation_scripts/"

alias data="cd /mnt/nepi_storage/data/"

alias ai="cd /mnt/nepi_storage/ai_models/"

alias installs="cd /mnt/nepi_storage/installs/"

alias nuid="cd /opt/nepi/nepi_link/nepi-bot/devinfo/"

alias connect="cd /opt/nepi/nepi_link/nepi-bot/lb/data/"

source /opt/nepi/ros/setup.bash

Change Serial Number

If you would like to give your NEPI device a unique serial number and device name, do the following from an SSH connected terminal window:

vi /opt/nepi/sys_env.bash

Then edit the value next to the “DEVICE_SN=” entry.

Change System Base IP Address

While NEPI Engine allows adding additional IP address aliases that make it easy to integrate a NEPI-enabled device into an existing local area network (LAN), the system’s factory base IP address ( is only changeable through file system configuration editing. If you plan to connect multiple NEPI-enabled devices to the same LAN, you will need to make sure that they each have a unique Base IP Address. Once changed, you will need to remember this address to access your system, so it is recommended that you:

NOTE: use an IP address close to the original one such as ( making it easier to remember as well as search for the system in a block of IP addresses if you forget the new value

To change your NEPI system’s base IP address, you will need to do the following from a ssh connected terminal window and edit the “address” value in the file:

vi /etc/network/interfaces.d/nepi_static_ip

Change NEPI CONNECT Configuration

If you plan to use your NEPI-enabled device to upload data and download software to a remote server running Numurus’ NEPI Connect software you may need to modify some of you NEPI device’s NEPI Connect configuration files.

1) Check that your NEPI device has a valid NEPI Connect Unique NEPI ID (NUID) and public SSH key in the “NEPI CONNECT” box on the device’s RUI APPLICATIONS/CONNECT tab as shown below.

A screenshot of a computer Description automatically generated

If your 10 digit NUID is set to “9999999999” and/or the Public SSH Key box is empty, your system has not yet been configured for NEPI Connect communications. If this is the case, use the following instructions to set up the NEPI Connect credentials on your device:

If you need to configure a NEPI NUID and NEPI Connect public SSH key, use the instruction below to create or update them:

a) Run the NEPI Connect identity application

cd /opt/nepi/nepi_link/nepi-bot/devinfo

python3 change_identity.py -n <Your 10 digit NUID>

For security reasons, it is recommended that you use some random number generator to generate a random 10 digit NUID value. For example:

python3 change_identity.py -n 3989789099

b) Press enter twice to skip a passphrase and (optional) press p to display the key in the terminal.

c) After rebooting your NEPI device the new NUID and public SSH key you just created should now be visible in the RUI APPLICATIONS/CONNECT tab.

2) The internet address NEPI devices try to connect to during a NEPI Connect connection process is set in a configuration file on the device’s NEPI file system. The default NEPI Connect server address set on new installation’s is to a Numurus hosted NEPI Connect installation at address nepi.io. If you are connecting to a NEPI Connect installation at another internet location, you will need to use the following instructions to change that location on your device:

a) Open NEPI Engine’s “NEPI bot” config file and edit the NEPI Connect installation location using the following commands:

cd /opt/nepi/nepi_link/nepi-bot/cfg/bot

nano config.json

b) Then edit the “host” address value under the NEPI Link communications type(s) you plan to use.

Example: If you are connecting using an IP communications gateway (Ethernet, WiFi, Cellular…) you would edit the “host” ip location under the “lb_ip” address driver configuration. This could be either an intent domain name like “nepi.io” or a numeric IP address like “”.

A screen shot of a computer program Description automatically generated

c) After rebooting your NEPI device will use these new NEPI Connect location values.

Customizing and Compiling NEPI ROS Nodes

As the NEPI Engine source-code is available both from the NEPI Engine repo and included with pre-built NEPI Engine file system images, anything and everything is customizable as you create your own custom solution.

Assuming you have set up an SSH alias as described during the SSH setup process, just open a terminal on your Linux connected PC and type:


Editing NEPI ROS Nodes

Much of the NEPI Engine solution is built on custom ROS nodes. You can access the source code folders by typing:

cd /home/nepi/nepi_base_ws/src/

Then navigate to the “src” subfolder in any of the node folders and edit the “.ccp” files in those folders. You can also add new ROS nodes to this folder.

Compiling NEPI ROS Nodes

After modifying or adding ROS nodes in this folder, you need to recompile the nodes following these instructions:

1) Open the RUI’s DASHBOARD tab and click the “Sync Clocks” button to update the NEPI system time.

2) In your SSH terminal type the following


cd /home/nepi/nepi_base_ws

Then either compile a single node by entering:

catkin build --profile=release <name_of_node_to_compile>

Example: catkin build –profile=release nepi_edge_sdk_nav_pose

or all nodes by entering:

catkin build --profile=release

3) Power cycle your system.

NOTE: If your system fails to start ROS up do to an error in your changes, NEPI Engine will boot into the in active root file system after 3 unsuccessful attempts.

Configuring NEPI’s ROS Launch File

During the NEPI Engine boot process, all ROS nodes are started from the “nepi_base.launch” file. You can edit this file by typing:

cd /opt/nepi/ros/share/nepi_edge_sdk_base/launch/

vi nepi_base.launch

Within the file, you can change which nodes are started or not by modifying the “default=” value in that nodes “arg name” line.

You can also add new nodes to launch. The following is an example of adding a new ZED stereo camera node to the launch file.

1) Add the following argument to the list of arguments near the top of the file using the vi insert mode option by pressing “i” and editing the file:

<arg name="run_zed_wrapper_node" default="true" />

2) While still in insert mode, add the following lines before the last </group> message in the file. Ensure that the indentations match other group indentations.

<group if="$(arg run_zed_wrapper_node)" >

<!-- ROS nodes: Launch Zed Camera -->

<include file="$(find zed_wrapper)/launch/zed2.launch"/>


A screen shot of a computer code Description automatically generated

3) Press “esc” to exit insert mode, then hit the “Shift-:” to enter command mode and type “wq” then hit enter to save and exit.

Customizing and Compiling NEPI RUI

NEPI’s web-browser supported Resident User Interface system is built on JavaScript and React, a JavaScript-based UI development library. The RUI interacts with the NEPI ROS-based application system through a custom ROS-HTML Bridge Node that converts data back and forth between the two environments. All data and controls available on the RUI have a ROS based interface, and vice versa.

The NEPI RUI front-end codebase is located in the following folder in the NEPI file system:


And the NEPI RUI front end JavaScript code is located in:


Editing the RUI Menu

You can modify the RUI’s top menu by following these instructions:

1) Open the App.js menu file

cd   /opt/nepi/nepi_rui/src/rui_webserver/rui-app/src

vi App.js

2) Edit the menu, save, and exit

Changing the Company Logo Image

You can update the logo shown at the top-left of the RUI screen using the following instructions:

A blue rectangle with red and white text Description automatically generated

1) Create a logo with the correct aspect ratio

Logo (1004×254): ~4:1

2) Convert your PNG/JPG image to webp format. Many browser-based web tools can do this. E.g., https://cloudconvert.com/webp-converter

3) Change the logo file on the device to your new webp-formatted file(s) using scp or sftp:


Editing or Creating RUI Tabs

Each tab in the RUI web application is management by its own “.js” file (i.e. Dashbard.js). Within these js page files, the page is defined by a combination of JavaScript/react layout directives and mappings to NEPI ROS topics and services defined by the NEPI back-end codebase (see next section).


renderSaveData() {

const { onToggleSaveData, systemStatusDiskRate, deleteAllData } = this.props.ros

return (

<Section title={"Save Data"}>

<Label title={"Save Data"}>

<Toggle id={"toggle_save_data"} onClick={onToggleSaveData} />

Where the RUI DASHBOARD tab’s “Save Data” section is defined by the “renderSaveData()” function, which maps the “onClick” js variable to the ROS-bridge mapped “onToggleSaveData” service, which connects to the NEPI ROS “/nepi/s2x/save_data” system control topic.

Editing or Creating RUI-ROS Interfaces

The RUI interfaces with the NEPI Engine ROS processes through a ROS to JSON and ROS to HTML bridge. These bridge data and control mappings are located in the file:


You can edit or add new RUI-ROS bridge interfaces within this file

Rebuilding Front-End Changes

After making any changes to the RUI front-end codebase, you will need to rebuild the application using the following instructions:

1) Open an SSH connected terminal to your NEPI device and source the RUI dev environment:

cd /opt/nepi/nepi_rui

source devenv.sh

2) Rebuild the RUI front end:

cd src/rui_webserver/rui-app

npm run build

3) Reload the RUI page on your browser (might need a cache-clearing reload via ctl+shift+r).

Accessing the NEPI User Storage Drive

NEPI’s onboard user storage drive is where users can manage their data, AI models, automation scripts, databases, software configuration, and more.

File System Folder: /mnt/nepi_storage/

The user storage drive is factory configured with the following factory folders:

ai_models:  AI image detection model library

automation_scripts:  Automation script library

data:  Onboard logged data folder

databases:  Databases required for automation scripts

docs:  Manuals and API documentation

license:   System license files and license request files

logs: System generated logs are stored

nepi_full_img: Install (upgrading) system image files

nepi_full_img_archive: Archived (backup) system image files

user_cfg: User and system configuration files

Table of Contents