101 lines
4.2 KiB
Bash
Executable File
101 lines
4.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
expected_omnisocket_commit="de3f5c96779dbe1571c10feb22fc7f2331b6b222"
|
|
|
|
for executable in \
|
|
"$repo_dir/tg3_omnisocket_transport/omnisocket_xtele_sender.py" \
|
|
"$repo_dir/tg3_local_teleop/tg3_local_teleop.py" \
|
|
"$repo_dir/tg3_local_teleop/data_recorder_node.py" \
|
|
"$repo_dir/tg3_local_teleop/delete_ready_episode.py" \
|
|
"$repo_dir/tg3_local_teleop/run.sh" \
|
|
"$repo_dir/tg3_local_teleop/run_data_recorder.sh" \
|
|
"$repo_dir/tg3_local_teleop/wait_ros_ready.sh" \
|
|
"$repo_dir/tg3_local_teleop/home.sh" \
|
|
"$repo_dir/tg3_local_teleop/status.sh" \
|
|
"$repo_dir/tg3_data_collection/data_get_sync.py"; do
|
|
if [[ ! -x "$executable" ]]; then
|
|
echo "Required executable bit is missing: $executable" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
python3 -m py_compile \
|
|
"$repo_dir/tg3_omnisocket_transport/omnisocket_xtele_sender.py" \
|
|
"$repo_dir/tg3_local_teleop/tg3_local_teleop.py" \
|
|
"$repo_dir/tg3_local_teleop/gesture_toggle.py" \
|
|
"$repo_dir/tg3_local_teleop/data_collection.py" \
|
|
"$repo_dir/tg3_local_teleop/data_recorder_protocol.py" \
|
|
"$repo_dir/tg3_local_teleop/data_recorder_node.py" \
|
|
"$repo_dir/tg3_local_teleop/delete_ready_episode.py" \
|
|
"$repo_dir/tg3_data_collection/data_get_sync.py"
|
|
python3 "$repo_dir/tg3_omnisocket_transport/test_session_gate.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_session_gate.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_gesture_toggle.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_idle_session_refresh.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_data_collection.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_data_recorder_protocol.py"
|
|
python3 "$repo_dir/tg3_local_teleop/test_delete_ready_episode.py"
|
|
python3 "$repo_dir/tg3_data_collection/test_data_get_sync.py"
|
|
python3 - "$repo_dir/tg3_local_teleop/config.toml" <<'PY'
|
|
import sys
|
|
import tomllib
|
|
|
|
with open(sys.argv[1], "rb") as stream:
|
|
document = tomllib.load(stream)
|
|
section = document["data_collection"]
|
|
topics = set(section["topics"])
|
|
required = set(section["required_topics"])
|
|
head_rgbd = {
|
|
"/ob_camera_head/color/image_raw/compressed",
|
|
"/ob_camera_head/color/camera_info",
|
|
"/ob_camera_head/color/metadata",
|
|
"/ob_camera_head/depth/image_raw/compressedDepth",
|
|
"/ob_camera_head/depth/camera_info",
|
|
"/ob_camera_head/depth/metadata",
|
|
}
|
|
waist_rgbd = {
|
|
"/ob_camera_waist/color/image_raw/compressed",
|
|
"/ob_camera_waist/color/camera_info",
|
|
"/ob_camera_waist/color/metadata",
|
|
"/ob_camera_waist/depth/image_raw/compressedDepth",
|
|
"/ob_camera_waist/depth/camera_info",
|
|
"/ob_camera_waist/depth/metadata",
|
|
}
|
|
assert head_rgbd <= topics, "head RGB-D topics must stay in the recording whitelist"
|
|
assert waist_rgbd <= topics, "waist RGB-D topics must stay in the recording whitelist"
|
|
assert head_rgbd.isdisjoint(required), "head RGB-D must not block recording"
|
|
assert waist_rgbd.isdisjoint(required), "waist RGB-D must not block recording"
|
|
assert "/tf_static" in topics and "/tf_static" not in required
|
|
assert section.get("minimum_topic_rates_hz", {}) == {}
|
|
groups = section["optional_topic_groups"]
|
|
assert set(groups) == {"head_rgbd", "waist_rgbd"}
|
|
assert set(groups["head_rgbd"]["topics"]) == head_rgbd
|
|
assert set(groups["waist_rgbd"]["topics"]) == waist_rgbd
|
|
assert groups["head_rgbd"]["minimum_topic_rates_hz"] == {
|
|
"/ob_camera_head/color/image_raw/compressed": 20.0,
|
|
"/ob_camera_head/depth/image_raw/compressedDepth": 20.0,
|
|
}
|
|
assert groups["waist_rgbd"]["minimum_topic_rates_hz"] == {
|
|
"/ob_camera_waist/color/image_raw/compressed": 20.0,
|
|
"/ob_camera_waist/depth/image_raw/compressedDepth": 20.0,
|
|
}
|
|
assert section["minimum_free_gib"] >= 100.0
|
|
assert section["retain_failed_episodes"] is False
|
|
print("config.toml parse passed")
|
|
PY
|
|
|
|
if [[ -n "${OMNISOCKETGO_DIR:-}" ]]; then
|
|
actual_omnisocket_commit="$(git -C "$OMNISOCKETGO_DIR" rev-parse HEAD)"
|
|
if [[ "$actual_omnisocket_commit" != "$expected_omnisocket_commit" ]]; then
|
|
echo "OmniSocketGo commit mismatch: $actual_omnisocket_commit" >&2
|
|
exit 1
|
|
fi
|
|
echo "OmniSocketGo commit verified: $actual_omnisocket_commit"
|
|
else
|
|
echo "OmniSocketGo is external and was not checked; expected commit: $expected_omnisocket_commit"
|
|
fi
|
|
|
|
echo "All offline TG3 checks passed"
|