Native setup

Setting up the simulation environment from scratch requires some effort, but results in the most performant setup, with less chance of driver issues.

TIP

See up-to-date commands set for installation Clover simulation software in the script, that builds the virtual machine image with the simulator: install_software.shopen in new window.

Prerequisites: Ubuntu 20.04.

Install ROS

Install ROS Noetic using the official installation manualopen in new window (Desktop or Full install).

Add sourcing ROS' setup.bash initialization script to your .bashrc:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

Install required tools:

sudo apt install build-essential git python3-pip python3-rosdep

Create a workspace for the simulation

Create a workspace for the simulation:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

Clone Clover sources:

cd ~/catkin_ws/src
git clone --depth 1 https://github.com/CopterExpress/clover
git clone --depth 1 https://github.com/CopterExpress/ros_led
git clone --depth 1 https://github.com/ethz-asl/mav_comm

Install all dependencies using rosdep:

cd ~/catkin_ws
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y

Install Python dependencies:

sudo /usr/bin/python3 -m pip install -r ~/catkin_ws/src/clover/clover/requirements.txt

Get PX4 sources

PX4 will be built along with the other packages in our workspace. You may clone it directly into the workspace or put it somewhere and symlink to ~/catkin_ws/src. We will need to put its sitl_gazebo and mavlink submodules into ~/catkin_ws/src as well.

Clone PX4 sources and make the required symlinks:

git clone --recursive --depth 1 --branch v1.12.0 https://github.com/PX4/PX4-Autopilot.git ~/PX4-Autopilot
ln -s ~/PX4-Autopilot ~/catkin_ws/src/
ln -s ~/PX4-Autopilot/Tools/sitl_gazebo ~/catkin_ws/src/
ln -s ~/PX4-Autopilot/mavlink ~/catkin_ws/src/

TIP

You may use more recent PX4 version, but there would be more risk of something would not be working.

Install PX4 prerequisites

PX4 comes with its own script for dependency installation. We may as well leverage it:

cd ~/catkin_ws/src/PX4-Autopilot/Tools/setup
sudo ./ubuntu.sh

This will install everything required to build PX4 and its SITL environment.

TIP

You may want to skip installing the ARM toolchain if you're not planning on compiling PX4 for your flight controller. To do this, use the --no-nuttx flag: sudo ./ubuntu.sh --no-nuttx.

Install more required Python packages:

pip3 install --user toml

Add the Clover airframe

Add the Clover airframe to PX4 using the command:

ln -s ~/catkin_ws/src/clover/clover_simulation/airframes/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/

Install geographiclib datasets

mavros package requires geographiclib datasets to be present:

sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh

Build the simulator

Build your workspace:

cd ~/catkin_ws
catkin_make

TIP

If building fails with RAM issues (c++: fatal error: Killed signal terminated program cc1plus), reduce the number of parallel jobs using -j key. For example, to use only two parallel jobs use catkin_make -j2 command.

Run the simulator

In order to be sure that everything was built correctly, try running the simulator for the first time:

roslaunch clover_simulation simulator.launch

You can test autonomous flight using example scripts in ~/catkin_ws/src/clover/clover/examples directory.

Additional steps

Optionally, install roscore systemd service to have roscore running in background:

sed -i "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/roscore.service
sudo cp ~/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
sudo systemctl enable roscore
sudo systemctl start roscore

Install any web server to serve Clover's web tools (~/.ros/www directory), e. g. Monkey:

wget https://github.com/CopterExpress/clover_vm/raw/master/assets/packages/monkey_1.6.9-1_$(dpkg --print-architecture).deb -P /tmp
sudo dpkg -i /tmp/monkey_*.deb
sed "s/pi/$USER/g" ~/catkin_ws/src/clover/builder/assets/monkey | sudo tee /etc/monkey/sites/default
sudo sed -i 's/SymLink Off/SymLink On/' /etc/monkey/monkey.conf
sudo cp ~/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
sudo systemctl enable monkey
sudo systemctl start monkey