6edb8d39ab
在开始'设备契约层 + 目录重构 + 通止规装配'改造之前,先钉住当前可运行状态, 使后续任何删除/重构都可回退。 本基线包含: - 现有 ROS 2 工作区全部源码(arm_application / arm_control / arm_bringup 等) - 官方 flexiv_ros2 栈(含 flexiv_hardware / flexiv_controllers 等符号链接) - 设备契约层 src/arm_interfaces(新增,46 项单测通过) - devices/ 设备选型与品牌清单(新增) - scripts/gen_site_example.py 与由它生成的 config/site.example.yaml 按 .gitignore 排除:build/ / install/ / log/ / config/site.yaml / 模型权重二进制。
97 lines
4.0 KiB
Bash
Executable File
97 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Real Rizon4 bringup — sets RDK runtime libs + launches stack backend:=real
|
|
# Note: no `set -u` — conda/RoboStack hooks reference unset vars (CONDA_BUILD, COLCON_TRACE)
|
|
#
|
|
# bash ~/ros2/scripts/run_real.sh
|
|
# bash ~/ros2/scripts/run_real.sh --arm 91
|
|
# bash ~/ros2/scripts/run_real.sh --sn Rizon4-063991 # 本次启动换臂(不改 yaml)
|
|
set -eo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
FLEXIV_PREFIX="${HOME}/flexiv_install"
|
|
LIST_ONLY=false
|
|
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
--sn|--arm) export ROBOT_SN="${2:?}"; export ROBOT_ARM="${2}"; shift 2 ;;
|
|
--list|-l) LIST_ONLY=true; shift ;;
|
|
-h|--help)
|
|
sed -n '2,8p' "$0"
|
|
echo " Extra args are passed to ros2 launch (e.g. use_rviz:=false)."
|
|
exit 0
|
|
;;
|
|
*) break ;;
|
|
esac
|
|
done
|
|
|
|
source /home/cc/anaconda3/etc/profile.d/conda.sh
|
|
conda activate ros_flexiv
|
|
# shellcheck disable=SC1091
|
|
source "${ROOT}/install/setup.bash"
|
|
# shellcheck disable=SC1091
|
|
source "${ROOT}/scripts/lib/load_site_config.sh"
|
|
|
|
# flexiv_hardware must load spdlog/RBDyn from flexiv_install (not conda fmt v11)
|
|
export LD_LIBRARY_PATH="${FLEXIV_PREFIX}/lib:${LD_LIBRARY_PATH:-}"
|
|
|
|
# SITE_ROBOT_SN is the resolved Flexiv serial (89/91 aliases already mapped).
|
|
ROBOT_SN="${SITE_ROBOT_SN:-${ROBOT_SN:-Rizon4-063989}}"
|
|
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}"
|
|
|
|
if [[ "${LIST_ONLY}" == true ]]; then
|
|
python3 "${ROOT}/scripts/lib/export_site_env.py" --print
|
|
exit 0
|
|
fi
|
|
|
|
echo "=== site: ${SITE_CONFIG:-n/a} SN=${ROBOT_SN} ${SITE_ROBOT_LABEL:-} arm=${SITE_ROBOT_ARM:-} ==="
|
|
echo "=== catalog: ${SITE_ROBOT_CATALOG:-} ==="
|
|
echo "=== handeye: ${SITE_HANDEYE_FILE:-} ==="
|
|
echo "=== camera serial: ${SITE_CAM_SERIAL:-} gripper: ${SITE_GRIP_MODEL:-} ${SITE_GRIP_PORT:-} ==="
|
|
echo "=== network iface=${NET_IFACE:-auto} robot=${ROBOT_IP} pc=${SITE_PC_IP:-} ==="
|
|
echo "=== stop leftover ros2_control (RDK exclusive) ==="
|
|
pkill -f '/controller_manager/ros2_control_node' 2>/dev/null || true
|
|
pkill -f 'arm_bringup.*stack.launch' 2>/dev/null || true
|
|
sleep 1
|
|
# 清掉把 91 的 .100 误绑到 89 MAC 上的陈旧 ARP
|
|
if [[ -n "${NET_IFACE}" ]]; then
|
|
ip neigh del "${ROBOT_IP}" dev "${NET_IFACE}" 2>/dev/null || true
|
|
fi
|
|
if ping -c 2 -W 1 "${ROBOT_IP}" >/dev/null 2>&1; then
|
|
echo "robot ${ROBOT_IP} ping OK"
|
|
else
|
|
echo "WARN: cannot ping ${ROBOT_IP} — 这一台不在网里,RDK 大概率会失败。"
|
|
echo " 本机: $(ip -4 -o addr show dev "${NET_IFACE:-enp4s0}" 2>/dev/null | awk '{print $4}' | tr '\n' ' ')"
|
|
echo " ARP ${ROBOT_IP}: $(ip neigh show "${ROBOT_IP}" 2>/dev/null | head -1 || echo none)"
|
|
MAC91="$(ip neigh show "${ROBOT_IP}" 2>/dev/null | awk '{print $5}' | head -1)"
|
|
MAC89="$(ip neigh show 192.168.2.101 2>/dev/null | awk '{print $5}' | head -1)"
|
|
if [[ -n "${MAC91}" && -n "${MAC89}" && "${MAC91}" == "${MAC89}" ]]; then
|
|
echo " ARP MAC 与 89(192.168.2.101) 相同 → .100 是误绑,91 并没有回包。"
|
|
fi
|
|
echo " 91 请接控制柜 User Port 1(出厂静态 192.168.2.100)到同一交换机,示教器 AUTO+Remote Ethernet。"
|
|
echo " 89=192.168.2.101 91=192.168.2.100"
|
|
fi
|
|
|
|
echo "=== RDK preflight + tool (${ROBOT_SN}) ==="
|
|
TOOL_NAME="${SITE_ROBOT_TOOL_NAME:-}"
|
|
RDK_TOOL_ARGS=(--sn "${ROBOT_SN}")
|
|
if [[ -n "${NET_IFACE}" ]]; then
|
|
RDK_TOOL_ARGS+=(--iface "${NET_IFACE}")
|
|
fi
|
|
if [[ -n "${TOOL_NAME}" ]]; then
|
|
RDK_TOOL_ARGS+=(--name "${TOOL_NAME}")
|
|
echo "=== Studio tool → ${TOOL_NAME} ==="
|
|
fi
|
|
if ! "${RDK_PYTHON}" "${ROOT}/scripts/rdk_switch_tool.py" "${RDK_TOOL_ARGS[@]}"; then
|
|
echo ""
|
|
echo "ERROR: RDK cannot connect / switch tool on ${ROBOT_SN}."
|
|
echo " 先确认 ping ${ROBOT_IP} 通(91=控制柜 User Port 1 → 192.168.2.100)。"
|
|
echo " Stop any other RDK client (this run_real.sh is exclusive)."
|
|
echo " On teach pendant: Settings → Remote → enable Ethernet/RDK remote mode."
|
|
echo " Test: bash ${ROOT}/scripts/test_rdk_python.sh ${ROBOT_SN}"
|
|
exit 1
|
|
fi
|
|
|
|
exec ros2 launch arm_bringup stack.launch.py backend:=real robot_sn:="${ROBOT_SN}" "$@"
|