launch_hoisa.sh#
1. Overview#
launch_hoisa.sh is the reference launcher for the full HOISA (Halos Outside-In Safety) Safety
Core stack. It orchestrates:
The Safety Core Docker container (running the NvPSD Gateway, the SEI daemon, and the event-ingestion pipeline).
The Safety Decision Maker on the host — either the CCPLEX SDM binary (
atl_sdm/proximity_sdm) or thefsicom-agentbridge when SDM is offloaded to the FSI.The Safety AI Monitor (
safety_monitor) in eitherLEARNorACTIVEmode. Under the default Docker runtime it runs inside the Safety Core container; with--runtime hostit runs directly on the host.The Perception Monitor (
nv_perception_monitor), which runs by default inLEARNandACTIVEmodes. It is not launched inskipmode and can be disabled explicitly with--skip-pcm.
It also prepares the filesystem state the stack depends on — the
/var/log/psf/ log directory, the runtime IPC directory used for
host ↔ container communication, the threshold configuration at a stable
well-known path, and the bind-mount of nvpss.conf into the container.
The launcher is installed by the psf-desktop / psf-tegra Debian
packages at:
/opt/nvidia/psf/bin/launch_hoisa.sh
The recommended execution directory is /opt/nvidia/psf/bin:
cd /opt/nvidia/psf/bin
sudo ./launch_hoisa.sh ...
SAIM’s per-sensor baseline files are stored in a dedicated host baseline
directory. This directory is chosen with the launch_hoisa.sh
--baseline-dir argument: when the argument is omitted, the default
/opt/nvidia/psf/bin/saim_baseline is used; when it is supplied, the
path provided is used instead. Under the default Docker runtime the
directory is bind-mounted into the container as SAIM’s working directory,
so baselines learned in learn mode persist for active mode.
Default baselines (running active mode without learn)#
SAIM ships default baseline templates so that active mode can run even
before a learn pass has been performed. The package includes three
templates for the loading-dock reference scenario:
Camera_baseline.cfg.default, Camera_01_baseline.cfg.default, and
Camera_02_baseline.cfg.default. For each configured sensor, SAIM first
looks for a learned baseline (<sensorName>_baseline.cfg) in the baseline
directory; if that file is not present, it falls back to the matching shipped
template (<sensorName>_baseline.cfg.default). The fallback matches
sensorName exactly, so a site whose sensor names differ from the three
above gets no template and must run learn mode. active mode fails
only when neither a learned baseline nor a default template is found for a
sensor.
Note
The default templates are tuned for the loading-dock reference cameras.
For any other camera or scene, run learn mode to generate
site-specific baselines; relying on the defaults elsewhere can produce
inaccurate trust verdicts.
2. Operating Modes#
The launcher has three mutually exclusive modes selected via
--mode <learn|active|skip>:
Mode |
What runs |
When to use |
|---|---|---|
learn |
|
One-time baseline-learning pass. |
active |
Safety Core container + host SDM + |
Full production stack. Default deployment. Reads the SAIM
baseline files from the baseline directory ( |
skip |
Safety Core container + host SDM. No SAIM and no Perception Monitor. |
AI-trust path validated separately, or no GPU/decoder budget available for SAIM. Useful for event-ingestion-only deployments. |
3. Command-Line Interface#
3.1 Required Arguments#
Argument |
Description |
|---|---|
|
Operating mode (see Section 2). |
|
Sensor configuration file in CSV form
( |
3.2 Arguments Required in active / skip Modes#
Argument |
Description |
|---|---|
|
Fully-qualified image reference for the Safety Core container.
Required whenever the Docker runtime is used (the default),
including |
|
IP address of the SDM command receiver (PLC or reference command receiver application). |
|
UDP port of the SDM command receiver. |
Note
--app <atl|pxc> is optional and defaults to atl. Both
--cmd-rx-ip and --cmd-rx-port are required in active and
skip modes.
3.3 Optional Arguments#
Argument |
Default |
Description |
|---|---|---|
|
|
How the Safety Core components and SAIM are launched. |
|
|
|
|
|
SAIM threshold configuration, used in |
|
300 |
LEARN-mode duration. Accepted range: |
|
unset |
Pin all SAIM streams to this GPU index. Without this flag, SAIM distributes streams across visible GPUs. |
|
|
Host folder holding SAIM’s per-sensor baseline files. When omitted,
the default |
|
unset |
Kafka broker endpoint for the event-ingestion client inside the
container in |
|
|
Docker container name. Change when running multiple instances
side-by-side. Ignored with |
|
0 (off) |
CCPLEX-SDM periodic decision-repeat interval in milliseconds.
|
|
|
Bind address for |
|
|
UDP port for |
|
|
Gateway-heartbeat stale grace period for the CCPLEX ATL and Proximity
SDMs. Valid range: |
|
|
Gateway-heartbeat miss period for the CCPLEX ATL and Proximity SDMs.
Valid range: |
|
unset |
Do not launch |
|
|
Host path to the SEI daemon configuration. Bind-mounted
read-only into the container. Use this to point at a per-site
variant without editing the default. Docker runtime only: under
|
|
— |
Show the inline usage banner and exit. |
Note
In learn mode, arguments that apply only to active / skip
(--cmd-rx-ip, --cmd-rx-port, --sdm-target,
--decision_interval_ms, --nvpss-conf, --gateway-ip,
--gateway-port) are
accepted but ignored, and the launcher emits a
“Warning: … is ignored in learn mode” line for transparency.
--docker-image is required in learn mode under the default
Docker runtime (it is only ignored with --runtime host).
4. Runtime State and Logs#
4.1 Logs#
All logs are written to /var/log/psf/:
File |
Contents |
|---|---|
|
Safety Core container components (gateway, SEI daemon, event-ingestion client). |
|
|
|
|
|
ATL SDM ( |
|
Proximity SDM ( |
To follow logs live:
tail -f /var/log/psf/psf.log
tail -f /var/log/psf/saim.log # --runtime host only
tail -f /var/log/psf/atl_sdm.log # or pxc_sdm.log
4.2 Privilege Requirements#
The launcher must be run as root, or the invoking user must have
passwordless sudo access. It invokes privileged operations with
sudo -n to prepare the runtime log and IPC directories and to launch
the host-side SDM process (and SAIM under --runtime host).
Membership in the docker group is additionally required in any mode
that uses the default Docker runtime, including learn.
5. SDM on FSI#
When --sdm-target fsi is supplied, the launcher does not start
the CCPLEX SDM binary. Instead it starts fsicom-agent on the
CCPLEX, which bridges the FSI-hosted SDM to the NvPSD Gateway.
Prerequisites (unchanged from the manual deployment flow — see Deployment Guide §2.2.2 / §2.3.2):
IGX-Thor BSP + Safety Extension Package flashed on the target.
HOISA-specific FSI firmware reflashed onto the FSI, matching the application under test (
fsi-fw/atlorfsi-fw/proximity), and the board reset afterwards so the island boots that firmware.nvFsiComdaemon running on the CCPLEX. The launcher does not startnvFsiCom; it must be started beforelaunch_hoisa.sh.
Important
If nvFsiCom is not running, fsicom-agent stalls at
[INIT] Initializing FSI communication... and no decision ever reaches
the command receiver, even though the rest of the stack starts cleanly.
Confirm it with pgrep -af nvFsiCom before launching. For the agent’s own
options and expected startup output, see
the fsicom-agent option reference.
Example:
cd /opt/nvidia/psf/bin
sudo /opt/nvidia/ccplex_sf/fsi_ccplex_com/nvFsiCom &
sudo ./launch_hoisa.sh --mode active --app atl --sdm-target fsi \
--sensor-config /opt/nvidia/psf/bin/sensor_config.conf \
--docker-image <PSF_DOCKER_IMAGE> \
--cmd-rx-ip <IP> --cmd-rx-port <Port>
SDM logs are observable on the FSI UART shell (use tcu_muxer to
discover the device node). /var/log/psf/atl_sdm.log /
pxc_sdm.log carry only the fsicom-agent bridge output in this
mode.
Note
--decision_interval_ms is applicable only to the CCPLEX SDM
binary. The launcher warns if a non-default value is combined with
--sdm-target fsi.
6. SEI Daemon Configuration (nvpss.conf)#
The SEI daemon reads its configuration from nvpss.conf. The launcher
bind-mounts the host’s nvpss.conf read-only into the container so
operator edits on the host are authoritative without rebuilding the
image.
Default host source:
/opt/nvidia/psf/bin/nvpss.conf(populated by the Debian package).Override:
--nvpss-conf /etc/psf/site-a/nvpss.confto use a per-site variant without editing the default file.
The launcher validates that the host file exists and is readable before starting the container.
Full parameter reference: see SEI Configuration.
7. Shutdown and Exit Status#
Sending SIGINT (Ctrl-C) or SIGTERM to the launcher triggers a
graceful shutdown of all managed processes followed by removal of the
Safety Core container. Any process that does not exit gracefully within
a short grace period is force-terminated.
Exit codes:
0—--help, or alearnrun that completed its capture window.1— configuration or prerequisite validation failure, or one of the supervised processes died unexpectedly.130— process interrupted by SIGINT.143— process terminated by SIGTERM.
8. Troubleshooting#
8.1 Permission error preparing /var/log/psf#
The invoking user does not have the privileges required to create the
log directory. Re-run the launcher as root, or configure passwordless
sudo for the invoking user.
8.2 Safety Core container fails to start#
The launcher dumps the container’s initial logs to stderr. Common causes:
Docker image not available locally and not reachable on the registry.
Another container already bound to the same name.
nvpss.confremoved between validation and container start.
8.3 Host process exits immediately after launch#
If atl_sdm / proximity_sdm / safety_monitor exit within a
second of starting, the launcher aborts with
Error: failed to start <label>. Inspect the corresponding log in
/var/log/psf/ for the root cause.
8.4 safety_monitor exits with baseline file not found#
active mode reads SAIM’s per-sensor baseline files from the baseline
directory (--baseline-dir, default /opt/nvidia/psf/bin/saim_baseline),
so pass the same --baseline-dir to learn and active. For the full
diagnosis and the learn command that regenerates site-specific baselines,
see 6.3 Safety AI Monitor exits with baseline file not found.
8.5 VST RTSP URL returns DESCRIBE or PLAY 404#
Every rtspUrl in sensor_config.conf must be validated before the
launcher is started in learn or active mode. For the validation
commands and the VST-side fix, see 6.4 VST sensor is online but RTSP playback fails.
9. Reference#
Related documents: