# Companion Computers
Companion computers ("mission computers"), are separate on-vehicle computers that are connected to the flight controller, and which enable computationally expensive features like object avoidance and collision prevention.
The diagram below shows a possible architecture for an unmanned vehicle architecture that includes a flight controller and companion computer.
The flight controller runs PX4 on NuttX, and provides core flight and safety code. The companion computer usually runs Linux, as this is a much better platform for "general" software development. They are connected using a fast serial or Ethernet link, and typically communicate using the MAVLink protocol (opens new window) or microDDS.
Communications with the ground stations and the cloud are usually routed via the companion computer (e.g. using the MAVLink Router (opens new window)).
# Integrated Companion/Flight Controller Boards
Controller boards that come with a pre-integrated companion computer and flight controller can significantly ease both software and hardware setup. In some cases the boards are set up to allow easy replacement of flight controller and/or companion computer parts.
The following boards are known to provide a good integration with PX4:
# Supported Companion Computers
PX4 can be used with computers that can be configured to communicate via MAVLink or microROS/microDDS over over a serial port (or Ethernet port, if present).
A small subset of possible alternatives are listed below:
- Raspberry Pi
- Tegra K1
The choice of computer will depend on the usual tradeoffs: cost, weight, power consumption, ease of setup, and computational resources required.
# Companion Computer Software
The companion computer needs to run software that communicates with the flight controller, and which routes traffic to ground stations and the cloud.
# Drone Apps
Drone APIs and SDKs allow you to write software that can control PX4. Popular alternatives include:
- MAVSDK (opens new window) - libraries in various programming languages to interface with MAVLink systems such as drones, cameras or ground systems.
- ROS2 to communicate to ROS2 nodes ( may also be used).
- ROS (1) and MAVROS
MAVSDK is generally easier to learn and use, while ROS provides more pre-written software for advanced cases like computer vision. Drone APIs and SDKs > What API Should I Use? explains the different options in detail.
You can also write your own custom MAVLink libraries from scratch:
- C/C++ example code (opens new window) shows how to connect custom code
- MAVLink also can also be used with many other programming languages (opens new window)
You will need a router if you need to bridge MAVLink from the vehicle to a ground station or IP network, or if you need multiple connections:
# Ethernet Setup
Ethernet is the recommended connection, if supported by your flight controller. See Ethernet Setup for instructions.
# Flight Controller Specific Setup
The following topics explain how to set up companion computers for specific flight controllers, in particular when you are not using an Ethernet connection.