#!/usr/bin/env bash # ============================================================================= # 在仿真环境里构建本工作区。 # # 用法: # bash scripts/build_sim.sh # 增量构建 # bash scripts/build_sim.sh --clean # 先删掉 build_sim/ install_sim/ # bash scripts/build_sim.sh --all # 不做任何排除(用于排查) # # 关键:构建产物写进 build_sim/ install_sim/,**绝不碰真机环境的 build/ install/**。 # 工作区只有一份源码,两个环境各用一套产物目录,互不覆盖。 # ============================================================================= set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "${ROOT}" CLEAN=0 NO_SKIP=0 for a in "$@"; do case "$a" in --clean) CLEAN=1 ;; --all) NO_SKIP=1 ;; -h|--help) sed -n '2,15p' "$0"; exit 0 ;; *) echo "未知参数: $a" >&2; exit 2 ;; esac done # --- 排除清单 --------------------------------------------------------------- # 这些包在仿真里用不上,而且不少根本**装不上**(依赖真机 SDK),不排除就整个构建失败。 # 每一项都写清理由,避免以后有人不明就里地删掉或加回来。 SKIP=( # 需要 Flexiv RDK C++ SDK(flexiv_rdk),仿真里硬件层由 gz_ros2_control 提供 flexiv_hardware # 真机 RDK 桥接驱动(起子进程连真机),仿真里无真机可连 arm_driver_flexiv # Flexiv 官方真机栈 flexiv_msgs flexiv_bringup flexiv_gripper flexiv_robot_states_broadcaster # 真机硬件测试节点 flexiv_test_nodes # 真机 GPIO(气爪/电磁阀),仿真里没有对应的物理器件 gpio_controller # MoveIt 配置:体量大,且仿真运动不走 MoveIt 规划 arm_moveit_config flexiv_moveit_config # 真机 bringup。它 CMake 硬依赖 arm_moveit_config,而仿真启动器是 # arm_sim_gazebo(见 devices/sim/gazebo/manifest.yaml 的声明), # 不需要它。真机路径完全不受影响。 arm_bringup ) echo "=== 构建仿真工作区 ===" echo " 产物目录: build_sim/ install_sim/" if [[ "${NO_SKIP}" -eq 1 ]]; then echo " 排除: 无(--all)" else echo " 排除: ${#SKIP[@]} 个真机专属包" fi if [[ "${CLEAN}" -eq 1 ]]; then echo " 清理: 删除 build_sim/ install_sim/ log_sim/" rm -rf build_sim install_sim log_sim fi # --- 激活仿真环境 ----------------------------------------------------------- # shellcheck disable=SC1091 source "${ROOT}/scripts/sim_env.sh" ARGS=(build --build-base build_sim --install-base install_sim) # 注意:这里**不能**加 --symlink-install。仿真环境的 setuptools 较旧, # 不认 --editable,会报 "error: option --editable not recognized"。 # 代价只是安装产物是拷贝而非软链,功能不受影响。 if [[ "${NO_SKIP}" -eq 0 ]]; then ARGS+=(--packages-skip "${SKIP[@]}") fi colcon --log-base log_sim "${ARGS[@]}" 2>&1 \ | grep -vE 'anaconda-auth|conda-content-trust|Unknown distribution option|warnings\.warn' echo echo "构建完成。启动仿真: bash scripts/run_sim_gz.sh"