Skip to content

stephendade/Rpanion-server

Repository files navigation

GitHub Actions Coverage Status

User Documentation is at https://www.docs.rpanion.com/software/rpanion-server

Rpanion-server

This is a node.js based server for companion computers used in Mavlink-based vehicles (ie Ardupilot, PX4).

It presents a web-based interface (running on the companion computer), where system settings such as network, telemetry and video streaming can be configured from.

On the Raspberry Pi, Rpanion-server is compatible with the Raspberry Pi OS and Ubuntu 20.04 LTS.

On the Nvidia Jetson, Rpanion-server is compatible with Ubuntu 18.04 LTS.

On the Nvidia Jetson Orin, Rpanion-server is compatible with Ubuntu 22.04 LTS.

On the Libre Computer Le Potato, Rpanion-server is compatible with their flavor of Raspberry Pi OS.

Note

Some users may have issues connecting to the UART on the Raspberry Pi 3B+. Further details and configuration fixes are at #215 (comment).

Note

For the Raspberry Pi CM4, Wifi AP performance is typically poor when using the internal antenna. It is recommended to use an external antenna. Additionally any CSI cameras will not be autodetected. See here for more details.

Features

Rpanion-server allows the user to configure:

  • Flight Controller telemetry routing to udp outputs
  • Video Streaming via an RTSP server
  • Network configuration
  • NTRIP Streaming
  • Logging (tlog and bin logs)

Installing

Rpanion-server has pre-built debian packges for arm64 platforms (Jetson, Raspberry Pi, etc). This is the easiest way to get started.

There are also full disk images with a pre-configured Wifi hotspot for the Raspberry Pi.

Prerequisites

To (optionally) use the Zerotier and/or Wireguard VPN's, install as follows:

curl -s https://install.zerotier.com | sudo bash
sudo apt install wireguard wireguard-tools

Then install the required packages:

sudo apt install -y gstreamer1.0-plugins-good libgstrtspserver-1.0-dev gstreamer1.0-plugins-base-apps
sudo apt install -y gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad python3-netifaces
sudo apt install -y network-manager python3 python3-dev python3-gst-1.0 python3-pip dnsmasq git ninja-build jq
sudo apt install -y libxml2-dev libxslt1-dev python3-lxml python3-numpy python3-future gpsbabel zip

If running on RasPiOS, install the libcamera drivers:

sudo apt install -y gstreamer1.0-libcamera python3-picamera2 python3-libcamera python3-kms++

Install Nodejs:

sudo apt install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

sudo apt update
sudo apt install -y nodejs

Then install Rpanion-server:

sudo dpkg -i rpanion-server-xxx.deb

After installation, Rpanion-server will be available at http://<device_ip>:3001

Raspberry Pi notes

The Raspberry Pi Zero W(1) and Raspberry Pi 2 are not supported from version 0.10.0 onwards.

Note the CSI camera does not currently work on Ubuntu 22.04 and 24.04, due to incompatibilities with the Raspberry Pi.

Note the GPIO UARTs are not currently working with Ubuntu 24.04.

If an older version of the Raspberry Pi OS is used (Buster, V10 or below), the gst-rpicamsrc Gstreamer element must be installed. See https://github.com/thaytan/gst-rpicamsrc for install instructions.

Automatic (Libre Computer AML-S905X-CC aka 'Le Potato') notes

If using a usb to serial converter, you might need to modify permissions of the device.

Temporary device permission update

sudo chmod 666 /dev/ttyACM0

Persistent device permission update

Follow the steps on this site for your specific device: https://www.xmodulo.com/change-usb-device-permission-linux.html

Building and Running in development mode

The mavlink-router (https://github.com/mavlink/mavlink-router) software is used for backend routing and is required to be installed.

Follow the scripts in the /deploy folder for your selected platform to set up the development environment.

Running in development mode allows for any code changes to trigger a restart of Rpanion-server.

Rpanion-server consists of a node.js server running on port 3001 and a React frontend application running on port 3000 in development mode.

Run both applications (front and back end) together, use the command:

npm run dev

It is important to only use npm run dev during development, as it will skip the user login and authentication checks.

At this point, the website will be active at http://<ip of device>:3000

Default username and password

Rpanion-server has access control in place to prevent unauthorised users from making changes to the system via the GUI.

The access control does not apply to any MAVLink or video streams

The default username is admin and password admin. This can be changed on the "User Management" page.

Usernames and passwords are stored in the user.json file in the Rpanion-server folder. Resetting this file (via git checkout user.json) will reset the usernames/passwords back to it's defaults.

Tests

Unit tests are split into separate commands for the frontend (ReactJS) and backend.

Unit tests can be run with the command:

npm run testback
npm run testfront

Code coverage statistics are automatically calculated for the backend tests.

Linting (via eslint) is available via:

npm run lint

Releasing

Use npx npm-check-updates -u to update nodejs libraries.

Use npm version minor to create a new release commit.

Then update the changelog.md and amend this to the commit.

Then "git push --tags" to create the release PR.

To produce a disk image from a SD card, insert the card and run ./deploy/create_image.sh.