#!/bin/bash# Builds the Intel Realsense library librealsense on a Jetson Nano Development Kit# Copyright (c) 2016-21 Jetsonhacks # MIT LicenseLIBREALSENSE_DIRECTORY=${HOME}/librealsense
INSTALL_DIR=$PWDNVCC_PATH=/usr/local/cuda/bin/nvccUSE_CUDA=truefunctionusage(){echo"Usage: ./buildLibrealsense.sh [-n | -no_cuda] [-v | -version <version>] [-j | --jobs <number of 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"exit2}PARSED_ARGUMENTS=$(getopt -a-n buildLibrealsense.sh -o nv:j:h --longoptions version:,no_cuda,jobs:,help -- "$@")VALID_ARGUMENTS=$?if["$VALID_ARGUMENTS"!="0"];thenecho""usage
fievalset -- "$PARSED_ARGUMENTS"LIBREALSENSE_VERSION=""USE_CUDA=true
NUM_PROCS=""while:docase"$1"in-n| --build_no_cuda)USE_CUDA=false ;shift;;-v|--version)LIBREALSENSE_VERSION="$2";shift2;;-j| --jobs)NUM_PROCS="$2";shift2;re_isanum='^[0-9]+$'if![[$NUM_PROCS=~$re_isanum]];thenecho"Number of jobs must be a positive, whole number"usageelseif[$NUM_PROCS-eq"0"];thenecho"Number of jobs must be a positive, whole number"fifi;;;-h|--help) usage ;shift;;# -- means the end of arguments--)shift;break;;esacdone# 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)functionget_latest_release(){# redirect wget to standard out and grep out the tag_namewget -qO- https://api.github.com/repos/$1/releases/latest |grep-Po'"tag_name": "\K.*?(?=")'}if[[$LIBREALSENSE_VERSION==""]];thenecho"Getting latest librealsense version number"LIBREALSENSE_VERSION=$(get_latest_release IntelRealSense/librealsense)fiecho"Build with CUDA: "$USE_CUDAecho"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-n1-s-r-p"Press any key to continue"echo""# 用于检查变量 $LIBREALSENSE_DIRECTORY 指定的路径是否不存在,如果该路径不存在,脚本会进入 then 分支if[!-d"$LIBREALSENSE_DIRECTORY"];then# clone librealsensecd${HOME}echo"${green}Cloning librealsense${reset}"git clone https://github.com/IntelRealSense/librealsense.git
fi# Is the version of librealsense current enough?cd$LIBREALSENSE_DIRECTORYVERSION_TAG=$(git tag -l $LIBREALSENSE_VERSION)if[!$VERSION_TAG];thenecho""tput setaf 1echo"==== librealsense Version Mismatch! ============="tput sgr0echo""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""exit1fi# Checkout version the last tested version of librealsensegit checkout $LIBREALSENSE_VERSION# Install the dependenciescd$INSTALL_DIRsudo ./scripts/installDependencies.shcd$LIBREALSENSE_DIRECTORYgit checkout $LIBREALSENSE_VERSION# Now compile librealsense and installmkdir build
cd build
# Build examples, including graphical onesecho"${green}Configuring Make system${reset}"# Build with CUDA (default), the CUDA flag is USE_CUDA, ie -DUSE_CUDA=true# 配置环境变量。通常用于配置 CUDA 的开发环境。这些环境变量确保系统能够找到 CUDA 的编译器、工具链和库文件exportCUDACXX=$NVCC_PATHexportPATH=${PATH}:/usr/local/cuda/bin
exportLD_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 1if[[$NUM_PROCS==""]];thenTOTAL_MEMORY=$(free|awk'/Mem\:/ { print $2 }')if[$TOTAL_MEMORY-gt4051048];thenNUM_CPU=$(nproc)NUM_PROCS=$(($NUM_CPU -1))elseNUM_PROCS=1fifitimemake -j$NUM_PROCSif[$?-eq0];thenecho"librealsense make successful"else# Try to make again; Sometimes there are issues with the build# because of lack of resources or concurrency issuesecho"librealsense did not build ">&2echo"Retrying ... "# Single thread this timetimemakeif[$?-eq0];thenecho"librealsense make successful"else# Try to make againecho"librealsense did not successfully build">&2echo"Please fix issues and retry build"exit1fifiecho"${green}Installing librealsense, headers, tools and demos${reset}"sudomakeinstallifgrep-Fxq'export PYTHONPATH=$PYTHONPATH:/usr/local/lib' ~/.bashrc ;thenecho"PYTHONPATH already exists in .bashrc file"elseecho'export PYTHONPATH=$PYTHONPATH:/usr/local/lib'>> ~/.bashrc echo"PYTHONPATH added to ~/.bashrc. Pyhon wrapper is now available for importing pyrealsense2"ficd$LIBREALSENSE_DIRECTORYecho"${green}Applying udev rules${reset}"# Copy over the udev rules so that camera can be run from user spacesudocp config/99-realsense-libusb.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && udevadm triggerecho"${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" "