Skip to content

Closed-loop Goby runs of MOOS-IvP missions, with goby test - #7

Merged
tsaubergine merged 9 commits into
claude/admiring-clarke-s2ay8b-goby-appfrom
claude/admiring-clarke-s2ay8b-closed-loop
Nov 4, 2026
Merged

tsaubergine merged 9 commits into
claude/admiring-clarke-s2ay8b-goby-appfrom
claude/admiring-clarke-s2ay8b-closed-loop

Conversation

@tsaubergine

@tsaubergine tsaubergine commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Stacked on #6. This finishes Phase 2 of the plan: four MOOS-IvP missions run end to end under Goby. The Goby tests are declarative goby test files.

What's here

  • Goby from the continuous repository, and optional. goby test is newer than Goby 3.6.1, so the source init.sh adds is packages.gobysoft.org's continuous repository.
    • It currently installs 3.6.1+4+g3ab60147, available for 24.04 and 26.04 on amd64 and arm64.
    • The source and its key are only added when apt has no candidate for libgoby3-dev.
    • init.sh --no-goby leaves Goby out, and build.sh then skips the Goby app. The "Record missions" workflow uses it.
    • The Goby tests are only added when find_package(GOBY) sets GOBY_EXECUTABLE, which is only true for builds that have goby test. Older installs still build goby_helm_ivp and skip the tests with a status message.
  • Closed-loop missions (ctest closed_loop_{s1_alpha,s2_bravo,s3_charlie,s4_delta}):
    • src/test/missions/goby/closed_loop.yml holds the fixtures (gobyd, goby_basic_frontseat_simulator, the frontseat interface and goby_helm_ivp, with time warp 10) and the startup check;
    • each <mission>/test.yml includes it, publishes the pokes (DEPLOY=true, MOOS_MANUAL_OVERRIDE=false) and expects the helm's postings by a deadline;
    • throughout the mission, they also check for no MALCONFIG and no behavior error;
    • s3_charlie also checks the helm is still in DRIVE at the end;
    • times are real seconds, a tenth of mission time;
    • goby test visualize draws the plan, and a failed run's report names each fixture's log.
  • Smoke test (ctest goby_helm_ivp): src/test/goby/helm_ivp/test.yml checks the frontseat bridge. One NodeStatus goes in; a DesiredCourse with heading 90, HELM_DRIVE and a Status of DRIVE come out.
  • Removed: ivpico_mission_check, run.sh and test_goby_helm_ivp.sh, which the test files replace.
  • build/usr: build.sh installs openocean-messages, MOOS-IvP's helm libraries and IvPico into build/usr, so build/usr/bin can go on PATH.
    • IvPico now installs its libraries.
    • Installed programs find them through an $ORIGIN/../lib RPATH.
  • OpenCPN: the alpha launch also starts goby_opencpn_interface, which serves the vehicle as an AIS target on TCP port 54000.
    • launch/goby/alpha/README.md covers running the mission and connecting OpenCPN.
  • READMEs: the closed-loop section in src/test/missions/README.md now describes the test files, and the top-level README points to the alpha launch's README.
Mission Checks (mission time)
s1_alpha RETURN=true before 460 s (recorded at 370 s)
s2_bravo MODE=ACTIVE:SURVEYING before 10 s; RETURN=true before 270 s
s3_charlie MODE=ACTIVE:LOITERING before 10 s; still in DRIVE at 200 s
s4_delta MODE=ACTIVE:LOITERING before 10 s; TIME_AT_SURFACE=1 before 180 s

Testing

  • goby test validate passes on all five files.
  • Ran the five Goby tests locally through ctest with Goby 3.6.1+4+g3ab60147: all pass in 2–51 s, and no processes are left behind.
  • Clean Ubuntu 26.04 container, default init.sh: the continuous source is added, all 15 tests pass, and build/usr/bin/goby_helm_ivp is installed.
  • Clean Ubuntu 26.04 container, init.sh --no-goby: no Goby source or packages, and all 10 tests pass.
  • Ran the installed goby_helm_ivp from PATH: every library resolves from build/usr/lib.
  • Ran the alpha mission with goby_opencpn_interface: AIS sentences for the vehicle arrive on port 54000.

🤖 Generated with Claude Code

https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp

ivpico_mission_check pokes a mission and checks the helm's postings and
state while goby_helm_ivp flies the mission's recorded .bhv against Goby's
basic frontseat simulator (time warp 10). run.sh brings up gobyd, the
simulator, the frontseat interface and the helm for one mission.

ctest closed_loop_<mission> covers s1_alpha, s2_bravo, s3_charlie and
s4_delta.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
@tsaubergine
tsaubergine added this pull request to stack #8 November 3, 2026 23:30
The goby_helm_ivp smoke test and the closed-loop mission runs are now
declarative 'goby test' files: fixtures start gobyd, the simulator, the
frontseat interface and the helm, and the runs publish the pokes and
expect the helm's postings and state. This replaces ivpico_mission_check,
run.sh and test_goby_helm_ivp.sh.

'goby test' is newer than Goby 3.6.1, so init.sh installs Goby from the
continuous repository, and the Goby tests are only added when
find_package(GOBY) sets GOBY_EXECUTABLE.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
@tsaubergine tsaubergine changed the title Closed-loop Goby runs of MOOS-IvP missions Closed-loop Goby runs of MOOS-IvP missions, with goby test Nov 3, 2026
claude and others added 7 commits November 3, 2026 23:44
--no-goby leaves Goby3 out (build.sh then skips the Goby app); the
"Record missions" workflow uses it, since it only builds MOOS-IvP. The
packages.gobysoft.org continuous source and its key are only added when
apt has no candidate for libgoby3-dev.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
openocean-messages, MOOS-IvP's helm libraries and IvPico are installed
into BUILD_DIR/usr, so build/usr/bin can go on PATH. IvPico installs its
libraries, and installed programs find them through an $ORIGIN/../lib
RPATH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
The vehicle is served as an AIS target on TCP port 54000 for OpenCPN.
launch/goby/alpha/README.md covers running the mission and connecting
OpenCPN; the top-level README points to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
viewer.launch runs a MOOS community (alpha.moos, with pNodeReporter and
pMarineViewer set up as in MOOS-IvP's s1_alpha) and goby_moos_gateway with
a new IvPico plugin. The plugin posts what pHelmIvP and its navigation
would (NAV_*, the helm's postings and IVPHELM_*), and gives configured
MOOS variables, such as pMarineViewer's buttons, back to the helm.

allstop_string() moves from the replay test into the helm library, beside
modes_string(), for IVPHELM_ALLSTOP and IVPHELM_SUMMARY. The alpha launch's
Goby platform is now "alpha", so the behaviors' labels match the MOOS
mission's. init.sh installs Goby's MOOS support and the MOOS-IvP apps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
set_datum_warp.sh sets the datum and time warp in every configuration and
alpha.moos, starts the simulated vehicle at the datum, and picks the
MOOS-IvP image covering the datum for pMarineViewer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
…ynamics

config/alpha.bhv is now MOOS-IvP's s1_alpha mission's, so the Goby and
MOOS missions fly the same survey (1.2 m/s) and return (2 m/s).

The simulator's turn rate (4 deg/s) and acceleration (0.25 m/s^2) are
those measured from uSimMarineV22 in the recorded s1_alpha mission.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VLcYK4e29B5FiPbDDJy5fp
@tsaubergine
tsaubergine merged commit be97f06 into main Nov 4, 2026
4 checks passed
@tsaubergine
tsaubergine deleted the claude/admiring-clarke-s2ay8b-closed-loop branch November 4, 2026 04:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants