Interfacing with Pixhawk using the NSH
This article explains how to communicate with a Pixhawk using the NuttX Shell (NSH) using
either a serial or remote connection.
The Pixhawk runs the NuttX real-time operating system which includes the
NuttX Shell terminal “NSH”. This allows running some Unix style commands
including “top” and “ls”.
NSH is very useful for diagnosing low level issues. Some of the things
you can do with it include:
- Display performance counters with the
- Display px4io status information
- Diagnose microSD errors
- Diagnose sensor failures
- Assist in debugging new drivers
Running NSH using Debug Cable and Serial5
To use the NSH while Copter or Plane is running you can connect using
Serial 4/5. To do this you will need an FTDI 3.3V cable
and then modify a DF13 6 Position cable
so that it can be connected to the FTDI cable.
You should then be able to plug the FTDI cable into your computer and
connect with any Serial program including the Mission Planner’s Terminal
screen. Ensure to select the FTDI cable’s COM port and set the Baud rate
to 57600. You will need to press return for the “nsh>” prompt to appear.
Remote NSH over MAVLink
ArduPilot also includes support to run nsh commands remotely via MAVLink
over a USB, telemetry or WiFi link (this is an extension of the
SERIAL_CONTROL protocol used for controlling a GPS or radio UART over
At time of writing Rover doesn’t support NSH over MAVLink (because
it doesn’t support arming).
This can be used for nsh
debugging when you don’t have a serial5 cable setup.
Instructions to use with Mission Planner:
- Connect Pixhawk to PC using a USB cable
- Go to the Flight Data screen, select the correct COM port and baud
(probalby 115200) and press the connect button
- Go to the Terminal screen, set the left-most drop down to “NSH” and
Setup instructions to access using MAVProxy:
Load latest master onto a Pixhawk
Grab the latest MAVProxy
Start MAVProxy as usual
Load the nsh module in MAVProxy with
start the nsh shell with
Now run nsh commands as usual. Note that MAVLink is still running,
so the map, MAPVproxy console, graphs etc all keep updating while
in the nsh shell.
A blank response to an NSH command may indicate low RAM memory
on the autopilot board. Free up memory if possible. For example, on
master you can save about 20Kb by disabling terrain following (set
To drop back to the normal MAVProxy prompt type a single “.” on a
line by itself
You can only start a shell when the system is disarmed. Once the shell
is started you can arm if you like.
In theory you could fly while doing nsh commands, but we don’t
This also works over a 3DR Radio link, although it is of course slower
in output than when on a USB connection.