feat(simulation): add provider-neutral worker profile
This commit is contained in:
@@ -136,6 +136,12 @@ export function PolygonLivePanel() {
|
||||
}
|
||||
}, [worker?.activeRunId]);
|
||||
|
||||
const controllerProvider = worker?.providerProfile?.providers.find((provider) =>
|
||||
provider.roles.includes("controller"));
|
||||
const providerStack = worker?.providerProfile?.providers
|
||||
.map((provider) => provider.providerId)
|
||||
.join(" · ");
|
||||
|
||||
const stopMotion = async () => {
|
||||
const runId = worker?.activeRunId;
|
||||
setControlIntent(null);
|
||||
@@ -184,7 +190,10 @@ export function PolygonLivePanel() {
|
||||
<div>
|
||||
<span className="section-eyebrow">ПОЛИГОН / LIVE</span>
|
||||
<h2>Stock Ackermann Rover</h2>
|
||||
<p>PX4/Gazebo исполняются на отдельном worker; браузер показывает канонический срез.</p>
|
||||
<p>
|
||||
Провайдеры симуляции исполняются на отдельном worker; браузер показывает
|
||||
канонический срез ENU/FLU.
|
||||
</p>
|
||||
</div>
|
||||
<div>
|
||||
<StatusBadge
|
||||
@@ -198,7 +207,7 @@ export function PolygonLivePanel() {
|
||||
disabled={!worker?.controlAvailable || actionBusy}
|
||||
onClick={() => void runAction()}
|
||||
>
|
||||
{actionBusy ? "Ожидаем PX4/Gazebo…" : runActive ? "Остановить" : "Запустить"}
|
||||
{actionBusy ? "Ожидаем провайдеры…" : runActive ? "Остановить" : "Запустить"}
|
||||
</Button>
|
||||
</div>
|
||||
</header>
|
||||
@@ -221,9 +230,11 @@ export function PolygonLivePanel() {
|
||||
<div className="polygon-live-telemetry">
|
||||
<div className="polygon-rover-controls">
|
||||
<div className="polygon-rover-controls__heading">
|
||||
<span>Управление PX4</span>
|
||||
<StatusBadge tone={commandAcceptance?.offboard ? "success" : "neutral"}>
|
||||
{commandAcceptance?.offboard ? "Armed · Offboard" : "Ожидает прогона"}
|
||||
<span>
|
||||
Управление {controllerProvider?.providerId ?? "машиной"}
|
||||
</span>
|
||||
<StatusBadge tone={commandAcceptance?.controllerReady ? "success" : "neutral"}>
|
||||
{commandAcceptance?.controllerReady ? "Controller ready" : "Ожидает прогона"}
|
||||
</StatusBadge>
|
||||
</div>
|
||||
<div className="polygon-rover-controls__grid">
|
||||
@@ -270,8 +281,16 @@ export function PolygonLivePanel() {
|
||||
</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span>Провайдеры</span>
|
||||
<strong>{worker?.providerIds.join(" · ") || "—"}</strong>
|
||||
<span>Провайдерный стек</span>
|
||||
<strong>{providerStack || "—"}</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span>Активные процессы</span>
|
||||
<strong>{worker?.activeProviderIds.join(" · ") || "—"}</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span>Источник live-состояния</span>
|
||||
<strong>{live ? `${live.sourceProvider} · ${live.sourceSignal}` : "—"}</strong>
|
||||
</div>
|
||||
<div>
|
||||
<span>Последняя команда</span>
|
||||
@@ -284,8 +303,9 @@ export function PolygonLivePanel() {
|
||||
<div className="polygon-live-boundary">
|
||||
<StatusBadge tone="success">Virtual only</StatusBadge>
|
||||
<p>
|
||||
Команды проходят PX4 ROS 2 Offboard только в SITL. Физического actuator
|
||||
authority нет; live-поза остаётся диагностической.
|
||||
Команды проходят только через заявленный controller provider
|
||||
{controllerProvider ? ` ${controllerProvider.providerId}` : ""}. Физического
|
||||
actuator authority нет; live-поза остаётся диагностической.
|
||||
</p>
|
||||
</div>
|
||||
{error && <p className="polygon-live-error">{error}</p>}
|
||||
|
||||
Reference in New Issue
Block a user