diff --git a/learning_ompl/install-ompl-ubuntu.sh b/learning_ompl/install-ompl-ubuntu.sh new file mode 100755 index 0000000..00568ee --- /dev/null +++ b/learning_ompl/install-ompl-ubuntu.sh @@ -0,0 +1,141 @@ +#!/bin/bash + +set -e + +if [ `id -u` == 0 ]; then + SUDO= + export DEBIAN_FRONTEND=noninteractive + apt-get -y install lsb-release +else + SUDO="sudo -H" +fi + +ubuntu_version=`lsb_release -rs | sed 's/\.//'` + +install_common_dependencies() +{ + # install most dependencies via apt-get + ${SUDO} apt-get -y update + ${SUDO} apt-get -y upgrade + # We explicitly set the C++ compiler to g++, the default GNU g++ compiler. This is + # needed because we depend on system-installed libraries built with g++ and linked + # against libstdc++. In case `c++` corresponds to `clang++`, code will not build, even + # if we would pass the flag `-stdlib=libstdc++` to `clang++`. + ${SUDO} apt-get -y install g++ cmake pkg-config libboost-serialization-dev libboost-filesystem-dev libboost-system-dev libboost-program-options-dev libboost-test-dev libeigen3-dev libode-dev wget libyaml-cpp-dev + export CXX=g++ + export MAKEFLAGS="-j `nproc`" +} + +install_python_binding_dependencies() +{ + ${SUDO} apt-get -y install python${PYTHONV}-dev python${PYTHONV}-pip + # install additional python dependencies via pip + ${SUDO} pip${PYTHONV} install -vU https://github.com/CastXML/pygccxml/archive/develop.zip pyplusplus + # install castxml + if [[ $ubuntu_version > 1910 ]]; then + ${SUDO} apt-get -y install castxml + else + wget -q -O- https://data.kitware.com/api/v1/file/5e8b740d2660cbefba944189/download | tar zxf - -C ${HOME} + export PATH=${HOME}/castxml/bin:${PATH} + fi + ${SUDO} apt-get -y install libboost-python-dev + if [[ $ubuntu_version > 1710 ]]; then + ${SUDO} apt-get -y install libboost-numpy-dev python${PYTHONV}-numpy + fi + if [[ $ubuntu_version > 1904 ]]; then + ${SUDO} apt-get -y install pypy3 + fi +} + +install_app_dependencies() +{ + ${SUDO} apt-get -y install python${PYTHONV}-pyqt5.qtopengl freeglut3-dev libassimp-dev python${PYTHONV}-opengl python${PYTHONV}-flask python${PYTHONV}-celery libccd-dev + # install additional python dependencies via pip + ${SUDO} pip${PYTHONV} install -vU PyOpenGL-accelerate + # install fcl + if ! pkg-config --atleast-version=0.5.0 fcl; then + if [[ $ubuntu_version > 1604 ]]; then + ${SUDO} apt-get -y install libfcl-dev + else + wget -O - https://github.com/flexible-collision-library/fcl/archive/0.6.1.tar.gz | tar zxf - + cd fcl-0.6.1; cmake .; ${SUDO} -E make install; cd .. + fi + fi +} + +install_ompl() +{ + if [ -z $APP ]; then + OMPL="ompl" + else + OMPL="omplapp" + fi + if [ -z $GITHUB ]; then + if [ -z $APP]; then + wget -O - https://github.com/ompl/${OMPL}/archive/1.5.2.tar.gz | tar zxf - + cd ${OMPL}-1.5.2 + else + wget -O - https://github.com/ompl/${OMPL}/releases/download/1.5.2/${OMPL}-1.5.2-Source.tar.gz | tar zxf - + cd $OMPL-1.5.2-Source + fi + else + ${SUDO} apt-get -y install git + git clone --recurse-submodules https://github.com/ompl/${OMPL}.git + cd $OMPL + fi + mkdir -p build/Release + cd build/Release + cmake ../.. -DPYTHON_EXEC=/usr/bin/python${PYTHONV} + if [ ! -z $PYTHON ]; then + # Check if the total memory is less than 6GB. + if [ `cat /proc/meminfo | head -1 | awk '{print $2}'` -lt 6291456 ]; then + echo "Python binding generation is very memory intensive. At least 6GB of RAM is recommended." + echo "Proceeding with binding generation using 1 core..." + make -j 1 update_bindings + else + make update_bindings + fi + fi + make + ${SUDO} make install +} + +for i in "$@" +do +case $i in + -a|--app) + APP=1 + PYTHON=1 + shift + ;; + -p|--python) + PYTHON=1 + shift + ;; + -g|--github) + GITHUB=1 + shift + ;; + *) + # unknown option -> show help + echo "Usage: `basename $0` [-p] [-a]" + echo " -p: enable Python bindings" + echo " -a: enable OMPL.app (implies '-p')" + echo " -g: install latest commit from master branch on GitHub" + ;; +esac +done + +# the default version of Python in 17.10 and above is version 3 +if [[ $ubuntu_version > 1704 ]]; then + PYTHONV=3 +fi + +install_common_dependencies +if [ ! -z $PYTHON ]; then + install_python_binding_dependencies +fi +if [ ! -z $APP ]; then + install_app_dependencies +fi +install_ompl diff --git a/python_interpolation.py b/python_interpolation.py new file mode 100644 index 0000000..484f370 --- /dev/null +++ b/python_interpolation.py @@ -0,0 +1,31 @@ +from scipy.interpolate import interp1d +import matplotlib.pyplot as plt +import numpy as np + +### There are several general interpolation facilities available in SciPy, for data in 1, 2, and higher dimensions: + + +# one-dimensional case + +# define linearly spaced out points +x = np.linspace(0, 10, num=11, endpoint=True) + +# apply some function to them +y = np.cos(-x**2/9.0) + +# Try to model that function using a linear interpolation +f = interp1d(x, y) + +# Try doing it with cubic splines +f2 = interp1d(x, y, kind='cubic') + + +# create more finely spaced out points +xnew = np.linspace(0, 10, num=41, endpoint=True) + +# do the plotting +plt.plot(x, y, 'o', xnew, f(xnew), '-', xnew, f2(xnew), '--') +plt.legend(['data', 'linear', 'cubic'], loc='best') +plt.show() + +## way more cool things can be found here: https://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html \ No newline at end of file