当前位置: 首页 > news >正文

JetsonHacksNano RealSense自动安装脚本文件解析

文章目录

  1. #!/bin/bash
    #!/bin/bash 是一个 shebang(也称为 hashbang),它是一个特殊的注释行,用于告诉操作系统使用哪个解释器来运行脚本。在这种情况下,/bin/bash 指定了使用 Bash(Bourne Again SHell)作为脚本的解释器。
  2. $PWD指当前的工作目录,${HOME} 的值通常是用户登录时的默认目录路径。例如:
  • 对于用户 user,${HOME} 的值通常是 /home/user。
  • 对于 root 用户,${HOME} 的值通常是 /root。
  1. function usage ():通常用于定义一个帮助函数,用于显示脚本的使用方法和参数说明
  2. 在这里插入图片描述
  3. 错误处理逻辑,用于检查 getopt 解析命令行参数时是否成功。如果 getopt 返回的退出状态码不是 0,说明参数解析失败,此时脚本会调用 usage 函数来显示帮助信息,并退出。
  4. 在这里插入图片描述
#!/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=$PWD
NVCC_PATH=/usr/local/cuda/bin/nvccUSE_CUDA=truefunction usage ()
{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"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" ]; thenecho ""usage
fieval set -- "$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" ; shift 2 ;;-j | --jobs)          NUM_PROCS="$2" ; shift 2 ;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 ;;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_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_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 ""# 用于检查变量 $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_DIRECTORY
VERSION_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 ""exit 1
fi# Checkout version the last tested version of librealsense
git checkout $LIBREALSENSE_VERSION# Install the dependencies
cd $INSTALL_DIR
sudo ./scripts/installDependencies.shcd $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
# 配置环境变量。通常用于配置 CUDA 的开发环境。这些环境变量确保系统能够找到 CUDA 的编译器、工具链和库文件
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 == "" ]] ; thenTOTAL_MEMORY=$(free | awk '/Mem\:/ { print $2 }')if [ $TOTAL_MEMORY -gt 4051048 ] ; thenNUM_CPU=$(nproc)NUM_PROCS=$(($NUM_CPU - 1))elseNUM_PROCS=1fi
fitime make -j$NUM_PROCS
if [ $? -eq 0 ] ; 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 timetime make if [ $? -eq 0 ] ; thenecho "librealsense make successful"else# Try to make againecho "librealsense did not successfully build" >&2echo "Please fix issues and retry build"exit 1fi
fi
echo "${green}Installing librealsense, headers, tools and demos${reset}"
sudo make installif  grep -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_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 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 " "
http://www.xdnf.cn/news/664165.html

相关文章:

  • 公链开发全生态:技术架构、生态构建与未来图景
  • 环境配置相关问题以及解决方案
  • JavaScripts 常见误区
  • 小刚说C语言刷题—1152 - 求n个数的最大值和最小值
  • mybatis-plus动态分页
  • ARM架构
  • 密钥分发与公钥证书
  • 工厂方法模式之Factory Method(工厂方法)
  • Python网络编码——聊天小工具
  • 2025年中国ERP软件前十名对比:选型指南与适用场景的分析
  • 数控滑台技术革新:提升生产效率的关键
  • [浏览器]缓存策略机制详解
  • (12)Quarkus 编译时增强原理
  • GIS局部放电图绘制指南
  • UE 骨骼模型 会没有face index的原因
  • IPv6能自动分配地址,就不需要DHCP服务器了吗?
  • Unity3D仿星露谷物语开发52之菜单页面
  • RK3568DAYU开发板-平台驱动开发:GPIO驱动
  • 冒险岛 职业名及代码
  • 为什么需要清除浮动?清除浮动的方式有哪些?
  • day28:零基础学嵌入式之进程2
  • MQTT通信协议
  • [面试精选] 0076. 最小覆盖子串
  • Linux多线程(二)之进程vs线程
  • Cell Metab.|复旦大学储以微、骆菲菲团队:Foxp3改造CAR-T,从「能量危机」到「代谢续航」的实体瘤治疗新路径
  • Android GPU Inspector深度解析:从零掌握驱动级性能数据抓取与优化
  • FastAPI 中间件
  • 电子标签倒计时应用
  • 从自发到赋能:产品经理的成长与 AI 时代的自我重塑
  • 测试W5500的第7步_使用ioLibrary库创建HTTP客户端