Compare commits

..

1 Commits

Author SHA1 Message Date
Oleg Kalachev
4cdf3f8c18 Add custom dictionary for VSCode’s cSpell 2021-06-30 01:02:16 +03:00
13 changed files with 148 additions and 185 deletions

View File

@@ -20,9 +20,6 @@ jobs:
- name: Build - name: Build
run: ./build.sh run: ./build.sh
- name: Upload - 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 # Not using ready S3 actions, because they either don't run on macOS machines or don't support changing the endpoint
run: | 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
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 working-directory: output-virtualbox-ovf

21
LICENSE
View File

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

View File

@@ -2,7 +2,7 @@
The generator of Clover developer virtual machine image (`.ova` file) to simplify working with Clover and Clover simulation. 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. Download the latest image in [Releases](https://github.com/CopterExpress/clover_vm/releases) section.
<img src=https://clover.coex.tech/assets/simulator.jpg width=600> <img src=https://clover.coex.tech/assets/simulator.jpg width=600>

13
assets/configs/clover.txt Normal file
View File

@@ -0,0 +1,13 @@
aruco
leds
rospy
srvs
telem
offboard
hypot
mavros
rosrun
rostime
pymavlink
mavutil
rosmsg

View File

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

View File

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

View File

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

View File

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

View File

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

@@ -47,3 +47,7 @@ mv ./output-virtualbox-ovf/clover-devel.ova ./output-virtualbox-ovf/${VM_NAME}
ls -l output-virtualbox-ovf 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

@@ -63,6 +63,11 @@
"source": "{{user `assetsDir`}}/patches", "source": "{{user `assetsDir`}}/patches",
"destination": "/tmp" "destination": "/tmp"
}, },
{
"type": "file",
"source": "{{user `assetsDir`}}/configs",
"destination": "/tmp"
},
{ {
"type": "shell", "type": "shell",
"script": "scripts/install_software.sh", "script": "scripts/install_software.sh",

View File

@@ -12,79 +12,41 @@ echo "--- Increasing apt retries"
sudo -E sh -c 'echo "APT::Acquire::Retries \"3\";" > /etc/apt/apt.conf.d/80-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 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" echo "--- Allowing apt to perform its updates"
sudo -E sh -c '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-get install -y open-vm-tools open-vm-tools-desktop'
echo "--- Installing ROS desktop" sudo -E sh -c 'apt-get update; apt-get install -y open-vm-tools open-vm-tools-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 echo "--- Installing ROS desktop packages"
source /opt/ros/noetic/setup.bash
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'
echo "--- Updating rosdep"
sudo -E sh -c 'rosdep init' sudo -E sh -c 'rosdep init'
rosdep update rosdep update
echo "--- Creating Catkin workspace" # FIXME: PX4 needs pip to be installed
mkdir -p ~/catkin_ws/src # FIXME: python2 dependencies?
cd ~/catkin_ws echo "--- Downloading PX4 and installing its dependencies"
catkin_make git clone --recursive -b v1.11.1-clover https://github.com/CopterExpress/Firmware ${HOME}/Firmware
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc # PX4 v1.11.1 script will happily run sudo by itself
source ~/catkin_ws/devel/setup.bash ${HOME}/Firmware/Tools/setup/ubuntu.sh
# Ubuntu 20.04 no longer sets assistive_technologies, thankfully
echo "--- Getting Clover sources" echo "--- Prebuilding PX4 SITL configuration"
cd ~/catkin_ws/src make -C ${HOME}/Firmware px4_sitl
git clone --depth 1 https://github.com/CopterExpress/clover echo "--- Patching gazebo plugins for SITL"
git clone --depth 1 https://github.com/CopterExpress/ros_led cd ${HOME}/Firmware/Tools/sitl_gazebo
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.12.3 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/mavlink ~/catkin_ws/src/
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 patch -p1 < /tmp/patches/sitl_gazebo.patch
echo 'export SVGA_VGPU10=0' >> ${HOME}/Firmware/Tools/setup_gazebo.bash
echo "--- Addding Gazebo initialization to bashrc" echo "source /opt/ros/noetic/setup.bash" >> ~/.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 "--- Building the workspace"
cd ~/catkin_ws
catkin_make
echo "--- Installing Visual Studio Code" echo "--- Installing Visual Studio Code"
sudo -E sh -c 'apt-get update; apt-get 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'
@@ -98,14 +60,59 @@ 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 additional Python packages" echo "--- Add custom dictionary for VSCode"
/usr/bin/python3 -m pip install -U pylint pyzbar --user sudo -E sh -c 'apt-get install -y jq moreutils'
mv /tmp/configs/clover.txt ${HOME}/.vscode/
CODE_SETTINGS="$HOME/.config/Code/User/settings.json"
cat $CODE_SETTINGS
jq '."cSpell.customUserDictionaries"=[{name:"Clover", "path": "~/.vscode/clover.txt"}]' $CODE_SETTINGS | sponge $CODE_SETTINGS
cat $CODE_SETTINGS
echo "--- Exposing examples" echo "--- Installing pylint"
ln -s ${HOME}/catkin_ws/src/clover/clover/examples ${HOME}/ /usr/bin/python3 -m pip install -U pylint --user
[[ -d ${HOME}/examples ]] # test symlink is valid
echo "--- Installing npm and building documentation" echo "--- Cloning and installing Clover packages"
sudo sh -c 'curl http://deb.coex.tech/aptly_repo_signing.key 2> /dev/null | apt-key add -'
sudo sh -c 'echo "deb http://deb.coex.tech/ros xenial main" > /etc/apt/sources.list.d/coex.tech.list'
sudo sh -c 'echo "yaml file:///etc/ros/rosdep/coex.yaml" > /etc/ros/rosdep/sources.list.d/99-coex.list'
sudo sh -c 'cat <<EOF > /etc/ros/rosdep/coex.yaml
led_msgs:
ubuntu:
focal: [ros-noetic-led-msgs]
async_web_server_cpp:
ubuntu:
focal: [ros-noetic-async-web-server-cpp]
ros_pytest:
ubuntu:
focal: [ros-noetic-ros-pytest]
tf2_web_republisher:
ubuntu:
focal: [ros-noetic-tf2-web-republisher]
web_video_server:
ubuntu:
focal: [ros-noetic-web-video-server]
ws281x:
ubuntu:
focal: [ros-noetic-ws281x]
EOF'
sudo apt-get update
rosdep update
mkdir -p ${HOME}/catkin_ws/src
git clone https://github.com/CopterExpress/clover ${HOME}/catkin_ws/src/clover
git clone https://github.com/CopterExpress/ros_led ${HOME}/catkin_ws/src/ros_led
# These packages are missing from Noetic release, but are required for sitl_gazebo
git clone https://github.com/ethz-asl/mav_comm ${HOME}/catkin_ws/src/mav_comm
# Make PX4 and Gazebo plugins visible in the workspace
ln -s ${HOME}/Firmware ${HOME}/catkin_ws/src/Firmware
ln -s ${HOME}/Firmware/Tools/sitl_gazebo ${HOME}/catkin_ws/src/sitl_gazebo
rosdep install --from-paths ${HOME}/catkin_ws/src --ignore-src --rosdistro noetic -y
sudo /opt/ros/noetic/lib/mavros/install_geographiclib_datasets.sh
sudo /usr/bin/python3 -m pip install -r ${HOME}/catkin_ws/src/clover/clover/requirements.txt
source /opt/ros/noetic/setup.bash
cd ${HOME}/catkin_ws && catkin_make
echo "source ${HOME}/catkin_ws/devel/setup.bash" >> ~/.bashrc
echo "--- Installing npm"
cd ${HOME} cd ${HOME}
NODE_VERSION=v10.15.0 # GitBook won't install on newer version 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 wget --progress=dot:giga https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz
@@ -124,6 +131,10 @@ 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"
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
sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system sudo cp ${HOME}/catkin_ws/src/clover/builder/assets/roscore.service /etc/systemd/system
@@ -141,7 +152,6 @@ sudo -E sh -c 'apt-get update; apt-get install -y firefox'
echo "--- Installing Monkey web server" echo "--- Installing Monkey web server"
sudo apt-get 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 -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 cp ${HOME}/catkin_ws/src/clover/builder/assets/monkey.service /etc/systemd/system/monkey.service
sudo systemctl enable monkey sudo systemctl enable monkey
@@ -156,53 +166,3 @@ 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 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 "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