#!/bin/bash ## Bash script for setting up ROS Melodic (with Gazebo 9) development environment for PX4 on Ubuntu LTS (18.04). ## It installs the common dependencies for all targets (including Qt Creator) ## ## Installs: ## - Common dependencies libraries and tools as defined in `ubuntu_sim_common_deps.sh` ## - ROS Melodic (including Gazebo9) ## - MAVROS if [[ $(lsb_release -sc) == *"xenial"* ]]; then echo "OS version detected as $(lsb_release -sc) (16.04)." echo "ROS Melodic requires at least Ubuntu 18.04." echo "Exiting ...." return 1; fi echo "Downloading dependent script 'ubuntu_sim_common_deps.sh'" # Source the ubuntu_sim_common_deps.sh script directly from github common_deps=$(wget https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_common_deps.sh -O -) wget_return_code=$? # If there was an error downloading the dependent script, we must warn the user and exit at this point. if [[ $wget_return_code -ne 0 ]]; then echo "Error downloading 'ubuntu_sim_common_deps.sh'. Sorry but I cannot proceed further :("; exit 1; fi # Otherwise source the downloaded script. . <(echo "${common_deps}") # ROS Melodic ## Gazebo simulator dependencies sudo apt-get install protobuf-compiler libeigen3-dev libopencv-dev -y ## ROS Gazebo: http://wiki.ros.org/melodic/Installation/Ubuntu ## Setup keys sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654 ## For keyserver connection problems substitute hkp://pgp.mit.edu:80 or hkp://keyserver.ubuntu.com:80 above. sudo apt-get update ## Get ROS/Gazebo sudo apt install ros-melodic-desktop-full -y ## Initialize rosdep sudo rosdep init rosdep update ## Setup environment variables rossource="source /opt/ros/melodic/setup.bash" if grep -Fxq "$rossource" ~/.bashrc; then echo ROS setup.bash already in .bashrc; else echo "$rossource" >> ~/.bashrc; fi eval $rossource ## Install rosinstall and other dependencies sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential -y # MAVROS: https://dev.px4.io/en/ros/mavros_installation.html ## Install dependencies sudo apt-get install python-catkin-tools python-rosinstall-generator -y ## Create catkin workspace mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin init wstool init src ## Install MAVLink ###we use the Kinetic reference for all ROS distros as it's not distro-specific and up to date rosinstall_generator --rosdistro kinetic mavlink | tee /tmp/mavros.rosinstall ## Build MAVROS ### Get source (upstream - released) rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall ### Setup workspace & install deps wstool merge -t src /tmp/mavros.rosinstall wstool update -t src if ! rosdep install --from-paths src --ignore-src -y; then # (Use echo to trim leading/trailing whitespaces from the unsupported OS name unsupported_os=$(echo $(rosdep db 2>&1| grep Unsupported | awk -F: '{print $2}')) rosdep install --from-paths src --ignore-src --rosdistro melodic -y --os ubuntu:bionic fi if [[ ! -z $unsupported_os ]]; then >&2 echo -e "\033[31mYour OS ($unsupported_os) is unsupported. Assumed an Ubuntu 18.04 installation," >&2 echo -e "and continued with the installation, but if things are not working as" >&2 echo -e "expected you have been warned." fi #Install geographiclib sudo apt install geographiclib -y echo "Downloading dependent script 'install_geographiclib_datasets.sh'" # Source the install_geographiclib_datasets.sh script directly from github install_geo=$(wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh -O -) wget_return_code=$? # If there was an error downloading the dependent script, we must warn the user and exit at this point. if [[ $wget_return_code -ne 0 ]]; then echo "Error downloading 'install_geographiclib_datasets.sh'. Sorry but I cannot proceed further :("; exit 1; fi # Otherwise source the downloaded script. sudo bash -c "$install_geo" ## Build! catkin build ## Re-source environment to reflect new packages/build environment catkin_ws_source="source ~/catkin_ws/devel/setup.bash" if grep -Fxq "$catkin_ws_source" ~/.bashrc; then echo ROS catkin_ws setup.bash already in .bashrc; else echo "$catkin_ws_source" >> ~/.bashrc; fi eval $catkin_ws_source # Go to the firmware directory clone_dir=~/src cd $clone_dir/Firmware