#!/usr/bin/env bash # 加载本工作区环境(conda + ROS + flexiv 库)。 # 用法:source scripts/env.sh ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" if [[ -f /opt/ros/humble/setup.bash ]]; then # shellcheck disable=SC1091 source /opt/ros/humble/setup.bash elif [[ -f /opt/ros/jazzy/setup.bash ]]; then # shellcheck disable=SC1091 source /opt/ros/jazzy/setup.bash fi # conda 可能在 ~/anaconda3 或 ~/miniconda3。不写死用户名。 # shellcheck disable=SC1091 source "${ROOT}/scripts/lib/dev_tools.sh" dev_source_conda || true if command -v conda >/dev/null 2>&1; then # 干净切换:先把堆叠的激活退到 base,再激活真机环境。 # 同一 shell 里从仿真环境切过来时,不清干净会残留 PATH/PYTHONPATH。 _env_helper="${ROOT}/scripts/lib/conda_switch.sh" _real_env="${REAL_ENV_NAME:-ros_flexiv}" if [[ -f "${_env_helper}" ]]; then # shellcheck disable=SC1090 source "${_env_helper}" conda_switch_clean "${_real_env}" "${SIM_ENV_NAME:-ros_gz_sim}" || \ conda activate "${_real_env}" 2>/dev/null || true else conda activate "${_real_env}" 2>/dev/null || true fi unset _env_helper _real_env fi if [[ -f "${ROOT}/install/setup.bash" ]]; then # shellcheck disable=SC1091 source "${ROOT}/install/setup.bash" # 本机 /opt/ros/humble 会盖住 conda 的 ros2,3.10 解释器加载不了 3.11 的 rclpy。 if [[ -n "${CONDA_PREFIX:-}" && -x "${CONDA_PREFIX}/bin/ros2" ]]; then export PATH="${CONDA_PREFIX}/bin:${PATH}" fi else echo "警告:${ROOT}/install 还没编译。工位窗口可以先开;真机栈要先在仓库根目录 colcon build(不要在中文路径下编)。" >&2 fi export LD_LIBRARY_PATH="${HOME}/flexiv_install/lib:${LD_LIBRARY_PATH:-}" # pip 版 TensorRT(tensorrt-cu12)—— 加载 YOLO `.engine` 需要它 _pyver="$(python3 -c 'import sys; print(f"{sys.version_info[0]}.{sys.version_info[1]}")' 2>/dev/null || echo 3.11)" _TRT_SITE="${CONDA_PREFIX:-${HOME}/anaconda3/envs/${REAL_ENV_NAME:-ros_flexiv}}/lib/python${_pyver}/site-packages" for _d in "${_TRT_SITE}/tensorrt" "${_TRT_SITE}/tensorrt_libs" "${_TRT_SITE}/nvidia/tensorrt/lib"; do if [[ -d "${_d}" ]]; then export LD_LIBRARY_PATH="${_d}:${LD_LIBRARY_PATH}" fi done unset _d _TRT_SITE _pyver export YOLO_AUTOINSTALL=false export ROS2_WS="${ROOT}" # 真机与仿真的 DDS 隔离(细节与踩坑见 lib/ros_domain.sh 的文件头)。 # shellcheck source=lib/ros_domain.sh source "${ROOT}/scripts/lib/ros_domain.sh" ros_domain_force_real # 主站点配置 → `SITE_*`(YOLO 权重、相机、机器人 SN……) # shellcheck disable=SC1091 source "${ROOT}/scripts/lib/load_site_config.sh" 2>/dev/null || true