换台电脑克隆后启动失败,是因为 site 和启动脚本写死了 /home/cc/ros2。仓库内路径改成相对仓库根,加载时再展开;缺 install 时先说明要编译,而不是 source 一个不存在的文件。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+6
-2
@@ -30,8 +30,12 @@ if [[ -f "${HOME}/anaconda3/etc/profile.d/conda.sh" ]]; then
|
||||
unset _env_helper
|
||||
fi
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/install/setup.bash"
|
||||
if [[ -f "${ROOT}/install/setup.bash" ]]; then
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/install/setup.bash"
|
||||
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` 需要它
|
||||
_TRT_SITE="${CONDA_PREFIX:-${HOME}/anaconda3/envs/ros_flexiv}/lib/python3.11/site-packages"
|
||||
|
||||
@@ -51,8 +51,8 @@ HEADER = """\
|
||||
# 用法:复制本文件为 config/site.yaml,然后把所有 <占位符> 换成现场实际值。
|
||||
# 现场值包括:机械臂 SN / IP、相机序列号、夹爪串口、传感器 USB 路径。
|
||||
#
|
||||
# 说明:site.yaml 里的路径出现 /home/USER 是因为生成时匿名化了用户名;
|
||||
# 部署时请改成实际用户的 home 目录。
|
||||
# 说明:仓库里的文件用相对仓库根的路径(例如 models/yolo/...)。
|
||||
# 不要改回某个用户的绝对家目录,换台电脑就会找不到文件。
|
||||
# =============================================================================
|
||||
|
||||
"""
|
||||
|
||||
@@ -99,6 +99,6 @@ Next:
|
||||
--packages-up-to flexiv_bringup flexiv_hardware arm_bringup
|
||||
|
||||
Python (already ready, no GitHub):
|
||||
/home/cc/rdk_py310/bin/python
|
||||
\${HOME}/rdk_py310/bin/python
|
||||
bash ${ROOT}/scripts/test_rdk_python.sh
|
||||
EOF
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
# 本机工具链。仓库位置用调用方已经算好的 ROOT,不写死某个用户的家目录。
|
||||
# 用法:source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
|
||||
dev_source_conda() {
|
||||
local cand
|
||||
for cand in \
|
||||
"${HOME}/anaconda3/etc/profile.d/conda.sh" \
|
||||
"${HOME}/miniconda3/etc/profile.d/conda.sh"
|
||||
do
|
||||
if [[ -f "${cand}" ]]; then
|
||||
# shellcheck disable=SC1090
|
||||
source "${cand}"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
echo "ERROR: 找不到 conda.sh。试过 \$HOME/anaconda3 和 \$HOME/miniconda3。" >&2
|
||||
return 1
|
||||
}
|
||||
|
||||
dev_rdk_python() {
|
||||
if [[ -n "${RDK_PYTHON:-}" && -x "${RDK_PYTHON}" ]]; then
|
||||
printf '%s\n' "${RDK_PYTHON}"
|
||||
return 0
|
||||
fi
|
||||
if [[ -x "${HOME}/rdk_py310/bin/python" ]]; then
|
||||
printf '%s\n' "${HOME}/rdk_py310/bin/python"
|
||||
return 0
|
||||
fi
|
||||
echo "ERROR: 找不到 RDK 的 Python。设置 RDK_PYTHON,或装到 \$HOME/rdk_py310。" >&2
|
||||
return 1
|
||||
}
|
||||
@@ -42,7 +42,13 @@ def load_site(path: Path | None = None) -> dict:
|
||||
data = yaml.safe_load(text) or {}
|
||||
if not isinstance(data, dict):
|
||||
raise ValueError(f"无效的 site.yaml: {path}")
|
||||
return data
|
||||
# 相对路径按仓库根展开。site.yaml 里不再写 /home/某用户/ros2。
|
||||
src = str(_root() / "src" / "arm_application")
|
||||
if src not in sys.path:
|
||||
sys.path.insert(0, src)
|
||||
from arm_application.site_io import absolutize_site_paths
|
||||
|
||||
return absolutize_site_paths(data, _root())
|
||||
|
||||
|
||||
def list_robots(data: dict) -> list[dict]:
|
||||
|
||||
@@ -55,7 +55,15 @@ LEVEL_FAIL = "fail"
|
||||
#: 级别排序:fail 最先报
|
||||
_LEVEL_RANK = {LEVEL_FAIL: 0, LEVEL_WARN: 1, LEVEL_OK: 2}
|
||||
|
||||
DEFAULT_RDK_PYTHON = os.environ.get("RDK_PYTHON") or "/home/cc/rdk_py310/bin/python"
|
||||
def default_rdk_python() -> str:
|
||||
"""RDK 解释器。环境变量优先,否则用当前用户家目录下的 rdk_py310。"""
|
||||
env = os.environ.get("RDK_PYTHON", "").strip()
|
||||
if env:
|
||||
return env
|
||||
return str(Path.home() / "rdk_py310" / "bin" / "python")
|
||||
|
||||
|
||||
DEFAULT_RDK_PYTHON = default_rdk_python()
|
||||
|
||||
#: 上一轮没退干净的进程特征。留着它们会让这一轮的错误指向别处:
|
||||
#: · ros2_control_node 占着 RDK(同一个 SN 是独占访问)
|
||||
|
||||
@@ -23,7 +23,9 @@ sys.path.insert(0, str(ROOT / "scripts" / "lib"))
|
||||
|
||||
from rdk_release import is_control_stack_cmd # noqa: E402
|
||||
|
||||
RDK_PYTHON = os.environ.get("RDK_PYTHON", "/home/cc/rdk_py310/bin/python")
|
||||
RDK_PYTHON = os.environ.get("RDK_PYTHON", "").strip() or str(
|
||||
Path.home() / "rdk_py310" / "bin" / "python"
|
||||
)
|
||||
|
||||
|
||||
def _procs() -> list[tuple[int, str]]:
|
||||
|
||||
@@ -12,7 +12,9 @@ ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/load_site_config.sh"
|
||||
|
||||
RDK_PYTHON="${RDK_PYTHON:-/home/cc/rdk_py310/bin/python}"
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
RDK_PYTHON="$(dev_rdk_python)"
|
||||
SN="${ROBOT_SN:-${SITE_ROBOT_SN:-}}"
|
||||
NAME="${SITE_ROBOT_TOOL_NAME:-}"
|
||||
IFACE="${SITE_NET_IFACE:-}"
|
||||
|
||||
+3
-1
@@ -139,7 +139,9 @@ if [[ "${D435_ONLY}" == true ]]; then
|
||||
fi
|
||||
echo "=== MoveL:XY 对准 K0,工具尖高度保持当前(K0 的 z 是工件表面)==="
|
||||
# --go:不按直线距离拦截。800 mm 是脚本自己的保护,不是机械臂限位。
|
||||
exec /home/cc/rdk_py310/bin/python "${ROOT}/scripts/rdk_goto_xyz.py" \
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
exec "$(dev_rdk_python)" "${ROOT}/scripts/rdk_goto_xyz.py" \
|
||||
--xyz "${kx}" "${ky}" "${kz}" --keep-z --go --vel 0.05
|
||||
fi
|
||||
|
||||
|
||||
@@ -1,8 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||||
source /home/cc/anaconda3/etc/profile.d/conda.sh
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
dev_source_conda
|
||||
conda activate ros_flexiv
|
||||
if [[ ! -f "${ROOT}/install/setup.bash" ]]; then
|
||||
echo "ERROR: ${ROOT}/install/setup.bash 不存在。先在仓库根目录 colcon build。" >&2
|
||||
exit 1
|
||||
fi
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/install/setup.bash"
|
||||
ros2 run arm_application demo_named_poses --ros-args \
|
||||
-p "poses:=['home','ready','inspect','pos_left','home']" \
|
||||
|
||||
+8
-2
@@ -26,8 +26,14 @@ while [[ $# -gt 0 ]]; do
|
||||
esac
|
||||
done
|
||||
|
||||
source /home/cc/anaconda3/etc/profile.d/conda.sh
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
dev_source_conda
|
||||
conda activate ros_flexiv
|
||||
if [[ ! -f "${ROOT}/install/setup.bash" ]]; then
|
||||
echo "ERROR: ${ROOT}/install/setup.bash 不存在。先在仓库根目录 colcon build,不要在中文路径下编。" >&2
|
||||
exit 1
|
||||
fi
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/install/setup.bash"
|
||||
# shellcheck disable=SC1091
|
||||
@@ -44,7 +50,7 @@ export LD_LIBRARY_PATH="${FLEXIV_PREFIX}/lib:${LD_LIBRARY_PATH:-}"
|
||||
ROBOT_SN="${SITE_ROBOT_SN:?run_real.sh 需要已配置的机械臂 SN —— 见 scripts/lib/load_site_config.sh 的报错}"
|
||||
ROBOT_IP="${ROBOT_IP:-${SITE_ROBOT_IP:-192.168.100.1}}"
|
||||
NET_IFACE="${SITE_NET_IFACE:-}"
|
||||
RDK_PYTHON="${RDK_PYTHON:-/home/cc/rdk_py310/bin/python}"
|
||||
RDK_PYTHON="$(dev_rdk_python)"
|
||||
|
||||
if [[ "${LIST_ONLY}" == true ]]; then
|
||||
python3 "${ROOT}/scripts/lib/export_site_env.py" --print
|
||||
|
||||
@@ -14,7 +14,7 @@ python3 "${ROOT}/scripts/lib/export_site_env.py" --print ${ROBOT_SN:+--sn "$ROBO
|
||||
echo
|
||||
echo "Edit: ${SITE_CONFIG:-$ROOT/config/site.yaml}"
|
||||
echo "Switch weights:"
|
||||
echo " paths.yolo_weights: \"/home/cc/ros2/models/yolo/detect_best_0.onnx\" # 写 onnx 或 pt 均可"
|
||||
echo " paths.yolo_weights: \"models/yolo/detect_best_0.onnx\" # 相对仓库根,写 onnx 或 pt 均可"
|
||||
echo " 改完确认标签和 engine 都对:"
|
||||
echo " bash ~/ros2/scripts/weights.sh list"
|
||||
echo " bash ~/ros2/scripts/weights.sh doctor --check-engines"
|
||||
|
||||
@@ -8,7 +8,9 @@ source "${ROOT}/scripts/lib/load_site_config.sh" 2>/dev/null || true
|
||||
SN="${1:-${ROBOT_SN:-${SITE_ROBOT_SN:-}}}"
|
||||
ROBOT_IP="${ROBOT_IP:-${SITE_ROBOT_IP:-192.168.100.1}}"
|
||||
IFACE="${SITE_NET_IFACE:-}"
|
||||
PY="${RDK_PYTHON:-/home/cc/rdk_py310/bin/python}"
|
||||
# shellcheck disable=SC1091
|
||||
source "${ROOT}/scripts/lib/dev_tools.sh"
|
||||
PY="$(dev_rdk_python)"
|
||||
|
||||
echo "Using: ${PY}"
|
||||
echo "Robot SN: ${SN} IP: ${ROBOT_IP} iface: ${IFACE:-auto}"
|
||||
|
||||
Reference in New Issue
Block a user