diff --git a/.github/SETUP_SCRIPTS/buildLibrealsense.sh b/.github/SETUP_SCRIPTS/buildLibrealsense.sh new file mode 100755 index 00000000..a4298137 --- /dev/null +++ b/.github/SETUP_SCRIPTS/buildLibrealsense.sh @@ -0,0 +1,198 @@ +#!/bin/bash +# Builds the Intel Realsense library librealsense on a Jetson Nano Development Kit +# Copyright (c) 2016-21 Jetsonhacks +# MIT License + +LIBREALSENSE_DIRECTORY=${HOME}/librealsense +INSTALL_DIR=$PWD +NVCC_PATH=/usr/local/cuda/bin/nvcc + +USE_CUDA=true + +function usage () +{ + echo "Usage: ./buildLibrealsense.sh [-n | -no_cuda] [-v | -version ] [-j | --jobs ] [-h | --help] " + echo "-n | --no_cuda Build with no CUDA (Defaults to with CUDA)" + echo "-v | --version Version of librealsense to build + (defaults to latest release)" + echo "-j | --jobs Number of concurrent jobs (Default 1 on <= 4GB RAM + #of cores-1 otherwise)" + echo "-h | --help This message" + exit 2 +} + +PARSED_ARGUMENTS=$(getopt -a -n buildLibrealsense.sh -o nv:j:h --longoptions version:,no_cuda,jobs:,help -- "$@" ) +VALID_ARGUMENTS=$? + +if [ "$VALID_ARGUMENTS" != "0" ]; then + echo "" + usage +fi + +eval set -- "$PARSED_ARGUMENTS" + +LIBREALSENSE_VERSION="" +USE_CUDA=true +NUM_PROCS="" + +while : +do + case "$1" in + -n | --build_no_cuda) USE_CUDA=false ; shift ;; + -v | --version ) LIBREALSENSE_VERSION="$2" ; shift 2 ;; + -j | --jobs) NUM_PROCS="$2" ; + shift 2 ; + re_isanum='^[0-9]+$' + if ! [[ $NUM_PROCS =~ $re_isanum ]] ; then + echo "Number of jobs must be a positive, whole number" + usage + else + if [ $NUM_PROCS -eq "0" ]; then + echo "Number of jobs must be a positive, whole number" + fi + fi ; + ;; + -h | --help ) usage ; shift ;; + # -- means the end of arguments + --) shift; break ;; + esac +done + +# From lukechilds gist discussion: https://gist.github.com/lukechilds/a83e1d7127b78fef38c2914c4ececc3c +# We use wget instead of curl here +# Sample usage: +# VERSION_STRINGS=$(get_latest_release IntelRealSense/librealsense) + +function get_latest_release () { + # redirect wget to standard out and grep out the tag_name + wget -qO- https://api.github.com/repos/$1/releases/latest | + grep -Po '"tag_name": "\K.*?(?=")' +} + +if [[ $LIBREALSENSE_VERSION == "" ]] ; then + echo "Getting latest librealsense version number" + LIBREALSENSE_VERSION=$(get_latest_release IntelRealSense/librealsense) +fi + +echo "Build with CUDA: "$USE_CUDA +echo "Librealsense Version: $LIBREALSENSE_VERSION" + +red=`tput setaf 1` +green=`tput setaf 2` +reset=`tput sgr0` +# e.g. echo "${red}The red tail hawk ${green}loves the green grass${reset}" + + +echo "" +echo "Please make sure that no RealSense cameras are currently attached" +echo "" +read -n 1 -s -r -p "Press any key to continue" +echo "" + +if [ ! -d "$LIBREALSENSE_DIRECTORY" ] ; then + # clone librealsense + cd ${HOME} + echo "${green}Cloning librealsense${reset}" + git clone https://github.com/IntelRealSense/librealsense.git +fi + +# Is the version of librealsense current enough? +cd $LIBREALSENSE_DIRECTORY +VERSION_TAG=$(git tag -l $LIBREALSENSE_VERSION) +if [ ! $VERSION_TAG ] ; then + echo "" + tput setaf 1 + echo "==== librealsense Version Mismatch! =============" + tput sgr0 + echo "" + echo "The installed version of librealsense is not current enough for these scripts." + echo "This script needs librealsense tag version: "$LIBREALSENSE_VERSION "but it is not available." + echo "Please upgrade librealsense or remove the librealsense folder before attempting to install again." + echo "" + exit 1 +fi + +# Checkout version the last tested version of librealsense +git checkout $LIBREALSENSE_VERSION + +# Install the dependencies +cd $INSTALL_DIR +sudo ./scripts/installDependencies.sh + +cd $LIBREALSENSE_DIRECTORY +git checkout $LIBREALSENSE_VERSION + +# Now compile librealsense and install +mkdir build +cd build +# Build examples, including graphical ones +echo "${green}Configuring Make system${reset}" +# Build with CUDA (default), the CUDA flag is USE_CUDA, ie -DUSE_CUDA=true +export CUDACXX=$NVCC_PATH +export PATH=${PATH}:/usr/local/cuda/bin +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/cuda/lib64 + +/usr/bin/cmake ../ -DBUILD_EXAMPLES=true -DFORCE_LIBUVC=ON -DBUILD_WITH_CUDA="$USE_CUDA" -DCMAKE_BUILD_TYPE=release -DBUILD_PYTHON_BINDINGS=bool:true + +# The library will be installed in /usr/local/lib, header files in /usr/local/include +# The demos, tutorials and tests will located in /usr/local/bin. +echo "${green}Building librealsense, headers, tools and demos${reset}" + +# If user didn't set # of jobs and we have > 4GB memory then +# set # of jobs to # of cores-1, otherwise 1 +if [[ $NUM_PROCS == "" ]] ; then + TOTAL_MEMORY=$(free | awk '/Mem\:/ { print $2 }') + if [ $TOTAL_MEMORY -gt 4051048 ] ; then + NUM_CPU=$(nproc) + NUM_PROCS=$(($NUM_CPU - 1)) + else + NUM_PROCS=1 + fi +fi + +time make -j$NUM_PROCS +if [ $? -eq 0 ] ; then + echo "librealsense make successful" +else + # Try to make again; Sometimes there are issues with the build + # because of lack of resources or concurrency issues + echo "librealsense did not build " >&2 + echo "Retrying ... " + # Single thread this time + time make + if [ $? -eq 0 ] ; then + echo "librealsense make successful" + else + # Try to make again + echo "librealsense did not successfully build" >&2 + echo "Please fix issues and retry build" + exit 1 + fi +fi +echo "${green}Installing librealsense, headers, tools and demos${reset}" +sudo make install + +if grep -Fxq 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' ~/.bashrc ; then + echo "PYTHONPATH already exists in .bashrc file" +else + echo 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' >> ~/.bashrc + echo "PYTHONPATH added to ~/.bashrc. Pyhon wrapper is now available for importing pyrealsense2" +fi + +cd $LIBREALSENSE_DIRECTORY +echo "${green}Applying udev rules${reset}" +# Copy over the udev rules so that camera can be run from user space +sudo cp config/99-realsense-libusb.rules /etc/udev/rules.d/ +sudo udevadm control --reload-rules && udevadm trigger + +echo "${green}Library Installed${reset}" +echo " " +echo " -----------------------------------------" +echo "The library is installed in /usr/local/lib" +echo "The header files are in /usr/local/include" +echo "The demos and tools are located in /usr/local/bin" +echo " " +echo " -----------------------------------------" +echo " " + + diff --git a/.github/SETUP_SCRIPTS/installLibrealsense.sh b/.github/SETUP_SCRIPTS/installLibrealsense.sh new file mode 100755 index 00000000..1b412df7 --- /dev/null +++ b/.github/SETUP_SCRIPTS/installLibrealsense.sh @@ -0,0 +1,13 @@ +#!/bin/bash +# Installs the Intel Realsense library librealsense on a Jetson Nano Development Kit +# The installation is from a RealSense Debian repository +# Copyright (c) 2016-21 Jetsonhacks +# MIT License +# https://github.com/IntelRealSense/librealsense/blob/master/doc/installation_jetson.md +# Register the server's public key: +sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key + +sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u + +sudo apt-get install apt-utils -y +sudo apt-get install librealsense2-utils librealsense2-dev -y