PingPongRealWorldRL / scripts /h2_upstream_versions.sh
KurisiTOMA's picture
chore: publish H2 real-world RL system
d8290eb verified
Raw History Blame Contribute Delete
3.88 kB
#!/usr/bin/env bash
# Every pane derives all three components from one run-local deployment version.
h2_upstream_defaults() {
H2_UPSTREAM_ROOT=${H2_UPSTREAM_ROOT:-$H2_ROOT/../upstream_lab}
H2_UPSTREAM_V1_ROOT=${H2_UPSTREAM_V1_ROOT:-$H2_ROOT/../upstream_curriculum_20260909/ICRA_v1}
H2_UPSTREAM_V2_ROOT=${H2_UPSTREAM_V2_ROOT:-$H2_ROOT/../upstream_curriculum_20260909/ICRA_v2}
H2_DEPLOYMENT_VERSION=${H2_DEPLOYMENT_VERSION:-original}
H2_ZMQ_PORT=${H2_ZMQ_PORT:-5556}
if [[ ${1:-real} == simulation ]]; then
H2_ADAPTER_NAMESPACE=${H2_ADAPTER_NAMESPACE:-/h2_live_sim}
else
H2_ADAPTER_NAMESPACE=${H2_ADAPTER_NAMESPACE:-/h2_deploy}
fi
}
h2_upstream_preset() {
local selection
selection=$("${H2_PY:-python3}" "$H2_ROOT/runtime/deployment_versions.py" "$1") || return
eval "$selection"
}
h2_upstream_validate() {
h2_upstream_preset "$H2_DEPLOYMENT_VERSION" || return
[[ $H2_ZMQ_PORT =~ ^[0-9]+$ && $H2_ZMQ_PORT -ge 1024 && $H2_ZMQ_PORT -le 65535 ]] \
|| { echo "invalid H2_ZMQ_PORT" >&2; return 2; }
H2_ZMQ_ENDPOINT="tcp://127.0.0.1:$H2_ZMQ_PORT"
}
h2_upstream_write_selection() {
h2_upstream_validate || return
printf 'H2_UPSTREAM_ROOT=%q\nH2_UPSTREAM_V2_ROOT=%q\nH2_DEPLOYMENT_VERSION=%q\n' \
"$H2_UPSTREAM_ROOT" "$H2_UPSTREAM_V2_ROOT" "$H2_DEPLOYMENT_VERSION" > "$1/upstream.env"
printf 'H2_UPSTREAM_V1_ROOT=%q\n' "$H2_UPSTREAM_V1_ROOT" >> "$1/upstream.env"
printf 'H2_ZMQ_PORT=%q\nH2_ADAPTER_NAMESPACE=%q\n' \
"$H2_ZMQ_PORT" "$H2_ADAPTER_NAMESPACE" >> "$1/upstream.env"
}
h2_upstream_read_selection() {
h2_upstream_defaults
H2_DEPLOYMENT_VERSION=
source "$1/upstream.env"
h2_upstream_validate
}
h2_upstream_describe() {
echo "[DEPLOYMENT] deployment=$H2_DEPLOYMENT_VERSION policy=$H2_POLICY_PATH"
echo "[TRANSPORT] zmq=$H2_ZMQ_ENDPOINT adapter_namespace=$H2_ADAPTER_NAMESPACE"
echo "[UPSTREAM] velocity=$H2_VELOCITY_VERSION predictor=$H2_PREDICTOR_VERSION root=$H2_UPSTREAM_ROOT v1_root=$H2_UPSTREAM_V1_ROOT v2_root=$H2_UPSTREAM_V2_ROOT"
if [[ $H2_NOTICE_POLICY == curriculum ]]; then
echo "[TIMING] notice_tth=0.90s generation_tth=0.55s; pending reference follows robot"
fi
if [[ $H2_PREDICTOR_VERSION == rk4-v2 ]]; then
echo "[UPSTREAM] v2 model=h2-v1 plane=dynamic strike_window=[0.35,0.45]m (current H2 deployment band)"
fi
}
# Only our loopback endpoint or a conflicting wildcard bind belongs in this
# check. A3/G1 may keep listening on a different address and/or port.
h2_adapter_listeners() {
ss -H -ltnp "sport = :$H2_ZMQ_PORT" | awk -v port="$H2_ZMQ_PORT" \
'$4 == "127.0.0.1:" port || $4 == "0.0.0.0:" port || $4 == "[::]:" port || $4 == "*:" port'
}
h2_adapter_ros_remaps() {
H2_ADAPTER_ROS_ARGS=(-r "__ns:=$H2_ADAPTER_NAMESPACE" -r __node:=mocap_adapter)
local name
for name in /mocap_adapter/set_side /mocap_adapter/side \
/ego/ball/point /ego/our_base/pose /ego/opponent_base/pose; do
H2_ADAPTER_ROS_ARGS+=(-r "$name:=$H2_ADAPTER_NAMESPACE$name")
done
}
h2_upstream_check_files() {
[[ -f "$H2_POLICY_PATH" ]] || { echo "missing bundle policy: $H2_POLICY_PATH" >&2; return 1; }
if [[ $H2_DEPLOYMENT_VERSION == v1 ]]; then
[[ -f "$H2_UPSTREAM_V1_ROOT/run_adapter.py" && -f "$H2_UPSTREAM_V1_ROOT/predictor.py" ]] \
|| { echo "missing curriculum v1 upstream at $H2_UPSTREAM_V1_ROOT" >&2; return 1; }
fi
if [[ ${1:-} == simulation && $H2_PREDICTOR_VERSION == original ]]; then
[[ -f "$H2_UPSTREAM_ROOT/run_adapter.py" && -f "$H2_UPSTREAM_ROOT/predictor.py" ]] \
|| { echo "missing isolated upstream at $H2_UPSTREAM_ROOT" >&2; return 1; }
fi
if [[ $H2_VELOCITY_VERSION == physics-ls-v2 || $H2_PREDICTOR_VERSION == rk4-v2 ]]; then
[[ -f "$H2_UPSTREAM_V2_ROOT/run_adapter.py" && -f "$H2_UPSTREAM_V2_ROOT/predictor.py" ]] \
|| { echo "missing isolated v2 upstream at $H2_UPSTREAM_V2_ROOT" >&2; return 1; }
fi
}