kamil_adc support added

This commit is contained in:
Ayzen
2026-05-08 21:23:52 +03:00
parent bde86813e5
commit 907dbf29ce
36 changed files with 2161 additions and 221 deletions
+125 -11
View File
@@ -7,20 +7,29 @@ VENV_PYTHON="${PROJECT_ROOT}/.venv/bin/python"
VENV_PIP="${PROJECT_ROOT}/.venv/bin/pip"
GUI_ENTRY="${PROJECT_ROOT}/python_app/gui/main.py"
REQUIREMENTS_FILE="${PROJECT_ROOT}/requirements.txt"
PYTHON_CMD=""
PROFILE_PATH=""
SKIP_BUILD=0
BUILD_ONLY=0
CLEAN_SHM=0
KAMIL_ADC_MODE=0
AUTO_START=0
PRODUCER_ONLY=0
print_usage() {
cat <<'EOF'
Usage: ./start.sh [options]
Options:
--skip-build Skip C++ build step and only run GUI
--build-only Build C++ binaries and exit
--clean-shm Remove known radar shared-memory segments before start
-h, --help Show this help
--kamil-adc Use the Raspberry Pi Kamil ADC profile
--profile PATH Use a specific GUI/run config profile
--auto-start Start the GUI pipeline automatically after launch
--producer-only Run only the raw producer selected by the profile
--skip-build Skip C++ build step
--build-only Build C++ binaries and exit
--clean-shm Remove known radar shared-memory segments before start
-h, --help Show this help
EOF
}
@@ -36,6 +45,23 @@ parse_args() {
--clean-shm)
CLEAN_SHM=1
;;
--kamil-adc)
KAMIL_ADC_MODE=1
;;
--profile)
if (($# < 2)); then
echo "--profile requires a path argument." >&2
exit 1
fi
PROFILE_PATH="$2"
shift
;;
--auto-start)
AUTO_START=1
;;
--producer-only)
PRODUCER_ONLY=1
;;
-h|--help)
print_usage
exit 0
@@ -50,6 +76,35 @@ parse_args() {
done
}
absolute_path() {
local path="$1"
if [[ "${path}" = /* ]]; then
printf '%s\n' "${path}"
return
fi
printf '%s\n' "${PROJECT_ROOT}/${path}"
}
resolve_profile_path() {
if ((KAMIL_ADC_MODE == 1)); then
if [[ -z "${PROFILE_PATH}" ]]; then
if [[ -f "${PROJECT_ROOT}/run_config_kamil_adc.pi.json" ]]; then
PROFILE_PATH="${PROJECT_ROOT}/run_config_kamil_adc.pi.json"
else
PROFILE_PATH="${PROJECT_ROOT}/run_config_kamil_adc.example.json"
fi
fi
fi
if [[ -n "${PROFILE_PATH}" ]]; then
PROFILE_PATH="$(absolute_path "${PROFILE_PATH}")"
if [[ ! -f "${PROFILE_PATH}" ]]; then
echo "Config profile not found: ${PROFILE_PATH}" >&2
exit 1
fi
fi
}
check_environment() {
if ! command -v python3 >/dev/null 2>&1; then
echo "python3 is not installed or not found in PATH." >&2
@@ -68,6 +123,13 @@ check_environment() {
}
ensure_python_dependencies() {
local dependency_check
if ((KAMIL_ADC_MODE == 1)); then
dependency_check='import numpy, serial, PyQt6, pyqtgraph, usb1'
else
dependency_check='import numpy, serial, PyQt6, pyqtgraph, usb1, pyvisa'
fi
if [[ ! -x "${VENV_PYTHON}" ]]; then
echo "[start.sh] Creating virtual environment..."
python3 -m venv "${PROJECT_ROOT}/.venv"
@@ -78,9 +140,19 @@ ensure_python_dependencies() {
exit 1
fi
echo "[start.sh] Installing Python dependencies..."
"${VENV_PIP}" install --upgrade pip
"${VENV_PIP}" install -r "${REQUIREMENTS_FILE}"
if ! "${VENV_PYTHON}" -c "${dependency_check}" >/dev/null 2>&1; then
echo "[start.sh] Installing Python dependencies into virtual environment..."
"${VENV_PIP}" install --upgrade pip
"${VENV_PIP}" install -r "${REQUIREMENTS_FILE}"
fi
if ! "${VENV_PYTHON}" -c "${dependency_check}" >/dev/null 2>&1; then
echo "Required Python dependencies are still unavailable in virtual environment: ${PROJECT_ROOT}/.venv" >&2
exit 1
fi
PYTHON_CMD="${VENV_PYTHON}"
echo "[start.sh] Using virtual environment: ${PYTHON_CMD}"
}
run_privileged() {
@@ -170,19 +242,57 @@ build_cpp_binaries() {
cleanup_known_shm() {
echo "[start.sh] Cleaning known shared-memory segments..."
rm -f /dev/shm/radar_raw /dev/shm/radar_preprocessed /dev/shm/radar_results || true
rm -f \
/dev/shm/radar_raw \
/dev/shm/radar_raw_tap \
/dev/shm/radar_preprocessed \
/dev/shm/radar_preprocessed_tap \
/dev/shm/radar_results \
/dev/shm/radar_raw_kamil_adc \
/dev/shm/radar_raw_tap_kamil_adc \
/dev/shm/radar_preprocessed_kamil_adc \
/dev/shm/radar_preprocessed_tap_kamil_adc \
/dev/shm/radar_results_kamil_adc \
|| true
}
run_gui() {
if [[ -n "${PROFILE_PATH}" ]]; then
export RADAR_SYSTEM_PROFILE="${PROFILE_PATH}"
echo "[start.sh] Using config profile: ${PROFILE_PATH}"
fi
if ((AUTO_START == 1)); then
export RADAR_SYSTEM_AUTO_START=1
echo "[start.sh] GUI auto-start is enabled."
fi
echo "[start.sh] Launching GUI..."
exec "${VENV_PYTHON}" "${GUI_ENTRY}"
exec "${PYTHON_CMD}" "${GUI_ENTRY}"
}
run_producer_only() {
if ((KAMIL_ADC_MODE != 1)); then
echo "--producer-only currently requires --kamil-adc." >&2
exit 1
fi
if [[ -z "${PROFILE_PATH}" ]]; then
echo "--producer-only requires a resolved config profile." >&2
exit 1
fi
export PYTHONPATH="${PROJECT_ROOT}${PYTHONPATH:+:${PYTHONPATH}}"
echo "[start.sh] Starting Kamil ADC raw producer with profile: ${PROFILE_PATH}"
exec "${PYTHON_CMD}" -m python_app.scripts.kamil_adc_raw_producer --config "${PROFILE_PATH}"
}
main() {
parse_args "$@"
resolve_profile_path
check_environment
ensure_system_dependencies
ensure_usb_access_rules
if ((KAMIL_ADC_MODE == 0)); then
ensure_system_dependencies
ensure_usb_access_rules
fi
ensure_python_dependencies
if ((CLEAN_SHM == 1)); then
@@ -198,6 +308,10 @@ main() {
exit 0
fi
if ((PRODUCER_ONLY == 1)); then
run_producer_only
fi
run_gui
}