Last Updated: Oct 7, 2022
This tutorial demonstrates how to fly a VOXL2 / RB5 Flight based drone autonomously in a figure 8, using MAVROS.
For this setup, MAVROS is installed and runs on VOXL 2 / RB5 Flight. Additionally, the voxl-px4, voxl-vision-px4 and voxl-mavlink-server background services will be running. This provides the PX4 flight controller, Visual Inertial Odometry (VIO) for PX4, and manages the mavlink telemetry between the ground control station remotely and ROS locally.
WARNING: At the end of this tutorial, your drone will be flying autonomously. Please only run this in a safe location away from people and wear protective eyewear!!
apt
, please have vehicle connected to the internet$ apt-get install ros-melodic-mavros ros-melodic-mavros-extras ros-melodic-control-toolbox
GeographicLib dataset
:$ cd /opt/ros/melodic/lib/mavros
$ ./install_geographiclib_datasets.sh
Use voxl-inspect-services
to validate voxl-vision-px4
is enabled.
Edit the configuration file
$ vi /etc/modalai/voxl-vision-px4.conf
We will check the following
qgc_ip
- should be your host PCs IP address where the Ground Control Station isen_localhost_mavlink_udp
- set to true to allow UDP MAVLink comms on localhostoffboard_mode
- set to "off" since we will not use VVPX4 for offboard mode, but use MAVROS insteadValidate your configuration file
"qgc_ip": "X.X.X.X",
"en_localhost_mavlink_udp": true,
...
"offboard_mode": "off"
Use voxl-inspect-services
to validate voxl-mavlink-server
is enabled.
This simple-example
branch demo project:
On VOXL 2 / RB5 Flight, clone the simple-example
branch of the mavros_test
project. In this example, we're cloning to /home
:
$ cd /home
$ git clone -b simple-example https://gitlab.com/voxl-public/support/mavros_test.git
Build the project:
$ cd /home/mavros_test
$ ./build.sh
Base path: /home/mavros_test/catkin_ws
Source space: /home/mavros_test/catkin_ws/src
Build space: /home/mavros_test/catkin_ws/build
Devel space: /home/mavros_test/catkin_ws/devel
Install space: /home/mavros_test/catkin_ws/install
Creating symlink "/home/mavros_test/catkin_ws/src/CMakeLists.txt" pointing to "/opt/ros/melodic/share/catkin/cmake/toplevel.cmake"
...
The ros_environment.sh
file contains environment variables used by ROS.
Update the ROS_IP
value to use your IP address on target (you can use ifconfig
):
$ more /home/mavros_test/ros_environment.sh
#!/bin/bash
#
source /opt/ros/kinetic/setup.bash
source catkin_ws/install/setup.bash
unset ROS_HOSTNAME
# configure ROS IPs here
export ROS_MASTER_IP=127.0.0.1
export ROS_IP=192.168.8.1
export ROS_MASTER_URI=http://${ROS_MASTER_IP}:11311/
# mavros needs to know what PX4's system id is
export PX4_SYS_ID=1
You can do this on bench top if you'd like, but REMOVE THE PROPELLERS as this will arm the drone!
$ cd /home/mavros_test
$ ./run_mavros_test.sh
You should get an output that ends similar to this:
...
INFO] [1663886683.264138601]: MAVROS started. MY ID 1.240, TARGET ID 1.1
[ INFO] [1663886683.264246359]: udp0: Remote address: 127.0.0.1:38711
[ INFO] [1663886683.264606406]: IMU: Attitude quaternion IMU detected!
[ INFO] [1663886683.265673318]: IMU: High resolution IMU detected!
[ WARN] [1663886683.267312670]: GP: No GPS fix
[ INFO] [1663886683.313571850]: CON: Got HEARTBEAT, connected. FCU: PX4 Autopilot
[ INFO] [1663886683.315295002]: IMU: High resolution IMU detected!
[ INFO] [1663886683.378609250]: IMU: Attitude quaternion IMU detected!
[ INFO] [1663886684.337418988]: GF: Using MISSION_ITEM_INT
[ INFO] [1663886684.337929605]: RP: Using MISSION_ITEM_INT
[ INFO] [1663886684.338302621]: WP: Using MISSION_ITEM_INT
[ INFO] [1663886684.338667459]: VER: 1.1: Capabilities 0x000000000000e4ef
[ INFO] [1663886684.339006205]: VER: 1.1: Flight software: 01041040 (33795a0a30000000)
[ INFO] [1663886684.339548645]: VER: 1.1: Middleware software: 01041040 (33795a0a30000000)
[ INFO] [1663886684.339894838]: VER: 1.1: OS software: 04137dff (e7701b9e792e3101)
[ INFO] [1663886684.340202177]: VER: 1.1: Board hardware: 00000001
[ INFO] [1663886684.340527172]: VER: 1.1: VID/PID: 0000:0000
[ INFO] [1663886684.340860813]: VER: 1.1: UID: 3044494530303030
[ WARN] [1663886684.341231173]: CMD: Unexpected command 520, result 0
[ INFO] [1663886687.929310850]: waiting for offboard mode
[ INFO] [1663886693.315015302]: HP: requesting home position
[ INFO] [1663886696.836791903]: RC_CHANNELS message detected!
[ INFO] [1663886698.315995312]: RP: mission received
[ INFO] [1663886698.317024880]: GF: mission received
[ INFO] [1663886698.317390396]: WP: mission received
[ INFO] [1663886703.314904662]: HP: requesting home position
[ INFO] [1663886707.538530390]: VER: 1.1: Capabilities 0x000000000000e4ef
[ INFO] [1663886707.538779396]: VER: 1.1: Flight software: 01041040 (33795a0a30000000)
[ INFO] [1663886707.538893405]: VER: 1.1: Middleware software: 01041040 (33795a0a30000000)
[ INFO] [1663886707.539031580]: VER: 1.1: OS software: 04137dff (e7701b9e792e3101)
[ INFO] [1663886707.539153506]: VER: 1.1: Board hardware: 00000001
[ INFO] [1663886707.539264337]: VER: 1.1: VID/PID: 0000:0000
[ INFO] [1663886707.539952557]: VER: 1.1: UID: 3044494530303030
[ WARN] [1663886707.540114325]: CMD: Unexpected command 512, result 0
[ INFO] [1663886707.708296390]: VER: 1.1: Capabilities 0x000000000000e4ef
[ INFO] [1663886707.708538834]: VER: 1.1: Flight software: 01041040 (33795a0a30000000)
[ INFO] [1663886707.708672791]: VER: 1.1: Middleware software: 01041040 (33795a0a30000000)
[ INFO] [1663886707.708817060]: VER: 1.1: OS software: 04137dff (e7701b9e792e3101)
[ INFO] [1663886707.708943881]: VER: 1.1: Board hardware: 00000001
[ INFO] [1663886707.709068618]: VER: 1.1: VID/PID: 0000:0000
[ INFO] [1663886707.709161221]: VER: 1.1: UID: 3044494530303030
[ INFO] [1663886708.451312390]: WP: seems GCS requesting mission
[ INFO] [1663886708.452393312]: WP: scheduling pull after GCS is done
[ INFO] [1663886708.566541986]: GF: seems GCS requesting mission
[ INFO] [1663886708.566864534]: GF: scheduling pull after GCS is done
[ INFO] [1663886708.610489220]: RP: seems GCS requesting mission
[ INFO] [1663886708.611010150]: RP: scheduling pull after GCS is done
[ INFO] [1663886713.314919596]: HP: requesting home position
[ WARN] [1663886713.449405269]: GP: No GPS fix
[ INFO] [1663886713.456587822]: WP: mission received
[ INFO] [1663886713.568093669]: GF: mission received
[ INFO] [1663886713.612369544]: RP: mission received
[ INFO] [1663886723.314870316]: HP: requesting home position
[ INFO] [1663886726.379315832]: arming
[ INFO] [1663886726.427174936]: FCU: Armed by external command
[ INFO] [1663886726.428385127]: Vehicle armed
[ INFO] [1663886726.476409542]: FCU: [logger] /data/px4/log/sess005/log001.ulg
[ INFO] [1663886731.379187081]: disarming
[ INFO] [1663886731.395421067]: FCU: Disarmed by external command
[ INFO] [1663886731.396092620]: Vehicle disarmed
[ INFO] [1663886731.396233503]: done
[mavros_test_node-3] process has finished cleanly
log file: /home/root/.ros/log/25b80dbe-3ac8-11ed-b22c-00c0caafc7f0/mavros_test_node-3*.log
...