Compare commits

..

31 Commits

Author SHA1 Message Date
Oleg Kalachev
7c47391a1d More enforcement on installation Gazebo 9 2021-07-28 19:10:31 +03:00
Oleg Kalachev
ddf1bcedf0 Fix 2021-07-28 07:57:58 +03:00
Oleg Kalachev
c4d51e03de Fix 2021-07-28 06:53:00 +03:00
Oleg Kalachev
6ce948cad9 Fix 2021-07-28 05:16:17 +03:00
Oleg Kalachev
123ae3c886 Force installation Gazebo 9 2021-07-28 02:18:28 +03:00
Oleg Kalachev
874db45b8f Suppress gazebo --version exit code
It exits with 255 somehow
2021-07-28 02:16:43 +03:00
Oleg Kalachev
752b04b586 Print versions of some packages 2021-07-28 01:01:30 +03:00
Oleg Kalachev
7d7c803b81 Validate image 2021-07-28 00:39:49 +03:00
Oleg Kalachev
496d92c3bc Fix 2021-07-20 15:41:38 +03:00
Oleg Kalachev
810455e08f Install python3-pip 2021-07-20 14:18:48 +03:00
Oleg Kalachev
8aba80a08c Downgrade PX4 to v1.10.1-clover 2021-07-20 13:31:57 +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
13 changed files with 227 additions and 120 deletions

View File

@@ -5,18 +5,23 @@ on:
branches: [ '*' ] branches: [ '*' ]
pull_request: pull_request:
branches: [ master ] branches: [ master ]
release:
types: [ created ]
jobs: jobs:
build: build:
runs-on: macos-10.15 runs-on: macos-10.15 # Using macOS as https://github.com/actions/virtual-environments/issues/183
steps: steps:
- uses: actions/checkout@v2 - uses: actions/checkout@v2
- name: Setup - name: Download base image
run: | run: |
set -x
mkdir output-virtualbox-iso mkdir output-virtualbox-iso
pushd output-virtualbox-iso wget --progress=dot:giga https://clovervm.ams3.digitaloceanspaces.com/base-focal.ova -O output-virtualbox-iso/clover-devel.ova
wget --progress=dot:giga https://github.com/sfalexrog/clever_vm/releases/download/v0.1_base_vm/clover-devel.ova
popd
- name: Build - name: Build
run: ./build.sh run: ./build.sh
- name: Upload
# 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 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 install build-essential gcc make linux-headers-$(uname -r) virtualbox-6.0 && sudo
usermod -aG vboxusers $(whoami) 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 && popd
- sudo apt install -y xvfb - sudo apt install -y xvfb
script: script:
- "xvfb-run ./build.sh" - "xvfb-run ./build.sh"
deploy: # deploy:
provider: s3 # provider: s3
access_key_id: XOJXX4IOM66XN7VZAFYX # access_key_id: XOJXX4IOM66XN7VZAFYX
secret_access_key: $S3_SECRET_KEY # secret_access_key: $S3_SECRET_KEY
bucket: clovervm # bucket: clovervm
local-dir: output-virtualbox-ovf # local-dir: output-virtualbox-ovf
acl: public_read # acl: public_read
on: # on:
all_branches: true # all_branches: true
skip_cleanup: true # skip_cleanup: true
endpoint: https://ams3.digitaloceanspaces.com # 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

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

@@ -11,49 +11,31 @@ index 4fbeab2..18a192b 100644
using namespace cv; using namespace cv;
using namespace std; using namespace std;
diff --git a/src/gazebo_geotagged_images_plugin.cpp b/src/gazebo_geotagged_images_plugin.cpp diff --git a/cmake/FindMAVLink.cmake b/cmake/FindMAVLink.cmake
index 050558f..7029199 100644 index 8de3079..3fdae02 100644
--- a/src/gazebo_geotagged_images_plugin.cpp --- a/cmake/FindMAVLink.cmake
+++ b/src/gazebo_geotagged_images_plugin.cpp +++ b/cmake/FindMAVLink.cmake
@@ -581,7 +581,8 @@ void GeotaggedImagesPlugin::_send_capture_status(struct sockaddr* srcaddr) @@ -19,6 +19,7 @@ set(_MAVLINK_EXTRA_SEARCH_HINTS
0, // video status (Idle) ${CMAKE_SOURCE_DIR}/mavlink/
interval, // image interval ../../mavlink/
0, // recording_time_s ../mavlink/
- available_mib); // available_capacity + $ENV{HOME}/Firmware/mavlink/include
+ available_mib, // available_capacity ${CATKIN_DEVEL_PREFIX}/
+ _imageCounter); )
_send_mavlink_message(&msg, srcaddr);
}
@@ -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);
}
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(); diff --git a/package.xml b/package.xml
index ae0fb34..12f17b8 100644
- odom.frame_id = MAV_FRAME_VISION_NED; --- a/package.xml
+ odom.frame_id = 16 /*MAV_FRAME_VISION_NED*/; +++ b/package.xml
odom.child_frame_id = MAV_FRAME_BODY_FRD; @@ -50,8 +50,8 @@
<build_depend>roscpp</build_depend>
odom.x = position.X(); <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

@@ -17,10 +17,10 @@
["storageattach", "{{.Name}}", "--storagectl", "SATA Controller", "--port", "0", "--nonrotational", "on", "--discard", "on"] ["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_url": "http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/current/legacy-images/netboot/mini.iso",
"iso_checksum": "bed8a55ae2a657f8349fe3271097cff3a5b8c3d1048cf258568f1601976fa30d", "iso_checksum": "0e79e00bf844929d40825b1f0e8634415cda195ba23bae0b041911fde4dfe018",
"iso_checksum_type": "sha256", "iso_checksum_type": "sha256",
"ssh_password": "{{user `password`}}", "ssh_password": "{{user `password`}}",

View File

@@ -32,13 +32,18 @@ ${PACKER} build ros_ide_vm.json
echo "--- Marking the VM" echo "--- Marking the VM"
GIT_REV=$(git rev-parse --short HEAD) # if [[ $GITHUB_REF == refs/tags/*-rc* ]]; then
GIT_DESCRIBE=$(git describe --tags) # remove rc label
VM_NAME="clover-devel_${GIT_DESCRIBE}.ova" # 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} mv ./output-virtualbox-ovf/clover-devel.ova ./output-virtualbox-ovf/${VM_NAME}
ls -l output-virtualbox-ovf
echo "--- All done!" 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 d-i debian-installer/locale string en_US.utf8
### Hardware enablement kernel ### 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 ### Keyboard selection
d-i console-setup/ask_detect boolean false d-i console-setup/ask_detect boolean false

View File

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

View File

@@ -13,23 +13,34 @@ sudo -E sh -c 'echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-retr
cat /etc/apt/apt.conf.d/80-retries cat /etc/apt/apt.conf.d/80-retries
echo "--- Allowing apt to perform its updates" echo "--- Allowing apt to perform its updates"
sudo -E sh -c 'apt update; while fuser /var/lib/dpkg/lock ; do sleep 0.5 ; done' sudo -E sh -c 'apt-get update; while fuser /var/lib/dpkg/lock ; do sleep 0.5 ; done'
echo "--- Installing open-vm-tools" echo "--- Installing open-vm-tools"
sudo -E sh -c 'apt update; apt install -y open-vm-tools open-vm-tools-desktop' sudo -E sh -c 'apt-get update; apt-get install -y open-vm-tools open-vm-tools-desktop'
echo "--- Installing ROS desktop packages" 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 '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-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 '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' sudo -E sh -c 'rosdep init'
rosdep update rosdep update
# FIXME: PX4 needs pip to be installed
# FIXME: python2 dependencies?
echo "--- Downloading PX4 and installing its dependencies" echo "--- Downloading PX4 and installing its dependencies"
# v1.11.1, TODO: update to v1.12, remove Gazebo downgrade
#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
# v1.10.1:
git clone -b v1.10.1-clover https://github.com/CopterExpress/Firmware ${HOME}/Firmware git clone -b v1.10.1-clover https://github.com/CopterExpress/Firmware ${HOME}/Firmware
sudo -E sh -c 'apt-get update; apt-get install -y python3-pip'
sudo -E -S sh -c '${HOME}/Firmware/Tools/setup/ubuntu.sh' 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 sh -c 'echo "2" | update-alternatives --config java'
sudo -E -S sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties sudo -E -S sed -i -e '/^assistive_technologies=/s/^/#/' /etc/java-*-openjdk/accessibility.properties
@@ -41,16 +52,16 @@ cd ${HOME}/Firmware/Tools/sitl_gazebo
patch -p1 < /tmp/patches/sitl_gazebo.patch patch -p1 < /tmp/patches/sitl_gazebo.patch
echo 'export SVGA_VGPU10=0' >> ${HOME}/Firmware/Tools/setup_gazebo.bash echo 'export SVGA_VGPU10=0' >> ${HOME}/Firmware/Tools/setup_gazebo.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
echo "--- Installing Visual Studio Code" echo "--- Installing Visual Studio Code"
sudo -E sh -c 'apt update; apt install -y curl' 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 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' sudo -E sh -c 'install -o root -g root -m 644 ${HOME}/packages.microsoft.gpg /usr/share/keyrings'
rm ${HOME}/packages.microsoft.gpg 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 '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' 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 ms-python.python
code --install-extension DavidAnson.vscode-markdownlint code --install-extension DavidAnson.vscode-markdownlint
code --install-extension ms-vscode.cmake-tools code --install-extension ms-vscode.cmake-tools
@@ -58,32 +69,58 @@ code --install-extension ms-vscode.cpptools
code --install-extension streetsidesoftware.code-spell-checker code --install-extension streetsidesoftware.code-spell-checker
code --install-extension eamodio.gitlens code --install-extension eamodio.gitlens
echo "--- Installing pylint" echo "--- Installing pylint"
/usr/bin/python2.7 -m pip install -U "pylint<2.0.0" --user /usr/bin/python3 -m pip install -U pylint --user
/usr/bin/python3.6 -m pip install -U pylint --user
echo "--- Cloning and installing Clover packages" 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 mkdir -p ${HOME}/catkin_ws/src
git clone https://github.com/CopterExpress/clover ${HOME}/catkin_ws/src/clover 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 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 # Make PX4 and Gazebo plugins visible in the workspace
ln -s ${HOME}/Firmware ${HOME}/catkin_ws/src/Firmware ln -s ${HOME}/Firmware ${HOME}/catkin_ws/src/Firmware
ln -s ${HOME}/Firmware/Tools/sitl_gazebo ${HOME}/catkin_ws/src/sitl_gazebo 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 rosdep install --from-paths ${HOME}/catkin_ws/src --ignore-src --rosdistro noetic -y
curl https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh -o ${HOME}/install_geographiclib_datasets.sh sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
chmod a+x ${HOME}/install_geographiclib_datasets.sh sudo /usr/bin/python3 -m pip install -r ${HOME}/catkin_ws/src/clover/clover/requirements.txt
sudo -E sh -c '${HOME}/install_geographiclib_datasets.sh' source /opt/ros/noetic/setup.bash
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 cd ${HOME}/catkin_ws && catkin_make
echo "source ${HOME}/catkin_ws/devel/setup.bash" >> ~/.bashrc echo "source ${HOME}/catkin_ws/devel/setup.bash" >> ~/.bashrc
sudo -E sh -c 'apt-get update; apt-get install -y gazebo9' # downgrade Gazebo to 9 to make PX4 v1.10.1 work
echo "--- Installing npm" echo "--- Installing npm"
cd ${HOME} cd ${HOME}
wget --progress=dot:giga https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.gz NODE_VERSION=v10.15.0 # GitBook won't install on newer version
tar -xzf node-v10.15.0-linux-x64.tar.gz wget --progress=dot:giga https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz
sudo cp -R node-v10.15.0-linux-x64/* /usr/local/ tar -xzf node-$NODE_VERSION-linux-x64.tar.gz
rm -rf node-v10.15.0-linux-x64 sudo cp -R node-$NODE_VERSION-linux-x64/* /usr/local/
rm node-v10.15.0-linux-x64.tar.gz rm -rf node-$NODE_VERSION-linux-x64 node-$NODE_VERSION-linux-x64.tar.gz
echo "--- Reconfiguring npm to use local prefix" echo "--- Reconfiguring npm to use local prefix"
mkdir ${HOME}/.npm-global mkdir ${HOME}/.npm-global
npm config set prefix "${HOME}/.npm-global" npm config set prefix "${HOME}/.npm-global"
@@ -91,13 +128,14 @@ export PATH=${HOME}/.npm-global/bin:$PATH
echo 'export PATH='${HOME}'/.npm-global/bin:$PATH' >> ${HOME}/.bashrc echo 'export PATH='${HOME}'/.npm-global/bin:$PATH' >> ${HOME}/.bashrc
echo "--- Installing gitbook and building docs" echo "--- Installing gitbook and building docs"
cd ${HOME}/catkin_ws/src/clover cd ${HOME}/catkin_ws/src/clover
NPM_CONFIG_UNSAFE_PERM=true npm install gitbook-cli -g builder/assets/install_gitbook.sh
NPM_CONFIG_UNSAFE_PERM=true gitbook install gitbook install
gitbook build gitbook build
touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE # ignore documentation files by catkin touch node_modules/CATKIN_IGNORE docs/CATKIN_IGNORE _book/CATKIN_IGNORE clover/www/CATKIN_IGNORE # ignore documentation files by catkin
echo "--- Exposing examples" echo "--- Exposing examples"
cp -R ${HOME}/catkin_ws/src/clover/builder/assets/examples ${HOME}/ ln -s ${HOME}/catkin_ws/src/clover/clover/examples ${HOME}/
[[ -d ${HOME}/examples ]] # test symlink is valid
echo "--- Enabling roscore service" echo "--- Enabling roscore service"
sed -i "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service sed -i "s/pi/${USER}/g" ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service
@@ -106,24 +144,23 @@ sudo systemctl enable roscore.service
echo "--- Installing QGroundControl" echo "--- Installing QGroundControl"
sudo -E sh -c "usermod -a -G dialout $USER" 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' 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 curl https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage -o ${HOME}/QGroundControl.AppImage
chmod a+x ${HOME}/QGroundControl.AppImage chmod a+x ${HOME}/QGroundControl.AppImage
echo "--- Installing Firefox web browser" echo "--- Installing Firefox web browser"
sudo -E sh -c 'apt update; apt install -y firefox' sudo -E sh -c 'apt-get update; apt-get install -y firefox'
echo "--- Installing Monkey web server" echo "--- Installing Monkey web server"
sudo apt install -y /tmp/packages/monkey_1.6.9-1_amd64.deb 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 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 cp ${HOME}/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
sudo systemctl enable monkey sudo systemctl enable monkey
echo "--- Installing additional packages" 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' 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" 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 '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' 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 echo "export ROS_HOSTNAME=\`hostname\`.local" >> ${HOME}/.bashrc
@@ -131,3 +168,39 @@ chmod a+x ${HOME}/Desktop/*
echo "--- Cleaning up" echo "--- Cleaning up"
sudo -E sh -c 'apt-get -y autoremove; apt-get -y autoclean; apt-get -y clean; fstrim -v /' 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 exist with 255 on --version somehow
node -v
npm -v
byobu --version
git --version
vim --version
pip --version
pip3 --version
monkey --version
systemctl --version
source $HOME/catkin_ws/devel/setup.bash
roscore -h
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