Last active
May 31, 2024 15:09
-
-
Save dbaldwin/27bdcd82b2e00d523cd1349adc659b43 to your computer and use it in GitHub Desktop.
Ubuntu 20 LTS, ROS Noetic, Gazebo 11 MAVROS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| ## Bash script for setting up ROS Noetic (with Gazebo 11) development environment for PX4 on Ubuntu LTS (20.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 Noetic (including Gazebo11) | |
| ## - MAVROS | |
| # Ubuntu Config | |
| echo "Remove modemmanager" | |
| sudo apt-get remove modemmanager -y | |
| echo "Add user to dialout group for serial port access (reboot required)" | |
| sudo usermod -a -G dialout $USER | |
| # Common dependencies | |
| echo "Installing common dependencies" | |
| sudo apt-get update -y | |
| sudo apt-get install git zip cmake build-essential genromfs ninja-build exiftool astyle -y | |
| # make sure xxd is installed, dedicated xxd package since Ubuntu 18.04 but was squashed into vim-common before | |
| which xxd || sudo apt install xxd -y || sudo apt-get install vim-common --no-install-recommends -y | |
| # Required python packages | |
| sudo apt-get install python-argparse python-empy python-toml python-numpy python-dev python-pip -y | |
| sudo -H pip install --upgrade pip | |
| sudo -H pip install pandas jinja2 pyserial pyyaml | |
| # optional python tools | |
| sudo -H pip install pyulog | |
| # ROS Noetic | |
| ## Gazebo simulator dependencies | |
| sudo apt-get install protobuf-compiler libeigen3-dev libopencv-dev -y | |
| ## ROS Gazebo: http://wiki.ros.org/noetic/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-noetic-desktop-full python3-rosdep -y | |
| ## Initialize rosdep | |
| sudo rosdep init | |
| rosdep update | |
| ## Setup environment variables | |
| rossource="source /opt/ros/noetic/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 python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y | |
| # MAVROS: https://dev.px4.io/en/ros/mavros_installation.html | |
| ## Install dependencies | |
| sudo apt-get install python3-catkin-tools python3-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 noetic -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-tools -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 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment