Pilotanywhere is currently in alpha phase. Thus, please report any bugs or difficulties to

Pilotanywhere needs a fast and stable internet connection to establish a link to your vehicle. We recommend at least 2,5 MBit/s for uploads and 10 MBit/s for downloads. Depending on the quality of the internet connection of the vehicle, it might take several attempts to establish a link between Pilotanywhere and the vehicle.

Please test the connection of your vehicle to Pilotanywhere at home, in your lab or in your office first, before you actually go out and control your vehicle using our platform.

Web browsers

Pilotanywhere works best in Chrome (54 or higher) and Firefox (50 or higher) and requires the Adobe Flash Player (23 or higher) plug-in. If you use another web browser such as the Internet Explorer or Safari, you may not see the video stream or use all current features.

Flight controllers

Pilotanywhere works only with vehicles that are able to communicate over MAVLink. It is most compatible with the ArduPilot flight controller. However, you are advised to use only vehicles that run the ArduCopter (or APM:Copter) flight controller, since we have tested Pilotanywhere so far only against this controller. Nevertheless and despite this compatibility, the use of this platform takes place at your sole risk. For more details, see Terms and Conditions of Use.

Please note that Pilotanywhere runs DroneKit (DroneKit-Python, Version: 2.9.0) to establish the MAVLink connection to your vehicle.

Needed configuration

You must configure the location of your vehicle and upload it to your channel. Otherwise, you or your channel users will not be able to control your vehicle.

Just download the following configuration file

customize it and upload it to your channel. The location.conf should reflects your local factors. It also defines the behaviour of your vehicle after launch, e.g. the take-off altitude, the coordinates of the viewpoints or the waypoints of your missions. In addition, it defines several key safety features, e.g. the max altitude of the geofence or the battery level triggering return to launch.

You may change the name of the file and the parameter values. Do not make any other changes to the file! In particular, please do not use any special characters and do not comment out any lines or parameters. The content of the file is self-explaining. But you should exactly know what the parameters are used for. If not, do not upload it to our platform! We do only some rudimentary checks of its content, before and after your upload. We do not check, if your parameter specifications are correct for your location and vehicle!

Needed hardware and software

You may use the following hardware and software to connect to Pilotanywhere.

Needed hardware

  • Solo from 3D Robotics with a GoPro (Hero 3+ Black or Hero 4)
  • Raspberry Pi (we recommend the Raspberry Pi 3 Model B)
  • 4G cellular dongle (with an appropriate data plan)
  • USB power source (e.g. a notebook of your choice)
  • Micro USB Data cable (connecting the power source and the Raspberry Pi 3)

The Raspberry Pi is used for forwarding the MAVLink messages and the video stream to Pilotanywhere, using MAVProxy and one of our video streaming tools. The 4G cellular dongle is used to create the internet link.

You can of course use any other hardware setup to establish a MAVLink communication and to stream the video to your Pilotanywhere channel. If you already happen to have an off-the-shelve encoder, your hardware setup could look as follows.

  • Solo from 3D Robotics with a GoPro (Hero 3+ Black or Hero 4)
  • Raspberry Pi (we recommend the Raspberry Pi 3 Model B)
  • HDMI video encoder (e.g. the Teradek VidiU)
  • 4G-WLAN-Router (e.g. the TL-MR3020)
  • Cat 5e twisted pair cable, 1 m (connecting Raspberry Pi and the 4G-WLAN-Router)
  • HDMI cable, mini to standard, 1 m (connecting Solo controller and the video encoder. The Solo controller has a mini HDMI output!)
  • 4G cellular dongle (with an appropriate data plan)
  • USB power source (e.g. a notebook of your choice)
  • (Micro) USB Data cable (connecting the power source, the 4G-WLAN-Router and the Raspberry Pi 3)

Here, the Raspberry Pi is used for forwarding the MAVLink messages. The video encoder is used for forwarding the RTMP video stream. The 4G-WLAN-Router works as a switch for the Raspberry Pi, the video encoder and the 4G cellular dongle.

Using an off-the-shelve encoder instead of the Raspeberry Pi for video streaming is usually more expensive. But the encoder might give you some additional features compared to our video streaming tools. Your encoder may also run more stable, depending on your internet connection.

Needed software

Please install MAVProxy on the Raspberry Pi and establish a MAVLink Bridge to your channel. The appropriate instructions are given further below.

MAVProxy is available for Windows, Linux and Mac. You can of course install MAVProxy on the machine of your choice. In this case, we recommend you to check also the more general descriptions about the MAVProxy Wifi Bridge and the MAVLink Wifi Bridge provided by ArduPilot.

How to connect a vehicle to Pilotanywhere

Connecting a vehicle to out platform is very simple:

  1. install MAVProxy on your Raspberry Pi or the machine of your choice
  2. connect MAVProxy to your vehicle controller
  3. forward the MAVLink messages to our platform using the command streaming details provided in your Pilotanywhere account.
If you want to check whether your Pilotanywhere channel receives the MAVLink messages, go over to your channel and click the connect button. If you see the telemetry data from your vehicle, then you are connected to your vehicle via our platform. You can now exclusively control your vehicle via Pilotanywhere. If you want your channel users to control your vehicle, close the connection and inform your users that your vehicle stands ready to launch.

How to connect the 3DR Solo to Pilotanywhere

If you have a Solo from 3D Robotics and a Raspberry Pi, then you may use the following instructions to connect your vehicle to Pilotanywhere. These steps fully reflect the general steps described above.

Setting up your Raspberry Pi

If you just bought your Raspberry Pi (we recommend the Raspberry Pi 3 Model B), then it will probably need an operating system. Just go over to the official Raspberry Pi homepage, download NOOBS and install Raspbian on your Pi.

Make sure that all packages on your Raspberry Pi are up-to-date. For this, please open the linux command-shell (also command line or shell) by pressing Ctrl+Alt+T, type the following commands and hit enter to update your system (for more details, see bash, if you are not familiar with the linux command-shell):

sudo apt-get -y update && sudo apt-get -y upgrade

The Raspberry Pi should be of course connected to the internet to make the update. If all commands run through without any errors, then your system is up-to-date and ready for the next steps. You may want to install some additional useful packages like htop and nload. The former is a console task-manager, the latter shows the current network traffic. These two packages are not required, but are useful for monitoring your Pi. To get these tools, just execute the commands:

sudo apt-get install htop nload

How to connect a 4G cellular dongle to the Raspberry Pi

You can connect your Raspberry Pi to the internet, either over ethernet or Wifi. You can also use a 4G internet connection, which is very handy when you fly over remote locations. To connect your 4G cellular dongle to the Raspberry Pi, you have to make following configurations.

Firstly, tell the Raspberry Pi, that your 4G cellular dongle is not an USB storage device, but actually an UMTS/4G stick. To do this, plug in you 4G dongle and check, whether your Raspberry Pi has the needed packages installed:

sudo apt-get -y install ppp usb-modeswitch git

Having done this, type in the following command and hit enter, to show your connected usb-devices:


You should see a line, which might look as follows:

Bus 001 Device 009: ID 12d1:14fe Huawei Technologies Co., Ltd.

If you do not see a line like this, then your Raspberry Pi didn't found the 4G stick and you have to repeat the step described above. In other case, i.e. if your Raspberry Pi found the 4G cellular dongle, download the sakis3g program from GitHub by executing the following commands:

cd downloads
git clone
cd sakis3g-source

Please note that your have to change #include <libusb.h> in dependencies/usb-modeswitch/usb_modeswitch.h to #include <libusb-1.0/libusb.h> with a text-editor of your choice and save this file. For more details, see sakis3g. Having done these changes to usb_modeswitch.h, your may compile the program with the following command:


As soon as your compilation is done (without any errors), connect to the internet over the 4G network by executing:

sudo /home/pi/downloads/sakis3g-source/buid/sakis3g OTHER="USBMODEM" USBMODEM="12d1:1506" USBINTERFACE="1" APN="" connect

If you want to disconnect, just execute:

sudo /home/pi/Downloads/sakis3g-source/buid/sakis3g OTHER="USBMODEM" USBMODEM="12d1:1506" USBINTERFACE="1" APN=""  disconnect

If you want to connect to the 4G network at startup, put the first command into your /etc/rc.local.

Please note that it takes some time until the 4G dongle has actually loaded after startup. So please assure that there is enough time between the booting of the Raspberry Pi and the first use of the mobile internet connection.

Important: the name after APN is the name of the network you want to connect, so you have to wirte the networkname of your provider here, otherwise the connect will fail or you can not send any data over this connection.

If you want to save you some time, you can also use this simple script, which does the job described above. If you want to avoid typing in the path to the executable, copy the program into the build folder to /usr/bin, i.e by executing the following commands, which will make the program callable from any folder by typing sakis3.

sudo cp build/sakis3gz /usr/bin/sakis3

Installing MAVProxy

Firstly, run the following command to install python-pip:

sudo apt-get install python-pip

this is necessary, since we will get MAVProxy from the python repositories.

In addition to python-pip, install the required dependencies for MAVProxy running the command:

sudo apt-get install python-opencv python-wxgtk2.8 python-matplotlib python-numpy python-serial python-pil libwxgtk2.8-dev libpython2.7-dev

now install MAVProxy:

sudo pip install mavproxy

You should use sudo, because some files have to be placed into the system folders. This will assure that you are able to launch MAVProxy from the shell.

Connecting your Raspberry Pi to the 3DR Solo Controller

Plug in a display and a mouse into your Raspberry Pi. Power on your Raspberry Pi. After booting, you should see the standard Raspbian screen.

Click on the network icon in upper right corner of the panel. Now turn on the Solo controller and the Solo vehicle and wait until they have booted. Once they are booted, you should see in your panel a local private WiFI network, with a name similar to SoloLink_3B67B3. The numbers in the name of the network vary by your controller.

Now choose this Wifi network and enter the security key. The default password is "sololink". The Raspberry Pi should now be connected to the Solo controller. Please note that you can also use SSH to connect your Raspberry Pi to the Solo controller.

Starting MAVProxy and forwarding messages to Pilotanywhere

You can start MAVProxy from the command line or run it at startup. To start MAVProxy from the shell execute the following command:

MAVProxy will automatically search for the connection to your vehicle. Make sure that you are connected to the Solo private network as described in the previous step. Otherwise, the connection will fail.

If the connection is established, you will see some vehicle information in the MAVProxy command prompt. You will also be able to control your vehicle from the MAVProxy command prompt.

Forwarding MAVLink messages from your Solo to your Pilotanywhere channel is also very easy. Just execute following MAVProxy command, which will open an additional output link:

output add 159.203.177.xx:153xx # replace the 159.203.177.xx:153xx with details provided in your Pilotanywhere account!

You can specify the additional output immediately on start of MAVProxy by executing: --out=udp:159.203.177.xx:153xx # replace 159.203.177.xx:153xx with details provided in your Pilotanywhere account!

Run at startup: It is very convenient to connect the 3DR Solo to Pilotanywhere at startup. Just install screen, open /etc/rc.local, include the above line as a screen command and save it. Keep in mind that Superuser rights are required to save the rc.local file. You can use nano to edit the rc.local file. In this case, execute the following commands:

sudo pip install screen
sudo nano /etc/rc.local

and add the following lines just before the final "exit 0" line, where you again replace 159.203.177.xx:153xx with the details from your Pilotanywhere account, and save the rc.local file:

screen -d -m -s /bin/bash --out=udp:159.203.177.xx:153xx > /tmp/rc.log 2>&1 

Having these changes to /etc/rc.local, MAVProxy should now forward the MAVLink messages to your channel at every startup of your Raspberry Pi!

Note that your Raspberry Pi Wifi should now also connect to the Solo controller automatically, if no other Wifi network is available. But keep in mind that the Raspberry Pi does not switch the network automatically without some modifications, if you had connected it before to another Wifi network.

How to stream a video from the 3DR Solo to Pilotanywhere

There are basically two options for streaming a live video from the Solo vehicle to Pilotanywhere. First, use a standard video encoder. Second, use your Raspberry Pi (ARMv7) and one of the video streaming tools shown in the table below.

If you download these tools, you are granted a personal, non-commercial, non-exclusive licence to use these tools for your personal needs only. If you would like to use these tools for commercial purposes, please contact us.

Video streaming tool / System Raspberry Pi (ARMv7)
Decode-encode armhf-decenc-static.tar.xz
Talk-through player-armhf-talk-static.tar.xz
Decode-encode armhf-decenc-dynamic.tar.xz
Talk-through player-armhf-talk-dynamic.tar.xz

Using an off-the-shelf encoder

Get an off-the-shelf encoder (you may want to use the Teradek VidiU encoder), then connect the Solo controller HDMI output with your encoder, connect your encoder with the internet and enter your video stream URL and your video stream key into your encoder settings. Having done this, you should be able to go live with you video. If the video does not stream, access the Solo video feed via the Solo App and change the mode from video to photo an back again to video. You should now see the video from the Solo vehicle.

Using a Rasberry Pi and the Pilotanywhere video streaming tools

Power on your Rasberry Pi, connect it to the internet and download one of our video streaming tools for the Raspberry Pi (ARMv7). We recommend the static build.

You need gstreamer version 1.8.2 or higher to let the programs run without errors. If you are not familiar how to install gstreamer, just execute these commands:

sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good
sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
gst-lauch-1.0 --version

The first tow commands install gstreamer and the needed plug-ins from the repository, the third command prints out the version of the installed gestreamer.

If you were not able to install the gstreamer version 1.8.2 or higher, then choose our static linked build. You should be able to run it without an installation of gstreamer or you may install gstreamer from source.

The Decode-encode video streaming tool is the decode-encode program. It allows your to stream with a customized video quality. How to customize the video stream is described further below. The Talk-through tool simply forwards the acquired video from the Solo controller to Pilotanywhere - without doing anything else. This program is fast, but needs a high bandwidth - it required up to 2 Mbit/s in our test environment.

You can start both programs from the shell with default parameters as follows (don't forget to extract the compressed tarballs first):


The default parameters are defined as follows:

profile ultrafast
port 5600
height 720
width 1280
framerate 30
intrarefresh TRUE
streamkey rsc
bitrate 800

It's also possible to pass the port number, the stream URL and the stream key to the program with the following command arguments. Please keep in mind that this would override your configurations made in the preference file.

./player 5600 159.203.xx.xx/live/48c57xxfAxx296

The programs take three arguments. The first argument is the port number 5600, over which the 3DR controller provides the live video stream. The second and the third parameter is the video stream URL and the video stream key. The latter are provided in your account.

Optional video streaming parameters: You can use the following parameters to customize your video stream:

  • profile: Encoder-speed profile, which can be set to the following values:ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo. A fast profile cause a fast encoding but with less comprimation, so the videoquality may be reduced. But keep in mind that slower profiles take more time to encode and uses more recources.
  • port: Port number of the incoming video stream. The 3DR controller sends the video to this port, but you can set here any other port.
  • height / width: Height and width of the video. Change this format, if you you want another video resolution.
  • framerate: Frame rate of the outgoing video stream. It can be set to an value between 60 and 1. The program caps all frame rates > 60 automatically to 60 frames pre second to avoid server overhead.
  • intrarefresh: A property of the video encoder, which can be set to force the encoder to use its internal clock for encoding (if set to TRUE) and not to wait for keyframes in the video stream (if set to FALSE). Please note, if this option is set to TRUE, the video stream will not stop due to missing keyframes in the raw video stream.
  • streamurl: Your URL or IP for forwarding the video to our servers, available in your Pilotanywhere account.
  • streamkey: Your private video streamkey, which is also available in your Pilotanywhere account. You must not share this information with other people. especially people you do not trust.
  • bitrate: A parameter defining the transmission rate of the video stream over the network. Please set this parameter according to the bandwidth of your internet connection. We recommend a max bitrate of 20 % your max upload bandwidth. Please keep in mind that a low bitrate leads to a low video quality and vice versa.

Please note, if you use the optional video streaming parameters, you have to set all parameter shown above, otherwise the program can cause errors!

Let the Rasberry Pi stream your video at startup

It's possible to let the Raspberry Pi stream your video after it has booted. To implement this, open /etc/rc.local with an text editor of your choice and include the following lines before the "exit 0" line.

cd /path/to/the/streamtool_startup_script
./player-static &

The first command changes the working path of the script to the folder where the script is located. The second command executes it. If needed, customize the first command so it reflects the folder of your executeable.

Please include also the preference file in the same folder to enable streaming with your customized parameters. Here is a template for the startup script that you may want to download and customize. Please make sure that you establish an internet connection at startup, before you call the video streaming tool in your rc.local. For this, you have to call in your your rc.local the script establishing the 4G network connection before the call of the video streaming tools. If not, the video streaming at startup will fail.

Please note that the working-path of your rc.local script is the path, where the executeable is located. Keep this in mind, if you want to include more commands in your rc.local.