#!/usr/bin/env bash # 面向离线场景的 Flexiv RDK v1.9.1 安装脚本(供 ROS 的 humble-v1 / `flexiv_hardware` 使用)。 # CMakeLists 已经支持 `FLEXIV_RDK_OFFLINE_LIB` / `vendor/rdk_libs/`。 set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" RDK_SRC="${RDK_SRC:-$ROOT/src/flexiv_rdk_v1}" PREFIX="${PREFIX:-$HOME/flexiv_install}" LIB_NAME="libflexiv_rdk.x86_64-linux-gnu.a" EXPECTED_HASH="$(tr -d '[:space:]' < "${RDK_SRC}/lib/${LIB_NAME}.sha256")" VENDOR_LIB="${ROOT}/vendor/rdk_libs/${LIB_NAME}" JOBS="${JOBS:-$(nproc)}" # 优先用 conda 的 ros_flexiv 工具链(cmake/g++ 往往只在那里有) if ! command -v cmake >/dev/null 2>&1; then # shellcheck disable=SC1091 source "${HOME}/anaconda3/etc/profile.d/conda.sh" 2>/dev/null \ || source "${HOME}/miniconda3/etc/profile.d/conda.sh" 2>/dev/null \ || true conda activate "${CONDA_ENV:-ros_flexiv}" 2>/dev/null || true fi if ! command -v cmake >/dev/null 2>&1; then echo "ERROR: cmake not found. Activate ros_flexiv (or install cmake) first." exit 1 fi echo "Using cmake: $(command -v cmake) ($(cmake --version | head -1))" mkdir -p "${ROOT}/vendor/rdk_libs" "${PREFIX}" if [[ -f "${VENDOR_LIB}" ]] && [[ "$(sha256sum "${VENDOR_LIB}" | awk '{print $1}')" == "${EXPECTED_HASH}" ]]; then echo "OK: ${VENDOR_LIB}" else echo "Need ${LIB_NAME} (SHA256 ${EXPECTED_HASH})" base="https://github.com/flexivrobotics/flexiv_rdk/releases/download/v1.9.1/${LIB_NAME}" ok=0 for url in \ "${base}" \ "https://ghproxy.net/${base}" \ "https://gh.ddlc.top/${base}" \ "https://hub.gitmirror.com/${base}" \ "https://cf.ghproxy.cc/${base}" do echo "TRY ${url}" if curl -fL --connect-timeout 15 --max-time 120 -o "${VENDOR_LIB}.part" "${url}" \ && [[ "$(sha256sum "${VENDOR_LIB}.part" | awk '{print $1}')" == "${EXPECTED_HASH}" ]]; then mv "${VENDOR_LIB}.part" "${VENDOR_LIB}" ok=1 break fi rm -f "${VENDOR_LIB}.part" done if [[ "${ok}" -ne 1 ]]; then cat <