Compare commits

..

45 Commits

Author SHA1 Message Date
Oleg Kalachev
fc2661ad88 Don’t show s3 progress 2021-06-29 03:57:04 +03:00
Oleg Kalachev
2deb4bd54c Upload to S3 with a raw command 2021-06-29 02:39:31 +03:00
Oleg Kalachev
dfb82608ad Use okalachev/upload-s3-action to upload to S3 2021-06-29 01:10:45 +03:00
Oleg Kalachev
94d339639e Upload image from Actions 2021-06-28 20:51:06 +03:00
Oleg Kalachev
3bc7fb406e Disable deploy in Travis 2021-06-28 19:59:20 +03:00
Oleg Kalachev
62e41bed40 Use git describe --always for image name 2021-06-23 23:30:49 +03:00
Oleg Kalachev
31d0d6e2fc Show built image size 2021-06-23 22:38:52 +03:00
Oleg Kalachev
f1fd8f73e8 Downgrade Node.js to v10.15.0 2021-06-23 21:44:01 +03:00
Oleg Kalachev
13e74f2d5b Update Node.js to v14.17.1 2021-06-23 17:46:11 +03:00
Oleg Kalachev
763b158fb5 Use install_gitbook for gitbook installation 2021-06-23 17:45:46 +03:00
Oleg Kalachev
6efa9c89d7 Yet another attempt to enforce using PX4’s mavlink in sitl_gazebo 2021-06-23 09:04:48 +03:00
Oleg Kalachev
93af5e2700 Try another way to enforce using PX4’s mavlink 2021-06-23 03:36:57 +03:00
Oleg Kalachev
2eb18b7ab3 Clone Firmware recursively 2021-06-23 02:55:30 +03:00
Oleg Kalachev
ef008af9d2 Simplify setup setp 2021-06-23 02:54:37 +03:00
Oleg Kalachev
5e38d72e63 Add comment 2021-06-23 02:52:10 +03:00
Oleg Kalachev
ae92554d52 Enforce using PX4’s mavlink in sitl_gazebo
Instead of ROS mavlink
2021-06-23 02:25:34 +03:00
Oleg Kalachev
6b464d83b9 Make examples directory a symlink 2021-06-23 00:06:05 +03:00
Oleg Kalachev
6a41aa1c21 Clone master branch of clover 2021-06-23 00:04:14 +03:00
Oleg Kalachev
3e22ed3824 Use base focal image 2021-06-23 00:03:17 +03:00
Oleg Kalachev
acf9d304d2 Use apt-get not apt
apt issues warnings as it doesn’t have a stable interface
2021-06-22 23:52:42 +03:00
Oleg Kalachev
3621327929 Merge commit 'd0670f123588a5144f41c5626f49c952f061780a' into actions-noetic 2021-06-22 23:47:02 +03:00
Oleg Kalachev
0759a10973 Echo commands in install software script 2021-06-22 21:56:46 +03:00
Oleg Kalachev
e491ca6e18 Echo commands in build script 2021-06-22 21:55:39 +03:00
Oleg Kalachev
15b685ca06 Make build script work on mac and linux 2021-06-22 21:54:47 +03:00
Oleg Kalachev
09551d89e3 Use packer for darwin 2021-06-22 20:17:17 +03:00
Oleg Kalachev
ae652f0d1c Try macos-10.15 2021-06-22 20:14:55 +03:00
Oleg Kalachev
2b5548fe7f Try Ubuntu Bionic 2021-06-22 19:10:44 +03:00
Oleg Kalachev
969ed1dbdc Use apt-get not apt 2021-06-22 19:06:10 +03:00
Oleg Kalachev
fc4b87bb64 Ubuntu 20.04 2021-06-22 19:02:51 +03:00
Oleg Kalachev
5fbcca0fa3 Simplify script 2021-06-22 19:00:03 +03:00
Oleg Kalachev
aaadd0f72e Fix 2021-06-22 18:59:25 +03:00
Oleg Kalachev
b3faab68e1 Echo commands 2021-06-22 18:52:07 +03:00
Oleg Kalachev
93d75e8a02 Add GitHub actions workflow 2021-06-22 18:20:59 +03:00
Alexey Rogachevskiy
d0670f1235 ros_ide_vm: Don't try to disable scrensaver
Apparently there's more to it than just this one file. Need to investigate further.
2020-10-27 00:06:59 +03:00
Alexey Rogachevskiy
5b599431a1 scripts: Re-add rqt_multiplot installation 2020-10-26 21:58:33 +03:00
Alexey Rogachevskiy
de95bbb2bb scripts: Build against the 22 branch 2020-10-26 21:41:07 +03:00
Alexey Rogachevskiy
74a83d7159 ros_ide_vm: Remove vscode configuration
It's all Python3 now
2020-10-26 21:39:54 +03:00
Alexey Rogachevskiy
244c678e46 scripts, ros_ide_vm: Disable screen autolock 2020-10-26 21:36:54 +03:00
Alexey Rogachevskiy
56e0f805db scripts: Temporarily disable rqt_multiplot installation
It is not yet released for Noetic. May have to build it from sources for x86_64.
2020-10-26 19:25:31 +03:00
Alexey Rogachevskiy
07c328484d scripts: Use proper branch for clover 2020-10-26 11:06:03 +03:00
Alexey Rogachevskiy
dafebce445 scripts: Re-enable patching sitl_gazebo 2020-10-26 09:40:44 +03:00
Alexey Rogachevskiy
ed2e767748 scripts: Use absolute path for mav_comm clone 2020-10-26 08:32:51 +03:00
Alexey Rogachevskiy
407a1a30cf scripts: Use Python3, noetic wherever possible 2020-10-25 23:58:34 +03:00
Alexey Rogachevskiy
b3dd27356e assets: Update sitl_gazebo patch 2020-10-25 23:03:37 +03:00
Alexey Rogachevskiy
841f8f45b1 Update to Ubuntu Focal 2020-10-25 22:59:50 +03:00
14 changed files with 216 additions and 337 deletions

View File

@@ -5,12 +5,10 @@ on:
branches: [ '*' ]
pull_request:
branches: [ master ]
release:
types: [ created ]
jobs:
build:
runs-on: macos-12 # Using macOS as https://github.com/actions/virtual-environments/issues/183
runs-on: macos-10.15 # Using macOS as https://github.com/actions/virtual-environments/issues/183
steps:
- uses: actions/checkout@v2
- name: Download base image
@@ -20,9 +18,5 @@ jobs:
- name: Build
run: ./build.sh
- name: Upload
if: ${{ github.event_name == 'release' }}
# Not using ready S3 actions, because they either don't run on macOS machines or don't support changing the endpoint
run: |
AWS_ACCESS_KEY_ID=${{secrets.S3_KEY}} AWS_SECRET_ACCESS_KEY=${{secrets.S3_SECRET_KEY}} aws s3 sync . s3://clovervm/ --acl public-read --endpoint-url https://ams3.digitaloceanspaces.com --no-progress
echo Uploaded https://clovervm.ams3.digitaloceanspaces.com/$(ls)
run: AWS_ACCESS_KEY_ID=${{secrets.S3_KEY}} AWS_SECRET_ACCESS_KEY=${{secrets.S3_SECRET_KEY}} aws s3 sync . s3://clovervm/ --acl public-read --endpoint-url https://ams3.digitaloceanspaces.com --no-progress
working-directory: output-virtualbox-ovf

21
LICENSE
View File

@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020 Copter Express Technologies
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,19 +0,0 @@
# Clover drone VM image
The generator of Clover developer virtual machine image (`.ova` file) to simplify working with Clover and Clover simulation.
Download the latest image in [Releases](https://github.com/CopterExpress/clover_vm/releases/latest) section.
<img src=https://clover.coex.tech/assets/simulator.jpg width=600>
Image contains:
* Ubuntu 20.04 Focal.
* ROS Noetic.
* PX4 autopilot, QGroundControl.
* Preinstalled [Clover](https://github.com/CopterExpress/clover) and Clover simulation packages.
* Shortcuts for running Clover simulator.
* VSCode.
* Useful robotics-related software.
See detailed information in [Clover drone documentation](https://clover.coex.tech/en/simulation_vm.html).

View File

@@ -1 +0,0 @@
unknown

View File

@@ -1,7 +0,0 @@
[Desktop Entry]
Version=1.0
Type=Link
Name=Clover Drone Kit Tools
Comment=Open web based Clover tools
Icon=user-bookmarks
URL=http://localhost/

View File

@@ -1,8 +1,8 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=Gazebo Clover
Comment=Run Clover drone simulation in Gazebo
Name=Gazebo PX4
Comment=Fully-featured Gazebo simulation with default PX4 settings
Exec=/bin/bash -c 'source /home/clover/catkin_ws/devel/setup.bash; roslaunch clover_simulation simulator.launch'
Icon=gazebo
Path=

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=jMAVSim + Clover
Comment=A lightweight PX4 simulator + Clover services
Exec=/bin/bash -c 'source /home/clover/catkin_ws/devel/setup.bash; roslaunch clover_simulation simulator.launch type:=jmavsim'
Icon=openjdk-8
Path=
Terminal=true
StartupNotify=false

View File

@@ -0,0 +1,10 @@
[Desktop Entry]
Version=1.0
Type=Application
Name=jMAVSim
Comment=A lightweight PX4 simulator
Exec=/bin/bash -c 'cd ~/Firmware; make px4_sitl jmavsim'
Icon=openjdk-8
Path=
Terminal=true
StartupNotify=false

View File

@@ -1,36 +1,28 @@
diff --git a/src/gazebo_gps_plugin.cpp b/src/gazebo_gps_plugin.cpp
index 1195f5e..6540596 100644
--- a/src/gazebo_gps_plugin.cpp
+++ b/src/gazebo_gps_plugin.cpp
@@ -41,7 +41,6 @@ GpsPlugin::~GpsPlugin()
if (updateSensorConnection_)
updateSensorConnection_->~Connection();
parentSensor_.reset();
- world_->Reset();
}
diff --git a/cmake/FindMAVLink.cmake b/cmake/FindMAVLink.cmake
index 8de3079..3fdae02 100644
--- a/cmake/FindMAVLink.cmake
+++ b/cmake/FindMAVLink.cmake
@@ -19,6 +19,7 @@ set(_MAVLINK_EXTRA_SEARCH_HINTS
${CMAKE_SOURCE_DIR}/mavlink/
../../mavlink/
../mavlink/
+ $ENV{HOME}/Firmware/mavlink/include
${CATKIN_DEVEL_PREFIX}/
)
void GpsPlugin::Load(sensors::SensorPtr _parent, sdf::ElementPtr _sdf)
diff --git a/src/gazebo_groundtruth_plugin.cpp b/src/gazebo_groundtruth_plugin.cpp
index 441ebd9..dd66e12 100644
--- a/src/gazebo_groundtruth_plugin.cpp
+++ b/src/gazebo_groundtruth_plugin.cpp
@@ -51,7 +51,6 @@ GroundtruthPlugin::~GroundtruthPlugin()
{
if (updateConnection_)
updateConnection_->~Connection();
- world_->Reset();
}
void GroundtruthPlugin::Load(physics::ModelPtr _model, sdf::ElementPtr _sdf)
diff --git a/src/gazebo_lidar_plugin.cpp b/src/gazebo_lidar_plugin.cpp
index 38374e6..1b2fbf8 100644
--- a/src/gazebo_lidar_plugin.cpp
+++ b/src/gazebo_lidar_plugin.cpp
@@ -47,7 +47,6 @@ LidarPlugin::~LidarPlugin()
newLaserScansConnection_->~Connection();
newLaserScansConnection_.reset();
parentSensor_.reset();
- world_->Reset();
}
/////////////////////////////////////////////////
diff --git a/package.xml b/package.xml
index ae0fb34..12f17b8 100644
--- a/package.xml
+++ b/package.xml
@@ -50,8 +50,8 @@
<build_depend>roscpp</build_depend>
<build_depend>sensor_msgs</build_depend>
<build_depend>std_msgs</build_depend>
- <build_depend>python-rospkg</build_depend>
- <build_depend>python-jinja2</build_depend>
+ <build_depend>python3-rospkg</build_depend>
+ <build_depend>python3-jinja2</build_depend>
<run_depend>eigen</run_depend>
<run_depend>gazebo_ros</run_depend>
<run_depend>geometry_msgs</run_depend>

View File

@@ -5,18 +5,6 @@ set -ex
# FIXME: Use system Packer if possible
#PACKER=$(which packer)
echo "--- Fill version asset"
# if [[ $GITHUB_REF == refs/tags/*-rc* ]]; then
# remove rc label
# VERSION=${GITHUB_REF#refs/tags/}
# VERSION=${VERSION/-rc*/}
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=$(git describe --always)
fi
echo $VERSION > assets/clover_vm_version
#if [ "x${PACKER}" == "x" ]; then
PACKER="./packer"
if [ ! -f ${PACKER} ]; then
@@ -44,8 +32,14 @@ ${PACKER} build ros_ide_vm.json
echo "--- Marking the VM"
VM_NAME="clover-devel_${VERSION}.ova"
GIT_REV=$(git rev-parse --short HEAD)
GIT_DESCRIBE=$(git describe --always)
VM_NAME="clover-devel_${GIT_DESCRIBE}.ova"
mv ./output-virtualbox-ovf/clover-devel.ova ./output-virtualbox-ovf/${VM_NAME}
ls -l output-virtualbox-ovf
echo "--- All done!"
if [ "${CI}" == "true" ]; then
echo "Deploying to https://clovervm.ams3.digitaloceanspaces.com/${VM_NAME}"
fi

View File

@@ -63,14 +63,9 @@
"source": "{{user `assetsDir`}}/patches",
"destination": "/tmp"
},
{
"type": "file",
"source": "{{user `assetsDir`}}/clover_vm_version",
"destination": "/tmp/clover_vm_version"
},
{
"type": "shell",
"script": "scripts/install_software.sh",
"script": "scripts/installSoftware.sh",
"execute_command": "PASSWORD='{{user `password`}}' bash '{{.Path}}'"
}]
}

158
scripts/installSoftware.sh Normal file
View File

@@ -0,0 +1,158 @@
#!/usr/bin/env bash
set -ex
echo "--- Current environment:"
/usr/bin/env
echo "Enabling passwordless sudo"
echo "${PASSWORD}" | sudo -E -S sh -c "echo '${USER} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers"
echo "--- Increasing apt retries"
sudo -E sh -c 'echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries'
cat /etc/apt/apt.conf.d/80-retries
echo "--- Allowing apt to perform its updates"
sudo -E sh -c 'apt-get update; while fuser /var/lib/dpkg/lock ; do sleep 0.5 ; done'
echo "--- Installing open-vm-tools"
sudo -E sh -c 'apt-get update; apt-get install -y open-vm-tools open-vm-tools-desktop'
echo "--- Installing ROS desktop packages"
sudo -E sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo -E sh -c 'apt-key adv --keyserver "hkp://keyserver.ubuntu.com:80" --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654'
sudo -E sh -c 'apt-get update; apt-get install -y python3-rosdep python3-rosinstall-generator python3-wstool build-essential ros-noetic-desktop'
sudo -E sh -c 'rosdep init'
rosdep update
# FIXME: PX4 needs pip to be installed
# FIXME: python2 dependencies?
echo "--- Downloading PX4 and installing its dependencies"
git clone --recursive -b v1.11.1-clover https://github.com/CopterExpress/Firmware ${HOME}/Firmware
# PX4 v1.11.1 script will happily run sudo by itself
${HOME}/Firmware/Tools/setup/ubuntu.sh
# Ubuntu 20.04 no longer sets assistive_technologies, thankfully
echo "--- Prebuilding PX4 SITL configuration"
make -C ${HOME}/Firmware px4_sitl
echo "--- Patching gazebo plugins for SITL"
cd ${HOME}/Firmware/Tools/sitl_gazebo
patch -p1 < /tmp/patches/sitl_gazebo.patch
echo 'export SVGA_VGPU10=0' >> ${HOME}/Firmware/Tools/setup_gazebo.bash
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "--- Installing Visual Studio Code"
sudo -E sh -c 'apt-get update; apt-get install -y curl'
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > ${HOME}/packages.microsoft.gpg
sudo -E sh -c 'install -o root -g root -m 644 ${HOME}/packages.microsoft.gpg /usr/share/keyrings'
rm ${HOME}/packages.microsoft.gpg
sudo -E sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo -E sh -c 'apt-get install -y apt-transport-https; apt-get update; apt-get install -y code'
code --install-extension ms-python.python
code --install-extension DavidAnson.vscode-markdownlint
code --install-extension ms-vscode.cmake-tools
code --install-extension ms-vscode.cpptools
code --install-extension streetsidesoftware.code-spell-checker
code --install-extension eamodio.gitlens
echo "--- Installing pylint"
/usr/bin/python3 -m pip install -U pylint --user
echo "--- Cloning and installing Clover packages"
sudo sh -c 'curl http://deb.coex.tech/aptly_repo_signing.key 2> /dev/null | apt-key add -'
sudo sh -c 'echo "deb http://deb.coex.tech/ros xenial main" > /etc/apt/sources.list.d/coex.tech.list'
sudo sh -c 'echo "yaml file:///etc/ros/rosdep/coex.yaml" > /etc/ros/rosdep/sources.list.d/99-coex.list'
sudo sh -c 'cat <<EOF > /etc/ros/rosdep/coex.yaml
led_msgs:
ubuntu:
focal: [ros-noetic-led-msgs]
async_web_server_cpp:
ubuntu:
focal: [ros-noetic-async-web-server-cpp]
ros_pytest:
ubuntu:
focal: [ros-noetic-ros-pytest]
tf2_web_republisher:
ubuntu:
focal: [ros-noetic-tf2-web-republisher]
web_video_server:
ubuntu:
focal: [ros-noetic-web-video-server]
ws281x:
ubuntu:
focal: [ros-noetic-ws281x]
EOF'
sudo apt-get update
rosdep update
mkdir -p ${HOME}/catkin_ws/src
git clone https://github.com/CopterExpress/clover ${HOME}/catkin_ws/src/clover
git clone https://github.com/CopterExpress/ros_led ${HOME}/catkin_ws/src/ros_led
# These packages are missing from Noetic release, but are required for sitl_gazebo
git clone https://github.com/ethz-asl/mav_comm ${HOME}/catkin_ws/src/mav_comm
# Make PX4 and Gazebo plugins visible in the workspace
ln -s ${HOME}/Firmware ${HOME}/catkin_ws/src/Firmware
ln -s ${HOME}/Firmware/Tools/sitl_gazebo ${HOME}/catkin_ws/src/sitl_gazebo
rosdep install --from-paths ${HOME}/catkin_ws/src --ignore-src --rosdistro noetic -y
sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
sudo /usr/bin/python3 -m pip install -r ${HOME}/catkin_ws/src/clover/clover/requirements.txt
source /opt/ros/noetic/setup.bash
cd ${HOME}/catkin_ws && catkin_make
echo "source ${HOME}/catkin_ws/devel/setup.bash" >> ~/.bashrc
echo "--- Installing npm"
cd ${HOME}
NODE_VERSION=v10.15.0 # GitBook won't install on newer version
wget --progress=dot:giga https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz
tar -xzf node-$NODE_VERSION-linux-x64.tar.gz
sudo cp -R node-$NODE_VERSION-linux-x64/* /usr/local/
rm -rf node-$NODE_VERSION-linux-x64 node-$NODE_VERSION-linux-x64.tar.gz
echo "--- Reconfiguring npm to use local prefix"
mkdir ${HOME}/.npm-global
npm config set prefix "${HOME}/.npm-global"
export PATH=${HOME}/.npm-global/bin:$PATH
echo 'export PATH='${HOME}'/.npm-global/bin:$PATH' >> ${HOME}/.bashrc
echo "--- Installing gitbook and building docs"
cd ${HOME}/catkin_ws/src/clover
builder/assets/install_gitbook.sh
gitbook install
gitbook build
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE # ignore documentation files by catkin
echo "--- Exposing examples"
ln -s ${HOME}/catkin_ws/src/clover/builder/assets/examples ${HOME}/
echo "--- Enabling roscore service"
sed -i "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service
sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
sudo systemctl enable roscore.service
echo "--- Installing QGroundControl"
sudo -E sh -c "usermod -a -G dialout $USER"
sudo -E sh -c 'apt-get remove -y modemmanager; apt-get install -y gstreamer1.0-plugins-bad gstreamer1.0-libav'
curl https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage -o ${HOME}/QGroundControl.AppImage
chmod a+x ${HOME}/QGroundControl.AppImage
echo "--- Installing Firefox web browser"
sudo -E sh -c 'apt-get update; apt-get install -y firefox'
echo "--- Installing Monkey web server"
sudo apt-get install -y /tmp/packages/monkey_1.6.9-1_amd64.deb
sed "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/monkey | sudo tee /etc/monkey/sites/default
sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
sudo systemctl enable monkey
echo "--- Installing additional packages"
sudo -E sh -c 'apt-get update; apt-get install -y sshfs gvfs-fuse gvfs-backends python3-opencv byobu ipython3 byobu nmap lsof tmux vim ros-noetic-rqt-multiplot'
echo "--- Personalizing VM"
sudo -E sh -c 'cp /usr/share/xfce4/backdrops/xubuntu-wallpaper.png /usr/share/xfce4/backdrops/xubuntu-wallpaper-old.png; cp ${HOME}/Pictures/Logo_COEX_2019_white_on_black.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png'
sudo -E sh -c 'hostnamectl set-hostname clover-dev; sed -i "s/ubuntu/clover-dev clover-dev.local/g" /etc/hosts'
echo "export ROS_HOSTNAME=\`hostname\`.local" >> ${HOME}/.bashrc
chmod a+x ${HOME}/Desktop/*
echo "--- Cleaning up"
sudo -E sh -c 'apt-get -y autoremove; apt-get -y autoclean; apt-get -y clean; fstrim -v /'

View File

@@ -1,226 +0,0 @@
#!/usr/bin/env bash
set -ex
echo "--- Current environment:"
/usr/bin/env
echo "Enabling passwordless sudo"
echo "${PASSWORD}" | sudo -E -S sh -c "echo '${USER} ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers"
echo "--- Increasing apt retries"
sudo -E sh -c 'echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retries'
cat /etc/apt/apt.conf.d/80-retries
echo "--- Updating apt"
sudo -E sh -c 'apt-get update'
echo "--- Allowing apt to perform its updates"
sudo -E sh -c 'while fuser /var/lib/dpkg/lock ; do sleep 0.5 ; done'
echo "--- Installing open-vm-tools"
sudo -E sh -c 'apt-get install -y open-vm-tools open-vm-tools-desktop'
echo "--- Installing ROS desktop"
sudo -E sh -c 'apt-get install -y curl'
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo -E sh -c 'apt-get update; apt-get install -y python3-pip python3-rosdep python3-rosinstall-generator python3-wstool build-essential ros-noetic-desktop'
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source /opt/ros/noetic/setup.bash
echo "--- Updating rosdep"
sudo -E sh -c 'rosdep init'
rosdep update
echo "--- Creating Catkin workspace"
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/catkin_ws/devel/setup.bash
echo "--- Getting 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
echo "--- Installing dependencies with rosdep"
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src -y
echo "--- Installing Clover's Python dependencies"
sudo -E sh -c '/usr/bin/python3 -m pip install -r ~/catkin_ws/src/clover/clover/requirements.txt'
echo "--- Downloading PX4"
git clone --recursive --depth 1 --branch v1.13.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/src/modules/mavlink/mavlink ~/catkin_ws/src/
#git clone --depth 1 https://github.com/mavlink/c_library_v2.git ~/catkin_ws/src/mavlink/ # FIXME:
echo "--- Installing PX4 dependencies"
~/PX4-Autopilot/Tools/setup/ubuntu.sh
pip3 install --user toml
sudo -E sh -c 'apt-get install -y ant openjdk-11-jdk' # Additional packages for jMAVSim
echo "--- Patching mavlink_sitl_gazebo"
# See https://github.com/PX4/PX4-SITL_gazebo/pull/872
cd ~/PX4-Autopilot/Tools/sitl_gazebo
patch -p1 < /tmp/patches/sitl_gazebo.patch
echo "--- Addding Gazebo initialization to bashrc"
echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc
echo "export SVGA_VGPU10=0" >> ~/.bashrc
echo "--- Addding Clover airframe"
ln -s ~/catkin_ws/src/clover/clover_simulation/airframes/* ~/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
echo "--- Installing geographiclib datasets"
sudo -E sh -c '/opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh'
echo "--- Build PX4"
cd ~/PX4-Autopilot
make px4_sitl
echo "--- Build mavlink"
cd ~/catkin_ws
catkin_make mavlink_c_generate -DCATKIN_WHITELIST_PACKAGES="px4" # at first build px4's mavlink to force mavlink_sitl_gazebo to use it
ln -s "." build/mavlink/mavlink # fix https://github.com/PX4/PX4-Autopilot/pull/19964
echo "--- Building the workspace"
catkin_make -DCATKIN_WHITELIST_PACKAGES=""
echo "--- Installing Visual Studio Code"
sudo -E sh -c 'apt-get update; apt-get install -y curl'
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > ${HOME}/packages.microsoft.gpg
sudo -E sh -c 'install -o root -g root -m 644 ${HOME}/packages.microsoft.gpg /usr/share/keyrings'
rm ${HOME}/packages.microsoft.gpg
sudo -E sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'
sudo -E sh -c 'apt-get install -y apt-transport-https; apt-get update; apt-get install -y code'
code --install-extension ms-python.python
code --install-extension DavidAnson.vscode-markdownlint
code --install-extension ms-vscode.cmake-tools
code --install-extension ms-vscode.cpptools
code --install-extension streetsidesoftware.code-spell-checker
code --install-extension eamodio.gitlens
echo "--- Installing additional Python packages"
/usr/bin/python3 -m pip install -U pylint pyzbar --user
echo "--- Exposing examples"
ln -s ${HOME}/catkin_ws/src/clover/clover/examples ${HOME}/
[[ -d ${HOME}/examples ]] # test symlink is valid
echo "--- Installing npm and building documentation"
cd ${HOME}
NODE_VERSION=v10.15.0 # GitBook won't install on newer version
wget --progress=dot:giga https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz
tar -xzf node-$NODE_VERSION-linux-x64.tar.gz
sudo cp -R node-$NODE_VERSION-linux-x64/* /usr/local/
rm -rf node-$NODE_VERSION-linux-x64 node-$NODE_VERSION-linux-x64.tar.gz
echo "--- Reconfiguring npm to use local prefix"
mkdir ${HOME}/.npm-global
npm config set prefix "${HOME}/.npm-global"
export PATH=${HOME}/.npm-global/bin:$PATH
echo 'export PATH='${HOME}'/.npm-global/bin:$PATH' >> ${HOME}/.bashrc
echo "--- Installing gitbook and building docs"
cd ${HOME}/catkin_ws/src/clover
builder/assets/install_gitbook.sh
gitbook install
gitbook build
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE # ignore documentation files by catkin
echo "--- Enabling roscore service"
sed -i "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service
sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
sudo systemctl enable roscore.service
echo "--- Installing QGroundControl"
sudo -E sh -c "usermod -a -G dialout $USER"
sudo -E sh -c 'apt-get remove -y modemmanager; apt-get install -y gstreamer1.0-plugins-bad gstreamer1.0-libav'
curl https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage -o ${HOME}/QGroundControl.AppImage
chmod a+x ${HOME}/QGroundControl.AppImage
echo "--- Installing Firefox web browser"
sudo -E sh -c 'apt-get update; apt-get install -y firefox'
echo "--- Installing Monkey web server"
sudo apt-get install -y /tmp/packages/monkey_1.6.9-1_amd64.deb
sed "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/monkey | sudo tee /etc/monkey/sites/default
sudo -E sh -c "sed -i 's/SymLink Off/SymLink On/' /etc/monkey/monkey.conf"
sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
sudo systemctl enable monkey
echo "--- Installing additional packages"
sudo -E sh -c 'apt-get update; apt-get install -y sshfs gvfs-fuse gvfs-backends python3-opencv byobu ipython3 byobu nmap lsof tmux vim ros-noetic-rqt-multiplot'
echo "--- Personalizing VM"
sudo -E sh -c 'cp /usr/share/xfce4/backdrops/xubuntu-wallpaper.png /usr/share/xfce4/backdrops/xubuntu-wallpaper-old.png; cp ${HOME}/Pictures/Logo_COEX_2019_white_on_black.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png'
sudo -E sh -c 'hostnamectl set-hostname clover-dev; sed -i "s/ubuntu/clover-dev clover-dev.local/g" /etc/hosts'
echo "export ROS_HOSTNAME=\`hostname\`.local" >> ${HOME}/.bashrc
chmod a+x ${HOME}/Desktop/*
echo "--- Creating /etc/clover_vm_version"
sudo -E sh -c 'mv /tmp/clover_vm_version /etc/clover_vm_version'
cat /etc/clover_vm_version
echo "--- Cleaning up"
sudo -E sh -c 'apt-get -y autoremove; apt-get -y autoclean; apt-get -y clean; fstrim -v /'
echo "--- Validating"
# python --version # python-is-python3
python2 --version
python3 --version
# ipython --version
ipython3 --version
gazebo --version || true # FIXME: Gazebo exits with 255 on --version somehow
node -v
npm -v
byobu --version
git --version
vim --version
pip --version
pip3 --version
monkey --version
systemctl --version
# TODO: add Python tests
roscore -h
rosversion px4
rosversion clover
rosversion aruco_pose
rosversion mavros
rosversion mavros_extras
rosversion ws281x
rosversion led_msgs
rosversion dynamic_reconfigure
rosversion tf2_web_republisher
# rosversion compressed_image_transport
# rosversion rosbridge_suite
rosversion cv_camera
rosversion web_video_server
rosversion nodelet
echo "--- Run Clover's Python libraries validation"
$HOME/catkin_ws/src/clover/builder/test/tests_py3.py
echo "--- Versions of all installed ROS packages"
set +x
rospack list-names | while read line; do echo $line `rosversion $line`; done
set -x
echo "--- Test building the firmware"
sudo -E sh -c 'apt-get install -y gcc-arm-none-eabi'
cd ~/PX4-Autopilot
make px4_fmu-v4_default
echo "Trying running the Gazebo simulator, check the output"
timeout --preserve-status 30 roslaunch clover_simulation simulator.launch gui:=false --screen
echo "Trying running jMAVSim, check the output"
# cd ~/PX4-Autopilot
# HEADLESS=1 timeout --preserve-status 30 make px4_sitl jmavsim
HEADLESS=1 timeout --preserve-status 30 roslaunch clover_simulation simulator.launch type:=jmavsim gui:=false --screen