From cbeb5c4ea67c077ada153be791b2c9bdec45370c Mon Sep 17 00:00:00 2001 From: scorpio1 Date: Wed, 14 Jun 2023 08:46:13 -0700 Subject: [PATCH] Add 'px4_setup/px4setup.sh' --- px4_setup/px4setup.sh | 148 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 px4_setup/px4setup.sh diff --git a/px4_setup/px4setup.sh b/px4_setup/px4setup.sh new file mode 100644 index 0000000..ec48b8a --- /dev/null +++ b/px4_setup/px4setup.sh @@ -0,0 +1,148 @@ +#!/bin/bash + +# +# Setup script for PX4 firmware and sitl development eco-system +# Author: Tarek Taha, Mohamed Abdelkader +# References: http://dev.px4.io/master/en/setup/dev_env_linux_ubuntu.html#sim_nuttx +# + +if [ -z "$1" ]; then + ARROW_HOME=$HOME +else + ARROW_HOME=$1 +fi + +if [ -f /.dockerenv ]; then + pass=arrow + echo "Running within docker, installing initial dependencies"; + echo $pass | sudo -S apt-get --quiet -y update && DEBIAN_FRONTEND=noninteractive apt-get --quiet -y install \ + ca-certificates \ + gnupg \ + lsb-core \ + sudo \ + wget \ + ; +else + read -p "Enter user password please (for sudo): " -s pass +fi + +# script directory +DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) + +# check requirements.txt exists (script not run in source tree) +REQUIREMENTS_FILE="px4_requirements.txt" +if [[ ! -f "${DIR}/${REQUIREMENTS_FILE}" ]]; then + echo "FAILED: ${REQUIREMENTS_FILE} needed in same directory as setup_px4.sh (${DIR})." + return 1 +fi + +echo "Installing PX4 general dependencies" + +echo $pass | sudo -S apt-get update -y --quiet +echo $pass | sudo -S DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \ + astyle \ + build-essential \ + ccache \ + clang \ + clang-tidy \ + cmake \ + cppcheck \ + doxygen \ + file \ + g++ \ + gcc \ + gdb \ + git \ + lcov \ + make \ + ninja-build \ + python3 \ + python3-dev \ + python3-pip \ + python3-setuptools \ + python3-wheel \ + rsync \ + shellcheck \ + unzip \ + xsltproc \ + zip \ + ; + +# Python3 dependencies +echo +echo "Installing PX4 Python3 dependencies" +pip3 install --user -r ${DIR}/px4_requirements.txt + +# Simulation dependencies +echo $pass | sudo -S DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \ + ant \ + openjdk-11-jre \ + openjdk-11-jdk \ + libvecmath-java \ + xmlstarlet \ + ; + +echo $pass | sudo -S DEBIAN_FRONTEND=noninteractive apt-get -y --quiet --no-install-recommends install \ + gstreamer1.0-plugins-bad \ + gstreamer1.0-plugins-base \ + gstreamer1.0-plugins-good \ + gstreamer1.0-plugins-ugly \ + gstreamer1.0-libav \ + libeigen3-dev \ + libgazebo9-dev \ + libgstreamer-plugins-base1.0-dev \ + libimage-exiftool-perl \ + libopencv-dev \ + libxml2-utils \ + pkg-config \ + protobuf-compiler \ + dmidecode \ + bc \ + ; + +echo $pass | sudo -S update-alternatives --set java $(update-alternatives --list java | grep "java-11") + +#Setting up PX4 Firmware +if [ ! -d "${HOME}/Firmware" ]; then + cd ${HOME} + git clone https://github.com/PX4/Firmware.git --recursive +else + echo "Firmware already exists. Just pulling latest upstream...." + cd ${HOME}/Firmware + git pull +fi +cd ${HOME}/Firmware +make clean && make distclean +#git checkout v1.10.1 && git submodule update --recursive +#git checkout v1.11.2 && git submodule update --recursive + +#cd ${HOME}/Firmware/Tools/sitl_gazebo/external/OpticalFlow && git submodule update --recursive # this is needed for PX4 v1.10.1 +# cd ${HOME}/Firmware/Tools/sitl_gazebo/external/OpticalFlow/external/klt_feature_tracker && git submodule update --recursive # this is needed for PX4 v1.10.1 +#### NOTE: in PX4 v1.10.1, there is a bug in Firmware/Tools/sitl_gazebo/include/gazebo_opticalflow_plugin.h:43:18 +#### NOTE: #define HAS_GYRO TRUE needs to be replaced by #define HAS_GYRO true +# sed -i 's/#define HAS_GYRO.*/#define HAS_GYRO true/' ${HOME}/Firmware/Tools/sitl_gazebo/include/gazebo_opticalflow_plugin.h # this is needed for PX4 v1.10.1 + +cd ${HOME}/Firmware +DONT_RUN=1 make px4_sitl gazebo + +#Copying this to .bashrc file +grep -xF 'source ~/Firmware/Tools/setup_gazebo.bash ~/Firmware ~/Firmware/build/px4_sitl_default' ${HOME}/.bashrc || echo "source ~/Firmware/Tools/setup_gazebo.bash ~/Firmware ~/Firmware/build/px4_sitl_default" >> ${HOME}/.bashrc +grep -xF 'export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware' ${HOME}/.bashrc || echo "export ROS_PACKAGE_PATH=\$ROS_PACKAGE_PATH:~/Firmware" >> ${HOME}/.bashrc +grep -xF 'export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/Firmware/Tools/sitl_gazebo' ${HOME}/.bashrc || echo "export ROS_PACKAGE_PATH=\$ROS_PACKAGE_PATH:~/Firmware/Tools/sitl_gazebo" >> ${HOME}/.bashrc +#grep -xF 'export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:/home/aaal/catkin_ws/src/swarm_sim/models' ${HOME}/.bashrc || echo "export GAZEBO_MODEL_PATH=\$GAZEBO_MODEL_PATH:/home/aaal/catkin_ws/src/swarm_sim/models" >> ${HOME}/.bashrc +grep -xF 'export GAZEBO_PLUGIN_PATH=$GAZEBO_PLUGIN_PATH:/usr/lib/x86_64-linux-gnu/gazebo-9/plugins' ${HOME}/.bashrc || echo "export GAZEBO_PLUGIN_PATH=\$GAZEBO_PLUGIN_PATH:/usr/lib/x86_64-linux-gnu/gazebo-9/plugins" >> ${HOME}/.bashrc + +source ${HOME}/.bashrc + +# Install QGroundControl +###### Not working yet!!! +echo $pass | sudo -S usermod -a -G dialout $USER +echo $pass | sudo -S apt-get remove modemmanager -y +echo $pass | sudo -S apt-get install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y +echo $pass | sudo -S apt-get install fuse libpulse-mainloop-glib0 -y + +cd ${HOME} +wget https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage +chmod +x ./QGroundControl.AppImage + +echo "**** Make sure to logout and login again ****"