Compare commits

..

57 Commits

Author SHA1 Message Date
Oleg Kalachev
80bb84642b Fix 2021-08-11 20:52:06 +03:00
Oleg Kalachev
f712150a6a Add Clover airframe to PX4 2021-08-11 19:20:35 +03:00
Oleg Kalachev
46a40dd125 Fix 2021-08-11 18:53:39 +03:00
Oleg Kalachev
e0ec23329c Disable patching sitl_gazebo 2021-08-11 17:56:16 +03:00
Oleg Kalachev
4243e3a25e Use original PX4 v1.12 2021-08-11 17:56:00 +03:00
Oleg Kalachev
a5474bad7c Minor fixes 2021-07-29 23:27:01 +03:00
Oleg Kalachev
9fb343e6c4 Check px4 ROS package presence 2021-07-29 23:21:54 +03:00
Oleg Kalachev
a85dce875a Make gazebo command work from the terminal 2021-07-29 21:17:03 +03:00
Oleg Kalachev
4732c984aa Implement image validation 2021-07-29 20:29:26 +03:00
Oleg Kalachev
f0cc0a9aae Upload images to S3 only on releases 2021-07-29 20:19:51 +03:00
Oleg Kalachev
d1c37fd335 Source Gazebo’s setup.sh in .bashrc 2021-07-28 00:41:21 +03:00
Oleg Kalachev
55eb216b0c Temporarily remove jMAVSim + Clover shortcut as it doesn’t work properly 2021-07-09 10:17:28 +03:00
Oleg Kalachev
44d413e3ae Make link to latest release in readme 2021-06-30 16:09:18 +03:00
Oleg Kalachev
8b02b85b69 Create LICENSE 2021-06-30 04:56:58 +03:00
Oleg Kalachev
5be68ffa65 Print link to image in upload setup 2021-06-30 04:49:34 +03:00
Oleg Kalachev
f5e3be0222 Fix examples symlink path 2021-06-29 23:37:13 +03:00
Oleg Kalachev
c7925e75a7 Add test for examples symlink validness 2021-06-29 23:36:30 +03:00
Oleg Kalachev
b4c43decb3 Add a comment 2021-06-29 17:26:14 +03:00
Oleg Kalachev
9d3e07eb6d Add README 2021-06-29 05:55:52 +03:00
Oleg Kalachev
d4f1aa5205 Disable removing rc label from image file name 2021-06-29 05:36:54 +03:00
Oleg Kalachev
c1be6a58f5 Build image on release created 2021-06-29 05:31:07 +03:00
Oleg Kalachev
1cf82a36b7 Name image file using tag name 2021-06-29 04:24:48 +03:00
Oleg Kalachev
1b1a5a5121 installSoftware.sh -> install_software.sh 2021-06-29 04:24:17 +03:00
Oleg Kalachev
d9bd9a531c Build image in GitHub Actions 2021-06-29 03:58:03 +03:00
Oleg Kalachev
3383261d3e Update PX4 to v1.11.1-clover 2021-06-29 03:28:34 +03:00
Oleg Kalachev
299427e72a Use install_gitbook.sh 2021-06-29 03:28:06 +03:00
Oleg Kalachev
fd99c500d8 Update to Ubuntu Focal and ROS Noetic 2021-06-29 03:27:36 +03:00
Oleg Kalachev
6e0ae794a8 Print image size 2021-06-29 03:14:03 +03:00
Oleg Kalachev
0ab9135864 Use apt-get not apt
apt issues warnings as it doesn’t have a stable interface
2021-06-29 03:12:40 +03:00
Oleg Kalachev
50e6b431a6 Echo commands in scripts 2021-06-29 03:11:27 +03:00
Oleg Kalachev
77d5496ede Make examples directory a symlink 2021-06-29 03:10:34 +03:00
Oleg Kalachev
129936bb4c v0.4.1 2021-02-22 20:42:39 +03:00
Oleg Kalachev
8393fd4c27 Fix building sitl_gazebo (#2) 2021-01-26 15:49:44 +03:00
Oleg Kalachev
141a6f37b5 Add jMAVSim + Clover shortcut 2021-01-13 18:29:54 +03:00
Oleg Kalachev
7b046547a4 Simplify VS Code shortcut title 2021-01-13 18:29:44 +03:00
Oleg Kalachev
29f4118dc6 Use git describe for image name 2020-10-23 16:59:37 +03:00
Alexey Rogachevskiy
18e3d2408f scripts: Use master branch for clover 2020-08-14 16:36:39 +03:00
Alexey Rogachevskiy
b452360661 build: Fix syntax 2020-08-11 23:24:09 +03:00
Alexey Rogachevskiy
db0d54ba27 build: Show deploy link in logs 2020-08-11 00:59:21 +03:00
Alexey Rogachevskiy
b8efc64718 assets, scripts: More clever->clover transitions 2020-08-10 19:01:37 +03:00
Alexey Rogachevskiy
16e81cabf9 scripts: ugh, npm 2020-08-10 02:14:38 +03:00
Alexey Rogachevskiy
a87234921d scripts: Expose examples 2020-08-10 00:33:33 +03:00
Alexey Rogachevskiy
62391fa4d4 scripts: Install Node.js and build Clover docs 2020-08-10 00:30:45 +03:00
Alexey Rogachevskiy
d3dded96a8 scripts: Use v1.10.1-clover branch for PX4 2020-08-07 17:07:49 +03:00
Alexey Rogachevskiy
de5ea26b6c travis: Use xvfb to run packer
This may help with SSH timeouts - apparently something is wrong when
Virtualbox starts without an X session, so the internal X session fails.
2020-08-04 13:23:01 +03:00
Alexey Rogachevskiy
9c7e1926aa base_vm, ros_ide_vm: Rename clever to clover 2020-08-04 00:10:00 +03:00
Alexey Rogachevskiy
345d639e53 scripts: Remove hardcoded paths to $HOME, prepare for renaming 2020-08-03 19:06:15 +03:00
Alexey Rogachevskiy
03a52f7129 scripts: Respect requirements.txt from clover 2020-07-22 00:35:03 +03:00
Alexey Rogachevskiy
f5ded4c4e2 build: Bring back check for prebuilt image 2020-07-20 23:31:50 +03:00
Alexey Rogachevskiy
d2bce5c4ad travis: Try downgrading virtualbox
Not sure if it's going to help, but why not?
2020-07-20 23:16:30 +03:00
Alexey Rogachevskiy
e31ff0d850 build.sh: Always run Packer twice
First invocation will most likely fail, but I can't see other major differences
between working (travis-integration branch) and not working (main branch)
Virtualboxes.
2020-07-20 22:45:34 +03:00
Alexey Rogachevskiy
5ede163f02 travis, build: Produce less dots 2020-07-20 22:29:26 +03:00
Alexey Rogachevskiy
f209bf024c build.sh: Add version to resulting image 2020-07-20 22:03:30 +03:00
Alexey Rogachevskiy
66f544add5 travis: Upload directly to root 2020-07-20 22:03:14 +03:00
Alexey Rogachevskiy
4417ac6651 build.sh: Don't try to build base image if it already exists 2020-07-20 21:55:01 +03:00
Alexey Rogachevskiy
34fc51389f travis: Enable image builds for main branch
Squashed commit of the following:

commit c70fc8dd0b
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Thu Jul 9 21:26:47 2020 +0300

    travis: Use proper bucket name

commit d9fc21773b
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Thu Jul 9 21:14:38 2020 +0300

    travis: Use S3 key stored in travis environment

commit 8ef93c928a
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Thu Jul 9 20:02:28 2020 +0300

    travis: Set actual S3 endpoint

commit 848e4b33f7
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Thu Jul 9 18:50:41 2020 +0300

    travis: Try enabling deployments

commit 11196f0c7d
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Thu Jul 9 17:03:44 2020 +0300

    scripts: Allow apt to finish doing initial updates

commit 46064eafe2
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 22:16:18 2020 +0300

    ros_ide_vm: Be even more CI-friendly

commit 72f35a0b04
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 22:05:57 2020 +0300

    ros_ide_vm: Allocate less resources for build

commit 246ba6e5fb
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 22:04:16 2020 +0300

    travis: Download base VM instead of building it

commit 9d2830bfeb
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 20:29:26 2020 +0300

    base_vm: Try building in headless mode

commit 31db396477
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 18:22:54 2020 +0300

    base_vm: Use simplier hardware config

commit 8709ec5873
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 18:05:59 2020 +0300

    build: Download Packer in CI environment (hack)

commit 691cdde431
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 17:58:23 2020 +0300

    travis: Bump Virtualbox version

commit e2c6d709db
Author: Alexey Rogachevskiy <sfalexrog@gmail.com>
Date:   Sun Jul 5 17:54:11 2020 +0300

    travis: Try running Packer in CI
2020-07-20 21:52:52 +03:00
Alexey Rogachevskiy
6c42bbff35 scripts: Simplify sudo invocations 2020-07-05 19:20:11 +03:00
17 changed files with 390 additions and 199 deletions

28
.github/workflows/main.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: Build image
on:
push:
branches: [ '*' ]
pull_request:
branches: [ master ]
release:
types: [ created ]
jobs:
build:
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
run: |
mkdir output-virtualbox-iso
wget --progress=dot:giga https://clovervm.ams3.digitaloceanspaces.com/base-focal.ova -O output-virtualbox-iso/clover-devel.ova
- 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)
working-directory: output-virtualbox-ovf

View File

@@ -4,20 +4,21 @@ before_install:
- wget https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | sudo apt-key
add - && sudo sh -c "echo deb https://download.virtualbox.org/virtualbox/debian
bionic contrib >> /etc/apt/sources.list" && sudo apt-get update && sudo apt-get
install build-essential gcc make linux-headers-$(uname -r) virtualbox-6.1 && sudo
install build-essential gcc make linux-headers-$(uname -r) virtualbox-6.0 && sudo
usermod -aG vboxusers $(whoami)
- mkdir output-virtualbox-iso && pushd output-virtualbox-iso && wget --progress=dot:giga https://github.com/sfalexrog/clever_vm/releases/download/v0_base_vm/clever-devel.ova
- mkdir output-virtualbox-iso && pushd output-virtualbox-iso && wget --progress=dot:giga https://clovervm.ams3.digitaloceanspaces.com/base-focal.ova -O clover-devel.ova
&& popd
- sudo apt install -y xvfb
script:
- "./build.sh"
deploy:
provider: s3
access_key_id: XOJXX4IOM66XN7VZAFYX
secret_access_key: $S3_SECRET_KEY
bucket: clovervm
local-dir: output-virtualbox-ovf
acl: public_read
on:
all_branches: true
skip_cleanup: true
endpoint: https://ams3.digitaloceanspaces.com
- "xvfb-run ./build.sh"
# deploy:
# provider: s3
# access_key_id: XOJXX4IOM66XN7VZAFYX
# secret_access_key: $S3_SECRET_KEY
# bucket: clovervm
# local-dir: output-virtualbox-ovf
# acl: public_read
# on:
# all_branches: true
# skip_cleanup: true
# endpoint: https://ams3.digitaloceanspaces.com

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
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.

19
README.md Normal file
View File

@@ -0,0 +1,19 @@
# 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

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfce4-power-manager" version="1.0">
<property name="xfce4-power-manager" type="empty">
<property name="power-button-action" type="empty"/>
<property name="lock-screen-suspend-hibernate" type="empty"/>
<property name="logind-handle-lid-switch" type="empty"/>
<property name="blank-on-ac" type="empty"/>
<property name="blank-on-battery" type="empty"/>
<property name="dpms-enabled" type="bool" value="false"/>
<property name="dpms-on-ac-sleep" type="empty"/>
<property name="dpms-on-ac-off" type="empty"/>
<property name="dpms-on-battery-sleep" type="empty"/>
<property name="dpms-on-battery-off" type="empty"/>
<property name="show-panel-label" type="empty"/>
<property name="inactivity-sleep-mode-on-ac" type="empty"/>
<property name="inactivity-sleep-mode-on-battery" type="empty"/>
<property name="show-tray-icon" type="bool" value="false"/>
</property>
</channel>

View File

@@ -3,7 +3,7 @@ Version=1.0
Type=Application
Name=Gazebo PX4
Comment=Fully-featured Gazebo simulation with default PX4 settings
Exec=/bin/bash -c 'source /home/clever/catkin_ws/devel/setup.bash; roslaunch clover_simulation simulator.launch'
Exec=/bin/bash -c 'source /home/clover/catkin_ws/devel/setup.bash; roslaunch clover_simulation simulator.launch'
Icon=gazebo
Path=
Terminal=true

View File

@@ -1,8 +1,8 @@
[Desktop Entry]
Name=VS Code + ROS
Name=VS Code
Comment=Code Editing. Redefined.
GenericName=Text Editor
Exec=/bin/bash -c "source /home/clever/catkin_ws/devel/setup.bash; /usr/share/code/code --no-sandbox --unity-launch %F"
Exec=/bin/bash -c "source /home/clover/catkin_ws/devel/setup.bash; /usr/share/code/code --no-sandbox --unity-launch %F"
Icon=/usr/share/pixmaps/com.visualstudio.code.png
Type=Application
StartupNotify=false

View File

@@ -3,7 +3,7 @@ Version=1.0
Type=Application
Name=jMAVSim
Comment=A lightweight PX4 simulator
Exec=/bin/bash -c 'cd ~/Firmware; make px4_sitl jmavsim'
Exec=/bin/bash -c 'cd ~/PX4-Autopilot; make px4_sitl jmavsim'
Icon=openjdk-8
Path=
Terminal=true

View File

@@ -3,7 +3,7 @@ Type=Application
Name=QGroundControl
GenericName=Ground Control Station
Comment=UAS ground control station
Icon=/home/clever/Pictures/qgroundcontrol.png
Exec=/home/clever/QGroundControl.AppImage
Icon=/home/clover/Pictures/qgroundcontrol.png
Exec=/home/clover/QGroundControl.AppImage
Terminal=false
Categories=Utility;

View File

@@ -1,40 +1,28 @@
diff --git a/include/gazebo_opticalflow_plugin.h b/include/gazebo_opticalflow_plugin.h
index 4fbeab2..18a192b 100644
--- a/include/gazebo_opticalflow_plugin.h
+++ b/include/gazebo_opticalflow_plugin.h
@@ -40,7 +40,7 @@
#include "flow_px4.hpp"
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}/PX4-Autopilot/mavlink/include
${CATKIN_DEVEL_PREFIX}/
)
#define DEFAULT_RATE 20
-#define HAS_GYRO TRUE
+#define HAS_GYRO true
using namespace cv;
using namespace std;
diff --git a/src/gazebo_geotagged_images_plugin.cpp b/src/gazebo_geotagged_images_plugin.cpp
index 050558f..7029199 100644
--- a/src/gazebo_geotagged_images_plugin.cpp
+++ b/src/gazebo_geotagged_images_plugin.cpp
@@ -581,7 +581,8 @@ void GeotaggedImagesPlugin::_send_capture_status(struct sockaddr* srcaddr)
0, // video status (Idle)
interval, // image interval
0, // recording_time_s
- available_mib); // available_capacity
+ available_mib, // available_capacity
+ _imageCounter);
_send_mavlink_message(&msg, srcaddr);
}
diff --git a/src/gazebo_mavlink_interface.cpp b/src/gazebo_mavlink_interface.cpp
index 5d29017..d4dd6a7 100644
--- a/src/gazebo_mavlink_interface.cpp
+++ b/src/gazebo_mavlink_interface.cpp
@@ -1039,7 +1039,7 @@ void GazeboMavlinkInterface::VisionCallback(OdomPtr& odom_message) {
odom.time_usec = odom_message->time_usec();
- odom.frame_id = MAV_FRAME_VISION_NED;
+ odom.frame_id = 16 /*MAV_FRAME_VISION_NED*/;
odom.child_frame_id = MAV_FRAME_BODY_FRD;
odom.x = position.X();
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

@@ -1,3 +0,0 @@
{
"python.pythonPath": "/usr/bin/python2.7"
}

View File

@@ -1,8 +1,8 @@
{
"variables" : {
"user": "clever",
"password": "clever",
"vm-name": "clever-devel"
"user": "clover",
"password": "clover",
"vm-name": "clover-devel"
},
"builders": [{
"type": "virtualbox-iso",
@@ -17,10 +17,10 @@
["storageattach", "{{.Name}}", "--storagectl", "SATA Controller", "--port", "0", "--nonrotational", "on", "--discard", "on"]
],
"headless": "true",
"headless": "false",
"iso_url": "http://archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/current/images/netboot/mini.iso",
"iso_checksum": "bed8a55ae2a657f8349fe3271097cff3a5b8c3d1048cf258568f1601976fa30d",
"iso_url": "http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/mini.iso",
"iso_checksum": "0e79e00bf844929d40825b1f0e8634415cda195ba23bae0b041911fde4dfe018",
"iso_checksum_type": "sha256",
"ssh_password": "{{user `password`}}",

View File

@@ -1,5 +1,7 @@
#!/bin/bash
set -ex
# FIXME: Use system Packer if possible
#PACKER=$(which packer)
@@ -7,19 +9,41 @@
PACKER="./packer"
if [ ! -f ${PACKER} ]; then
echo "Packer not found; downloading v1.5.4 from Hashicorp"
wget --progress=dot:giga https://releases.hashicorp.com/packer/1.5.4/packer_1.5.4_linux_amd64.zip
unzip packer_1.5.4_linux_amd64.zip
rm packer_1.5.4_linux_amd64.zip
if [[ "$OSTYPE" == "linux-gnu"* ]]; then
OS=linux
elif [[ "$OSTYPE" == "darwin"* ]]; then
OS=darwin
fi
wget --progress=dot:giga https://releases.hashicorp.com/packer/1.5.4/packer_1.5.4_${OS}_amd64.zip
unzip packer_1.5.4_${OS}_amd64.zip
rm packer_1.5.4_${OS}_amd64.zip
fi
echo "--- Using Packer version $(${PACKER} --version)"
echo "--- Building base image"
${PACKER} build -only=virtualbox-iso base_vm.json
if [ ! -f output-virtualbox-iso/clover-devel.ova ]; then
echo "--- Building base image"
${PACKER} build -only=virtualbox-iso base_vm.json || true
fi
echo "--- Building extended image"
${PACKER} build ros_ide_vm.json
echo "--- Marking the VM"
# 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
VM_NAME="clover-devel_${VERSION}.ova"
mv ./output-virtualbox-ovf/clover-devel.ova ./output-virtualbox-ovf/${VM_NAME}
ls -l output-virtualbox-ovf
echo "--- All done!"

View File

@@ -7,7 +7,7 @@ d-i debconf debconf/frontend select Noninteractive
d-i debian-installer/locale string en_US.utf8
### Hardware enablement kernel
d-i base-installer/kernel/override-image string linux-generic-hwe-18.04
d-i base-installer/kernel/override-image string linux-generic-hwe-20.04
### Keyboard selection
d-i console-setup/ask_detect boolean false
@@ -25,7 +25,7 @@ ubiquity console-keymaps-at/variant select us
d-i kbd-chooser/method select British English
### Network
d-i netcfg/get_hostname string clever-devel
d-i netcfg/get_hostname string clover-devel
d-i netcfg/get_domain string unassigned-domain
### Clock and time zone setup
@@ -41,10 +41,10 @@ d-i partman/choose_partition select finish
d-i partman/confirm boolean true
### Account setup
d-i passwd/user-fullname string clever
d-i passwd/username string clever
d-i passwd/user-password password clever
d-i passwd/user-password-again password clever
d-i passwd/user-fullname string clover
d-i passwd/username string clover
d-i passwd/user-password password clover
d-i passwd/user-password-again password clover
d-i passwd/auto-login boolean true
d-i user-setup/encrypt-home boolean false
d-i user-setup/allow-password-weak boolean true

View File

@@ -1,8 +1,8 @@
{
"variables": {
"user": "clever",
"password": "clever",
"vm-name": "clever-devel",
"user": "clover",
"password": "clover",
"vm-name": "clover-devel",
"scriptsDir": "scripts",
"assetsDir": "assets"
},
@@ -13,7 +13,7 @@
"format": "ova",
"guest_additions_mode": "disable",
"headless": "true",
"headless": "false",
"vboxmanage": [
["modifyvm", "{{.Name}}", "--memory", "6144", "--vram", "128", "--mouse", "usbtablet", "--rtcuseutc", "on", "--nictype1", "virtio"],
@@ -41,17 +41,17 @@
"provisioners": [{
"type": "file",
"source": "{{user `assetsDir`}}/background/",
"destination": "/home/clever/Pictures"
"destination": "/home/{{user `user`}}/Pictures"
},
{
"type": "file",
"source": "{{user `assetsDir`}}/pictures/",
"destination": "/home/clever/Pictures"
"destination": "/home/{{user `user`}}/Pictures"
},
{
"type": "file",
"source": "{{user `assetsDir`}}/desktop/",
"destination": "/home/clever/Desktop"
"destination": "/home/{{user `user`}}/Desktop"
},
{
"type": "file",
@@ -65,12 +65,7 @@
},
{
"type": "shell",
"script": "scripts/installSoftware.sh",
"script": "scripts/install_software.sh",
"execute_command": "PASSWORD='{{user `password`}}' bash '{{.Path}}'"
},
{
"type": "file",
"source": "{{user `assetsDir`}}/vscode/",
"destination": "/home/clever/.config/Code/User/"
}]
}
}

View File

@@ -1,106 +0,0 @@
#!/usr/bin/env bash
set -e
echo "--- Current environment:"
/usr/bin/env
echo "Enabling passwordless sudo"
echo "${PASSWORD}" | sudo -E -S sh -c 'echo "clever ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'
echo "--- Allowing apt to perform its updates"
sudo -E sh -c 'apt update; while fuser /var/lib/dpkg/lock ; do sleep 0.5 ; done'
echo "--- Installing open-vm-tools"
echo "${PASSWORD}" | sudo -E -S sh -c 'apt update; apt install -y open-vm-tools open-vm-tools-desktop'
echo "--- Installing ROS desktop packages"
echo "${PASSWORD}" | sudo -E -S sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
echo "${PASSWORD}" | sudo -E -S sh -c 'apt-key adv --keyserver "hkp://keyserver.ubuntu.com:80" --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654'
echo "${PASSWORD}" | sudo -E -S sh -c 'apt update; apt install -y python-rosdep python-rosinstall-generator python-wstool build-essential ros-melodic-desktop'
echo "${PASSWORD}" | sudo -E -S sh -c 'rosdep init'
rosdep update
echo "--- Downloading PX4 and installing its dependencies"
git clone -b v1.10.1-clever https://github.com/CopterExpress/Firmware ${HOME}/Firmware
echo "${PASSWORD}" | sudo -E -S sh -c '${HOME}/Firmware/Tools/setup/ubuntu.sh'
echo "${PASSWORD}" | sudo -E -S sh -c 'echo "2" | update-alternatives --config java'
echo "${PASSWROD}" | sudo -E -S sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties
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/clever/Firmware/Tools/setup_gazebo.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
echo "--- Installing Visual Studio Code"
echo "${PASSWORD}" | sudo -E -S sh -c 'apt update; apt install -y curl'
curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > ${HOME}/packages.microsoft.gpg
echo "${PASSWORD}" | sudo -E -S sh -c 'install -o root -g root -m 644 ${HOME}/packages.microsoft.gpg /usr/share/keyrings'
rm ${HOME}/packages.microsoft.gpg
echo "${PASSWORD}" | sudo -E -S 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'
echo "${PASSWORD}" | sudo -E -S sh -c 'apt install -y apt-transport-https; apt update; apt 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/python2.7 -m pip install -U "pylint<2.0.0" --user
/usr/bin/python3.6 -m pip install -U pylint --user
echo "--- Cloning and installing Clever packages"
mkdir -p ${HOME}/catkin_ws/src
git clone -b clover_description https://github.com/CopterExpress/clover ${HOME}/catkin_ws/src/clover
git clone https://github.com/CopterExpress/ros_led ${HOME}/catkin_ws/src/ros_led
# 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 melodic -y
curl https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh -o ${HOME}/install_geographiclib_datasets.sh
chmod a+x ${HOME}/install_geographiclib_datasets.sh
echo "${PASSWORD}" | sudo -E -S sh -c '${HOME}/install_geographiclib_datasets.sh'
source /opt/ros/melodic/setup.bash
cd ${HOME}/catkin_ws && catkin_make
echo "source /home/clever/catkin_ws/devel/setup.bash" >> ~/.bashrc
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"
echo "${PASSWORD}" | sudo -E -S sh -c "usermod -a -G dialout $USER"
echo "${PASSWORD}" | sudo -E -S sh -c 'apt remove -y modemmanager; apt 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"
echo "${PASSWORD}" | sudo -E -S sh -c 'apt update; apt install -y firefox'
echo "--- Installing Monkey web server"
sudo apt 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 update; apt install -y sshfs gvfs-fuse gvfs-backends python3-opencv byobu ipython ipython3 byobu nmap lsof tmux vim ros-melodic-rqt-multiplot'
echo "--- Personalizing VM"
echo "${PASSWORD}" | sudo -E -S sh -c 'mv /etc/xdg/autostart/light-locker.desktop /etc/xdg/autostart/light-locker.desktop.old'
echo "${PASSWORD}" | sudo -E -S sh -c 'cp /usr/share/xfce4/backdrops/xubuntu-wallpaper.png /usr/share/xfce4/backdrops/xubuntu-wallpaper-old.png; cp /home/clever/Pictures/Logo_COEX_2019_white_on_black.png /usr/share/xfce4/backdrops/xubuntu-wallpaper.png'
echo "${PASSWORD}" | sudo -E -S sh -c 'hostnamectl set-hostname clever-dev; sed -i "s/ubuntu/clever-dev clever-dev.local/g" /etc/hosts'
echo "export ROS_HOSTNAME=\`hostname\`.local" >> ${HOME}/.bashrc
chmod a+x /home/clever/Desktop/*
echo "--- Cleaning up"
echo "${PASSWORD}" | sudo -E -S sh -c 'apt-get -y autoremove; apt-get -y autoclean; apt-get -y clean; fstrim -v /'

204
scripts/install_software.sh Normal file
View File

@@ -0,0 +1,204 @@
#!/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 --depth 1 --branch v1.12.0 https://github.com/PX4/PX4-Autopilot.git ${HOME}/PX4-Autopilot
# PX4 v1.11.1 script will happily run sudo by itself
${HOME}/PX4-Autopilot/Tools/setup/ubuntu.sh
# Ubuntu 20.04 no longer sets assistive_technologies, thankfully
echo "--- Prebuilding PX4 SITL configuration"
make -C ${HOME}/PX4-Autopilot px4_sitl
echo "--- Patching gazebo plugins for SITL"
# cd ${HOME}/PX4-Autopilot/Tools/sitl_gazebo
# patch -p1 < /tmp/patches/sitl_gazebo.patch
echo 'export SVGA_VGPU10=0' >> ${HOME}/PX4-Autopilot/Tools/setup_gazebo.bash
echo "source /usr/share/gazebo/setup.sh" >> ~/.bashrc
echo "export SVGA_VGPU10=0" >> ~/.bashrc
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}/PX4-Autopilot ${HOME}/catkin_ws/src/PX4-Autopilot
ln -s ${HOME}/PX4-Autopilot/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
source $HOME/catkin_ws/devel/setup.bash
echo "--- Adding Clover vehicle startup script to PX4"
ln -s "$(catkin_find clover_simulation airframes)/*" $HOME/PX4-Autopilot/ROMFS/px4fmu_common/init.d-posix/airframes/
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/clover/examples ${HOME}/
[[ -d ${HOME}/examples ]] # test symlink is valid
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 /'
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 "Trying running the Gazebo simulator, check the output"
timeout --preserve-status 30 roslaunch clover_simulation simulator.launch gui:=false --screen