Compare commits

..

85 Commits

Author SHA1 Message Date
Oleg Kalachev
b794786a63 Merge branch 'px4-1.13' into test-build-firmware 2022-07-29 03:38:54 +03:00
Oleg Kalachev
60da84c2ca Minor fix 2022-07-29 03:07:42 +03:00
Oleg Kalachev
40656212fd Fix 2 2022-07-27 22:23:20 +03:00
Oleg Kalachev
65ca706bb7 Fix 1 2022-07-27 22:22:55 +03:00
Oleg Kalachev
0064ef40b6 Merge branch 'master' into px4-1.13 2022-07-27 20:17:52 +03:00
Oleg Kalachev
7836e14513 Try 2022-07-27 19:16:25 +03:00
Oleg Kalachev
0da676809d Simpler 2022-07-26 22:07:11 +03:00
Oleg Kalachev
5d92f8e381 Patch to fix building px4 binary 2022-07-26 06:27:13 +03:00
Oleg Kalachev
ef46ca93bb Attempt 2022-07-24 02:11:34 +03:00
Oleg Kalachev
7c8ced9790 Try target_include_directories 2022-07-23 20:48:31 +03:00
Oleg Kalachev
0e70776791 Fix 2022-07-23 20:46:06 +03:00
Oleg Kalachev
c540a1795b Attempt 2022-07-23 20:07:11 +03:00
Oleg Kalachev
a0db84361a Test 2022-07-23 19:25:29 +03:00
Oleg Kalachev
a6f6b29c68 Test 2022-07-23 17:34:21 +03:00
Oleg Kalachev
337a44a797 Another test 2022-07-23 16:39:26 +03:00
Oleg Kalachev
bb66b96268 And yet another 2022-07-23 14:53:16 +03:00
Oleg Kalachev
5c05441360 Another try to fix 2022-07-23 04:55:57 +03:00
Oleg Kalachev
60e0fcc6b4 Update runner to macos-12 as macos-10.15 is deprecated
https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners
2022-07-22 01:43:58 +03:00
Oleg Kalachev
3467bfcea7 Fix 2022-07-21 01:05:16 +03:00
Oleg Kalachev
781c9d6be4 Try to fix 2022-07-20 23:39:53 +03:00
Oleg Kalachev
365bc50602 Fix 2022-07-20 16:19:30 +03:00
Oleg Kalachev
2996d5fd59 Try to fix 2022-07-20 15:12:36 +03:00
Oleg Kalachev
19baebd635 Fix 2022-07-20 03:55:27 +03:00
Oleg Kalachev
9f02f76044 Try another approach to build the workspace 2022-07-19 23:49:03 +03:00
Oleg Kalachev
f1fe9d8645 Fix 2022-07-19 23:38:19 +03:00
Oleg Kalachev
400be64e54 Install arm-none-eabi-gcc 2022-07-19 20:38:39 +03:00
Oleg Kalachev
69cc8ceed6 Test building the firmware 2022-07-19 16:46:03 +03:00
Oleg Kalachev
024a7280a9 Fix 2022-07-12 16:47:15 +03:00
Oleg Kalachev
5ccd5cf2ba Fix 2022-07-12 15:31:29 +03:00
Oleg Kalachev
c034418de0 Fix 2022-07-12 14:56:24 +03:00
Oleg Kalachev
b04ffbe41d Fix 2022-07-12 13:46:05 +03:00
Oleg Kalachev
47913a88a7 Fix 2022-07-12 13:44:12 +03:00
Oleg Kalachev
7997e219e3 Try to fix 2022-07-05 16:39:55 +03:00
Oleg Kalachev
c570ba4bac Fix 2022-07-05 14:42:22 +03:00
Oleg Kalachev
811d2e89e7 Update PX4 to v1.13.0 2022-07-05 14:38:04 +03:00
Oleg Kalachev
566d6e266a Add /etc/clover_vm_version file (#8)
* Add etc assets directory

* Name directory for version file `version`

* Simplify

* Put actual version to /etc/clover_vm_version

* Fix

* Fix

* Fix
2022-06-15 20:13:46 +03:00
Oleg Kalachev
bf0aff7fd9 Fix sitl_gazebo patch name 2022-06-10 18:31:28 +03:00
Oleg Kalachev
ad2a6cbc33 Patch sitl_gazebo to make Gazebo not crash on deleting the model
See https://github.com/PX4/PX4-SITL_gazebo/pull/872
2022-06-10 17:08:44 +03:00
Oleg Kalachev
28b1f0d890 Remove jMAVSim shortcut from the desktop 2022-06-10 16:54:58 +03:00
Oleg Kalachev
5178e2521e Run Clover's Python libraries validation 2022-06-09 19:58:14 +03:00
Oleg Kalachev
bb83b075b6 Install pyzbar Python library 2022-06-09 19:54:08 +03:00
Oleg Kalachev
d59296493a Update PX4 to v1.12.3 2022-05-31 18:52:39 +03:00
Oleg Kalachev
f2581a7fba Don't echo commands while printing versions of all packages 2022-04-03 19:32:50 +04:00
Oleg Kalachev
8b76b130ef Print versions of all installed ROS packages 2022-04-03 17:05:10 +04:00
Oleg Kalachev
b54475601a Add Monkey package for ARM64 2022-02-19 19:34:51 +03:00
Oleg Kalachev
f167e9e8e8 Use simulator.launch for launching jmavsim 2021-12-14 13:17:46 +03:00
Oleg Kalachev
f3d6de69a1 Simply build script 2021-12-14 13:17:46 +03:00
Oleg Kalachev
600b7ddd29 Trigger update 2021-10-30 20:24:38 +03:00
Oleg Kalachev
9ef168558a Fix 2021-10-27 20:24:00 +03:00
Oleg Kalachev
464067a7de Enable serving symlinks in Monkey 2021-10-27 14:41:23 +03:00
Oleg Kalachev
4ce7c5b849 Rename 'Gazebo PX4' shortcut to 'Gazebo Clover'
This is more clear as it runs the whole Clover
simulation, not only PX4
2021-10-08 23:29:42 +03:00
Oleg Kalachev
fe073ebed1 Clone repositories with depth=1 2021-10-05 22:18:24 +03:00
Oleg Kalachev
7911373f74 Fix jmavsim (#4)
* Install jMAVSim dependencies

* Restore jMAVSim desktop shortcut

* Try running jmavsim on validation
2021-09-04 03:07:28 +03:00
Oleg Kalachev
45d5130f4a Temporarily remove jMAVSim desktop shortcut as it doesn’t work for now 2021-09-02 20:59:00 +03:00
Oleg Kalachev
066b50def5 Add Clover Drone Kit Tools desktop shortcut 2021-09-02 20:58:26 +03:00
Oleg Kalachev
f9d6e88763 Rebuild to update Gazebo 2021-09-02 00:47:37 +03:00
Oleg Kalachev
3426114677 Update Clover 2021-08-23 22:43:29 +03:00
Oleg Kalachev
8473842e87 Fix making symlink to Clover model 2021-08-18 22:33:08 +03:00
Oleg Kalachev
25abea38ba Use original PX4 v1.12 (#3)
* Use original PX4 v1.12

* Disable patching sitl_gazebo

* Fix

* Add Clover airframe to PX4

* Fix
2021-08-16 19:13:21 +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
19 changed files with 376 additions and 248 deletions

View File

@@ -5,18 +5,24 @@ on:
branches: [ '*' ]
pull_request:
branches: [ master ]
release:
types: [ created ]
jobs:
build:
runs-on: macos-10.15
runs-on: macos-12 # Using macOS as https://github.com/actions/virtual-environments/issues/183
steps:
- uses: actions/checkout@v2
- name: Setup
- name: Download base image
run: |
set -x
mkdir output-virtualbox-iso
pushd output-virtualbox-iso
wget --progress=dot:giga https://github.com/sfalexrog/clever_vm/releases/download/v0.1_base_vm/clover-devel.ova
popd
wget --progress=dot:giga https://clovervm.ams3.digitaloceanspaces.com/base-focal.ova -O output-virtualbox-iso/clover-devel.ova
- name: Build
run: ./build.sh
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

@@ -6,19 +6,19 @@ before_install:
bionic contrib >> /etc/apt/sources.list" && sudo apt-get update && sudo apt-get
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.1_base_vm/clover-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:
- "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
# 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).

1
assets/clover_vm_version Normal file
View File

@@ -0,0 +1 @@
unknown

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

@@ -0,0 +1,7 @@
[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 PX4
Comment=Fully-featured Gazebo simulation with default PX4 settings
Name=Gazebo Clover
Comment=Run Clover drone simulation in Gazebo
Exec=/bin/bash -c 'source /home/clover/catkin_ws/devel/setup.bash; roslaunch clover_simulation simulator.launch'
Icon=gazebo
Path=

View File

@@ -1,10 +0,0 @@
[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

@@ -1,10 +0,0 @@
[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

Binary file not shown.

View File

@@ -1,59 +1,36 @@
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"
#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_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();
}
@@ -591,6 +592,7 @@ void GeotaggedImagesPlugin::_handle_storage_info(const mavlink_message_t *pMsg,
float total_mib = 0.0f;
float available_mib = 0.0f;
boost::filesystem::space_info si = boost::filesystem::space(".");
+ const std::string storage_name = "SITL Camera Storage";
available_mib = (float)((double)si.available / (1024.0 * 1024.0));
total_mib = (float)((double)si.capacity / (1024.0 * 1024.0));
_send_cmd_ack(pMsg->sysid, pMsg->compid, MAV_CMD_REQUEST_STORAGE_INFORMATION, MAV_RESULT_ACCEPTED, srcaddr);
@@ -608,7 +610,9 @@ void GeotaggedImagesPlugin::_handle_storage_info(const mavlink_message_t *pMsg,
total_mib - available_mib, // used_capacity,
available_mib,
NAN, // read_speed,
- NAN // write_speed
+ NAN, // write_speed
+ STORAGE_TYPE_OTHER, // storage type
+ storage_name.c_str() // storage name
);
_send_mavlink_message(&msg, srcaddr);
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();
}
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();
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();
}
- 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();
/////////////////////////////////////////////////

View File

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

View File

@@ -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

@@ -5,6 +5,18 @@ 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
@@ -32,13 +44,8 @@ ${PACKER} build ros_ide_vm.json
echo "--- Marking the VM"
GIT_REV=$(git rev-parse --short HEAD)
GIT_DESCRIBE=$(git describe --tags)
VM_NAME="clover-devel_${GIT_DESCRIBE}.ova"
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!"
if [ "${CI}" == "true" ]; then
echo "Deploying to https://clovervm.ams3.digitaloceanspaces.com/${VM_NAME}"
fi

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

View File

@@ -64,13 +64,13 @@
"destination": "/tmp"
},
{
"type": "shell",
"script": "scripts/installSoftware.sh",
"execute_command": "PASSWORD='{{user `password`}}' bash '{{.Path}}'"
"type": "file",
"source": "{{user `assetsDir`}}/clover_vm_version",
"destination": "/tmp/clover_vm_version"
},
{
"type": "file",
"source": "{{user `assetsDir`}}/vscode/",
"destination": "/home/{{user `user`}}/.config/Code/User/"
"type": "shell",
"script": "scripts/install_software.sh",
"execute_command": "PASSWORD='{{user `password`}}' bash '{{.Path}}'"
}]
}

View File

@@ -1,133 +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 "--- 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"
sudo -E sh -c 'apt update; apt 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 update; apt install -y python-rosdep python-rosinstall-generator python-wstool build-essential ros-melodic-desktop'
sudo -E sh -c 'rosdep init'
rosdep update
echo "--- Downloading PX4 and installing its dependencies"
git clone -b v1.10.1-clover https://github.com/CopterExpress/Firmware ${HOME}/Firmware
sudo -E -S sh -c '${HOME}/Firmware/Tools/setup/ubuntu.sh'
sudo -E -S sh -c 'echo "2" | update-alternatives --config java'
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}/Firmware/Tools/setup_gazebo.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
echo "--- Installing Visual Studio Code"
sudo -E sh -c 'apt update; apt 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 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 Clover packages"
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
# 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
sudo -E sh -c '${HOME}/install_geographiclib_datasets.sh'
sudo /usr/bin/python2.7 -m pip install -r ${HOME}/catkin_ws/src/clover/clover/requirements.txt
source /opt/ros/melodic/setup.bash
cd ${HOME}/catkin_ws && catkin_make
echo "source ${HOME}/catkin_ws/devel/setup.bash" >> ~/.bashrc
echo "--- Installing npm"
cd ${HOME}
wget --progress=dot:giga https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.gz
tar -xzf node-v10.15.0-linux-x64.tar.gz
sudo cp -R node-v10.15.0-linux-x64/* /usr/local/
rm -rf node-v10.15.0-linux-x64
rm node-v10.15.0-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
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g
NPM_CONFIG_UNSAFE_PERM=true 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"
cp -R ${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 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"
sudo -E 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"
sudo -E sh -c 'mv /etc/xdg/autostart/light-locker.desktop /etc/xdg/autostart/light-locker.desktop.old'
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 /'

226
scripts/install_software.sh Normal file
View File

@@ -0,0 +1,226 @@
#!/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