Comment on page
Companion Computer
This section introduces how to set up the (on-board) companion computer for PX4-based drones.
- Connect onboard computer and Pixhawk flight controller via an FTDI Chip USB-to-serial adapter.
- use the
TELEM2
port on Pixhawk and a USB port on companion computer - make sure the FTDI chip or logic level shifter is compatible in our use case
- make sure the pin-to-pin connection is correct
- out of 6 pins, 3 pins must be connected (TX-RX, RX-TX, GND-GND)
- the red power pin must not be connected
- CTS and RTS pins are optional; for the use of so called "flow control" for Pixhawk
- It is recommended that the FTDI chip operates at 3.3V, but not required
- the red power pin is not connected anyway
- according to this section in PX4 docs, all Pixhawk serial ports operate at 3.3V and are 5V level compatible.
- warning: this product is not a ready-to-go adapter; need to switch RX and TX cables (cut them off and then solder together)
- soldering quality can also affect the performance; bad soldering will lead to high noise level in the communication
- the connection link is: computer --- USB port --- USB to micro USB cable --- micro USB port --- FTDI chip --- 6-pin JST port --- JST cable --- 6-pin TELEM2 port --- Pixhawk
(left) FTDI cable after soldering (right) final cable after hot-glue gun and heat-shrink tubing
Need to prepare a high-speed low-latency WiFi router
- edit settings to shrink DHCP range and leave a range of IP addresses unused for static IP
- in my case, I use
192.168.0.21
for onboard computer and192.168.0.121
for gcs computer
- Need to enable MAVLink on a configurable serial port (typically
TELEM2
).- Connect the Pixhawk flight controller to QGroundControl via USB or Telemetry (TELEM1), so that you can change parameters in the parameter table and push them to the vehicle.
- Set param MAV_1_CONFIG =
TELEM 2
(MAV_1_CONFIG is often used to map the TELEM 2 port) - Reboot the vehicle to make other parameters visible.
- Set the remaining parameters if not being set by default.
- MAV_1_MODE =
Onboard
- SER_TEL2_BAUD =
921600
(921600 or higher recommended for applications like log streaming or FastRTPS)
- Once this parameter is enabled, when Pixhawk is powered on, it will automatically broadcast messages (drone status) via TELEM2 port. The RX indicator should be flickering accordingly.
- Set up a static IP address for WiFi connection
- in my case, I use
192.168.0.21
for onboard computer and192.168.0.121
for gcs computer - optional: edit
hosts
file bysudo gedit /etc/hosts
and add item192.168.0.121 arcs-gcs
- udev rule: create a new file at
/etc/udev/rules.d/99-pixhawk.rules
with the following content- double check by
lsusb
the actual vendor and product ID of the FTDI chip
# NOTE: use the actual vendor and product IDs (check it by lsusb)
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SYMLINK+="ttyPixhawk"
#SUBSYSTEM=="tty", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="7523", SYMLINK+="ttyPixhawk"
# optional; can be omitted if Arduino is not being used
SUBSYSTEM=="tty", ATTRS{idVendor}=="2341", ATTRS{idProduct}=="0042", SYMLINK+="ttyArduino"
- Add current user to the
tty
anddialout
groups to avoid to have to execute scripts as root
sudo usermod -a -G tty <username>
sudo usermod -a -G dialout <username>
- Launch file is the same as
mavros/launch/px4.launch
except for the following modifications- set
fcu_url
to/dev/ttyPixhawk:921600
- set
gcs_url
toudp://@arcs-gcs:14550
- double check if
tgt_system
matchesMAV_SYS_ID
parameter in PX4 firmware (default 1) - double check if
tgt_component
matchesMAV_COMP_ID
parameter in PX4 firmware (default 1)
- Set up a static IP address for WiFi connection
- in my case, I use
192.168.0.21
for onboard computer and192.168.0.121
for gcs computer - optional: edit
hosts
file bysudo gedit /etc/hosts
and add item192.168.0.21 arcs-robot
- optional: set up password-free SSH login by
ssh-copy-id arcs@arcs-robot
- Download QGroundControl Ubuntu amd64 build (arm architecture is not supported)
- run
./QGroundControl
and you can see drone status - it will automatically listen to port 14550 for UDP connections
lsusb
check the vendor ID and product ID of FTDI chipls -l /dev/ttyPixhawk
check the read/write permission- use a multi-meter to check voltage level
- find a chip that has TX/RX indicators to help debugging
rostopic echo -n1 /diagnostics
rosrun mavros checkid
- If TELEM2 port is indeed broadcasting messages, then
cat /dev/ttyPixhawk
should print out random symbols/streaming androstopic echo -n1 /diagnostics
should have RX packages/bytes received.
auto-starting new master
process[master]: started with pid [25993]
ROS_MASTER_URI=http://localhost:11311
setting /run_id to 52bef7b4-ea8d-11eb-b0f6-204ef6c5ef8f
process[rosout-1]: started with pid [26011]
started core service [/rosout]
process[mavros-2]: started with pid [26029]
[ INFO] [1626917830.064227539]: FCU URL: /dev/ttyPixhawk:921600
[ INFO] [1626917830.075512530]: serial0: device: /dev/ttyPixhawk @ 921600 bps
[ INFO] [1626917830.077993842]: GCS URL: udp://@arcs-gcs:14550
[ INFO] [1626917830.079239602]: udp1: Bind address: 0.0.0.0:14555
[ INFO] [1626917830.079788274]: udp1: Remote address: 192.168.0.121:14550
[ INFO] [1626917830.123951216]: Plugin 3dr_radio loaded
[ INFO] [1626917830.133589392]: Plugin 3dr_radio initialized
[ INFO] [1626917830.134123504]: Plugin actuator_control loaded
...
[ INFO] [1626917831.596142837]: Plugin wind_estimation loaded
[ INFO] [1626917831.599738645]: Plugin wind_estimation initialized
[ INFO] [1626917831.599962517]: Autostarting mavlink via USB on PX4
[ INFO] [1626917831.600359957]: Built-in SIMD instructions: ARM NEON
[ INFO] [1626917831.600489557]: Built-in MAVLink package version: 2021.3.3
[ INFO] [1626917831.600601205]: Known MAVLink dialects: common ardupilotmega ASLUAV all autoquad icarous matrixpilot paparazzi standard uAvionix ualberta
[ INFO] [1626917831.601232277]: MAVROS started. MY ID 1.240, TARGET ID 1.1
[ INFO] [1626917831.607340148]: IMU: High resolution IMU detected!
[ INFO] [1626917831.623283188]: IMU: Attitude quaternion IMU detected!
[ INFO] [1626917831.712271824]: CON: Got HEARTBEAT, connected. FCU: PX4 Autopilot
[ INFO] [1626917831.726061328]: IMU: High resolution IMU detected!
[ INFO] [1626917831.727046608]: IMU: Attitude quaternion IMU detected!
[ INFO] [1626917832.734570666]: GF: Using MISSION_ITEM_INT
[ INFO] [1626917832.734848618]: RP: Using MISSION_ITEM_INT
[ INFO] [1626917832.735039114]: WP: Using MISSION_ITEM_INT
[ INFO] [1626917832.735182506]: VER: 1.1: Capabilities 0x000000000000e4ef
[ INFO] [1626917832.735327146]: VER: 1.1: Flight software: 010b03ff (a6274bc5ed000000)
[ INFO] [1626917832.735467946]: VER: 1.1: Middleware software: 010b03ff (a6274bc5ed000000)
[ INFO] [1626917832.735595530]: VER: 1.1: OS software: 080200ff (ec20f2e6c5cc35b2)
[ INFO] [1626917832.735720650]: VER: 1.1: Board hardware: 00000032
[ INFO] [1626917832.735841738]: VER: 1.1: VID/PID: 26ac:0032
[ INFO] [1626917832.736006506]: VER: 1.1: UID: 4356500d20383058
[ WARN] [1626917832.736531306]: CMD: Unexpected command 520, result 0
[ INFO] [1626917837.984168559]: udp1: Remote address: 192.168.0.121:14550
[ WARN] [1626917837.999627759]: FCU: Preflight: GPS Speed Accuracy too low
[ INFO] [1626917838.736300702]: VER: 1.1: Capabilities 0x000000000000e4ef
[ INFO] [1626917838.736565246]: VER: 1.1: Flight software: 010b03ff (a6274bc5ed000000)
[ INFO] [1626917838.736837118]: VER: 1.1: Middleware software: 010b03ff (a6274bc5ed000000)
[ INFO] [1626917838.737020766]: VER: 1.1: OS software: 080200ff (ec20f2e6c5cc35b2)
[ INFO] [1626917838.737107582]: VER: 1.1: Board hardware: 00000032
[ INFO] [1626917838.737212190]: VER: 1.1: VID/PID: 26ac:0032
[ INFO] [1626917838.737322942]: VER: 1.1: UID: 4356500d20383058
[ INFO] [1626917838.929431802]: WP: seems GCS requesting mission
[ INFO] [1626917838.929658650]: WP: scheduling pull after GCS is done
[ INFO] [1626917838.957424154]: GF: seems GCS requesting mission
[ INFO] [1626917838.957704026]: GF: scheduling pull after GCS is done
[ INFO] [1626917838.984743641]: RP: seems GCS requesting mission
[ INFO] [1626917838.984973657]: RP: scheduling pull after GCS is done
[ INFO] [1626917841.716082666]: HP: requesting home position
[ INFO] [1626917843.932448880]: WP: mission received
[ INFO] [1626917843.961392944]: GF: mission received
[ INFO] [1626917843.987520816]: RP: mission received
[ INFO] [1626917845.005917544]: PR: parameters list received
[ INFO] [1626917851.715933397]: HP: requesting home position
[ INFO] [1626917861.715935981]: HP: requesting home position
[ INFO] [1626917871.715917420]: HP: requesting home position
header:
seq: 461
stamp:
secs: 1626918167
nsecs: 602185190
frame_id: ''
status:
-
level: 0
name: "mavros: FCU connection"
message: "connected"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Received packets:"
value: "2169"
-
key: "Dropped packets:"
value: "0"
-
key: "Buffer overruns:"
value: "0"
-
key: "Parse errors:"
value: "0"
-
key: "Rx sequence number:"
value: "98"
-
key: "Tx sequence number:"
value: "0"
-
key: "Rx total bytes:"
value: "7954038"
-
key: "Tx total bytes:"
value: "194865"
-
key: "Rx speed:"
value: "36628.000000"
-
key: "Tx speed:"
value: "875.000000"
-
level: 0
name: "mavros: GPS"
message: "3D fix"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Satellites visible"
value: "9"
-
key: "Fix type"
value: "3"
-
key: "EPH (m)"
value: "0.95"
-
key: "EPV (m)"
value: "2.03"
-
level: 0
name: "mavros: Heartbeat"
message: "Normal"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Heartbeats since startup"
value: "336"
-
key: "Frequency (Hz)"
value: "1.000000"
-
key: "Vehicle type"
value: "Quadrotor"
-
key: "Autopilot type"
value: "PX4 Autopilot"
-
key: "Mode"
value: "AUTO.LOITER"
-
key: "System status"
value: "Standby"
-
level: 2
name: "mavros: System"
message: "Sensor health"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Sensor present"
value: "0x122E002F"
-
key: "Sensor enabled"
value: "0x1221002F"
-
key: "Sensor health"
value: "0x022E002F"
-
key: "3D gyro"
value: "Ok"
-
key: "3D accelerometer"
value: "Ok"
-
key: "3D magnetometer"
value: "Ok"
-
key: "absolute pressure"
value: "Ok"
-
key: "GPS"
value: "Ok"
-
key: "rc receiver"
value: "Fail"
-
key: "AHRS subsystem health"
value: "Ok"
-
key: "Battery"
value: "Ok"
-
key: "pre-arm check status. Always healthy when armed"
value: "Fail"
-
key: "CPU Load (%)"
value: "41.4"
-
key: "Drop rate (%)"
value: "0.0"
-
key: "Errors comm"
value: "0"
-
key: "Errors count #1"
value: "0"
-
key: "Errors count #2"
value: "0"
-
key: "Errors count #3"
value: "0"
-
key: "Errors count #4"
value: "0"
-
level: 0
name: "mavros: Battery"
message: "Normal"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Voltage"
value: "16.22"
-
key: "Current"
value: "0.5"
-
key: "Remaining"
value: "83.0"
-
level: 0
name: "mavros: Time Sync"
message: "Normal"
hardware_id: "/dev/ttyPixhawk:921600"
values:
-
key: "Timesyncs since startup"
value: "3361"
-
key: "Frequency (Hz)"
value: "10.000005"
-
key: "Last RTT (ms)"
value: "1.375040"
-
key: "Mean RTT (ms)"
value: "2.221804"
-
key: "Last remote time (s)"
value: "384.336849000"
-
key: "Estimated time offset (s)"
value: "1626917783.223483801"
---
OK. I got messages from 1:1.
---
Received 6190 messages, from 1 addresses
sys:comp list of messages
1:1 0, 1, 2, 4, 140, 141, 147, 24, 30, 31, 32, 33, 36, 74, 331, 76, 83, 340, 85, 230, 105, 111, 241, 242, 245
Last modified 2yr ago