Skip to content

Integrate naval group T1 2026 work - #48

Open
Gjacquenot wants to merge 40 commits into
mainfrom
integrate_naval_group_work
Open

Integrate naval group T1 2026 work#48
Gjacquenot wants to merge 40 commits into
mainfrom
integrate_naval_group_work

Conversation

@Gjacquenot

@Gjacquenot Gjacquenot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

Previous attempt tried to put all commits from Naval Group

This pull request integrates

  • refactoring of waypoint follower
  • new plugin with lotusim_mas that is a refactoring of entity_manager
  • add the power subsystem plugin

@Gjacquenot
Gjacquenot force-pushed the integrate_naval_group_work branch from 3713be0 to 0a4da66 Compare July 30, 2026 13:34
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
This commit comes from a refactoring from Naval Group's people

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Generated with https://imagetostl.com/convert/file/stl/to/dae

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
…he writes lived in the removed getInstance), so the log at xdyn_websocket.cpp:204 prints an empty name and both maps are dead.

Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
systems/physics_engine_interface/src/xdyn_websocket.cpp:154 (activateInterface): the URI guard uses && where || looks intended, and m_uri[_entity] inside the condition default-inserts an entry.

Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
systems/waypoint_follower/src/waypoint_follower.cpp:219-236: (val <= 0.0) ? val : 999.0 — any valid positive limit from SDF is replaced by 999.0 while invalid non-positive values pass through; the condition looks inverted.

Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Signed-off-by: Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
@Gjacquenot
Gjacquenot force-pushed the integrate_naval_group_work branch from 0a4da66 to fd7584c Compare July 30, 2026 13:59
@Gjacquenot

Copy link
Copy Markdown
Collaborator Author

Here is the log of all authors obtained with command git log --all --format='%an <%ae>' | sort -u

Arzel <qarzel.exterieur@pacific.naval-group.com>
Cedric Buche <cedric.buche@pacific.naval-group.com>
Cyril Moron <cyril.moron@gmail.com>
Estelle Chauveau <estelle.chauveau@naval-group.com>
Esther <77739079+estherRay@users.noreply.github.com>
Esther Rayssiguie <erayssiguie.exterieur@naval-group.com>
Esther Rayssiguie <esther.rayssiguie@fe.naval-group.com>
Guillaume Jacquenot <Gjacquenot@users.noreply.github.com>
Guillaume Jacquenot <guillaume.jacquenot@gmail.com>
Guillaume Jacquenot <guillaume.jacquenot@sirehna.com>
Hélène Lechêne <hlechene.exterieur@pacific.naval-group.com>
Julien <julien.prodhon@fe.naval-group.com>
Julien Prodhon <julien.prodhon@fe.naval-group.com>
Juliette <jgrosset.external@pacific.naval-group.com>
Juliette Grosset <60522207+grossetjuliette@users.noreply.github.com>
Juliette Grosset <jgrosset.external@pacific.naval-group.com>
Juliette Grosset <jgrosset10@gmail.com>
Kerian Fiter <kerian.fiter@gmail.com>
Kerian Fiter <kfiter.exterieur@pacific.naval-group.com>
Malcom Neo <malcom.neo@fe.naval-group.com>
Paul Mellin <paul.mellin@naval-group.com>
PaulMellin <paul.mellin@naval-group.com>
Raphaël <clement_raphael@orange.fr>
Raphaël Clément <raphael.clement@naval-group.com>
estherRay <newsther@yahoo.com>
julien.prodhon <julien.prodhon@fe.naval-group.com>
juliette <jgrosset10@gmail.com>
malcom neo <51524465+malcom-neo@users.noreply.github.com>
malcom-neo <malcom.neo@fe.naval-group.com>
malcom-neo <malcom.neo@gmail.com>
malcom-neo <malcomneo@gmail.com>
malcom.neo <malcom.neo@fe.naval-group.com>

@Gjacquenot

Gjacquenot commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

At this stage, the difference between dc84213 and fd7584c is:

git diff dc84213be133d013599537fa123432663ffa60d6 fd7584c1b412db42fa69e1c6bdaa1dfe181117f9 --name-only
interfaces/lotusim_msgs/srv/String.srv
systems/entity_manager/CMakeLists.txt
systems/entity_manager/include/entity_manager/entity_manager.hpp
systems/entity_manager/package.xml
systems/entity_manager/src/entity_manager.cpp
systems/render_interface/include/render_interface/render_interface.hpp
systems/render_interface/src/ros_interface.cpp

The difference lies in the fact we have put back entity_manager code

@Gjacquenot

Copy link
Copy Markdown
Collaborator Author

I have used the following command to move from tag v0.1.1_alpha1 to v0.1.1_alpha2

git rebase --rebase-merges --onto integrate_naval_group_work d64077^ 1312e384 

@Gjacquenot

Gjacquenot commented Aug 3, 2026

Copy link
Copy Markdown
Collaborator Author

👋 I have created three tags:

  • A first one tag (v0.1.0) based on @grossetjuliette 's work (the 13 commits)
  • A second one tag (v0.1.1_alpha1) that takes into @estherRay , @malcom-neo, @julienprodhon 's work, mainly with the addition of the powersystem (based on the first tag)
  • A third one (v0.1.1_alpha2), based on the second one, that takes into account @cmoron , @estherRay last modifications.

Wiki points to the first tag. We have kept all previous plugins, that are proposed to be renamed (entity_manager)

Here is the linear log of all our contributions.

git log --oneline       
  • 5b3a23b (HEAD -> integrate_naval_group_work_suite1, tag: v0.1.1_alpha2, origin/integrate_naval_group_work_suite1) fixed typo
  • c6210e0 fixed typo
  • 27af0b2 Feature(physics_engine_interface): seed angle-commanded control surfaces
  • 4953c7e ✨ Added IA generated doc
  • e1cec3b 🔧 Added new checks
  • aa67766 🔧 Continued to investigate
  • 299d6cb 🔧 Start investigation
  • 562f5b7 fix(physics_engine_interface): stop spurious warning and guard missing interface type
  • 8f97942 ✨ Merge branch 'fix/ned-enu-attitude-body-swap'
  • 1815c8e Merge branch 'feat/sonarcloud-ci'
  • a1712ba ✨ Added a python script to check ENU/NED changes
  • 5940194 Test(physics_engine_interface): bootstrap gtest + NED/ENU conversion tests
  • 9887005 ci: remove temporary branch trigger after successful test
  • 5acf51c Fix(physics_engine_interface): include body-frame swap in NED<->ENU attitude conversion
  • 66b2cec ci(temp): trigger SonarCloud on feature branch for testing
  • 93a264d ci: variabilize SonarCloud project key and organization
  • ce5bdf2 ci: add SonarCloud CI-based analysis for C++ code quality
  • c691a06 Fix(physics_engine_interface): send absolute sim time to xdyn, not step duration in ms
  • bb189a8 Fix(physics_engine_interface): correct xdyn quaternion j/k mapping on receive
  • 4d55fa4 Docs: add AGENTS.md and a coding-agent skill for onboarding
  • fd7584c (tag: v0.1.1_alpha1, origin/integrate_naval_group_work, integrate_naval_group_work) Added .vscode/c_cpp_properties.json
  • ec4bef8 🔧 Put back Juliette optional parameter
  • ea9f2ee ✨ Added frames that explain frames
  • 23276a5 📝 Updated comment reference
  • a92fb5e 🔥 Removed custom_aerial_entity_manager superseded by custom_aerial_mas
  • 9d88931 🔧 Fixed precision for quaternion declaration
  • 406fdde 🔧 Added target it for interactive tests
  • 3d5d8e7 ❇️ Added a Makefile to build lotusim image
  • f521c7f 🐛 Fixed default value checks
  • 50c2426 🔧 Fixed logic condition
  • 4ff7caf :cleanup: Removed key for m_models_cmd_map_ptr
  • 8d598ca 🐛 m_name_mapping/m_entity_mapping are no longer populated anywhere (the writes lived in the removed getInstance), s
    o the log at xdyn_websocket.cpp:204 prints an empty name and both maps are dead.
  • 59a6f86 📝 Typo update
  • fd071d6 📝 Added AI genereated documentation
  • 9b73d81 🚚 Used dtmb file instead of commando
  • 0c29c65 ❇️ Added a DAE model from dtmb centered on CDG in an ENU frame
  • 226e669 🔧 Fixed renaming
  • 1b02eb0 🔧 Put back string sdf_file so that it compiles
  • ac9f233 🔧 Fixed typo
  • 2c4d7e7 Updated .vscode/settings.json
  • f7aaed5 Added sonar-project.properties
  • 82da8df Updated examples
  • aeb1137 Updated launch scripts
  • b74babe Added systems/power_subsystem/
  • b145cb4 Added systems/sensors/radar_sensor
  • 12e3cfe Removed optional sdf_file
  • f80bb89 Added new assets folder
  • 65cbf3b Updated assets folder
  • 76ca911 Introduced docker folder
  • 048c2cb Refactored systems/sensors
  • e7115c6 Refactored latlon/XYZ projection
  • 43ab6b9 Refactored acceleration in systems/sensors/imu_sensor/src/imu_sensor.cpp
  • be65cd3 Refactored systems/physics_engine_interface
  • 989703f Introduced interfaces/lotusim_msgs/srv/String.srv
  • af9c973 Introduced CONTRIBUTING.md
  • 2eea90a Introduced CODE_OF_CONDUCT.md & GOVERNANCE.md
  • 0b74d20 Introduced LOTUSim Multi Agent System
  • 4394416 Refactored waypoint follower
  • b4f9a9c (tag: v0.1.0, origin/main, origin/HEAD, main) Update README (Update README #26)
  • d16e92d Feature(masCmd): add sdf_file parameter and update SDF loading logic (Feature(masCmd): add sdf_file parameter and update SDF loading logic #8)
  • e17eee4 Feature: add selectable guidance_mode (PID or bang_bang) for waypointFollower. (Feature: add selectable guidance_mode (PID or bang_bang) for waypointFollower #7)
  • feb3531 Fix on docker env path and email address (Fix on docker env path #6)
  • 0ecf7f2 Bug fix for ROS node initialisation in waypoint follower (Bug fix for ROS node initialisation in waypoint follower #4)
  • 8578464 Feature: Auto complete function for lotusim command (Feature: Auto complete function for lotusim command #3)
  • db14ef7 Support for ubuntu 24 and git workflow
  • 60ca327 Update CONTRIBUTING.md
  • ee74761 Merge branch 'features/init-release' into 'main'
  • 07107d7 Release November 2025.
  • 2fc538c [docs] upload picture
  • f53266e Initialize README.md
  • f5b4f9c Create LICENSE

@Gjacquenot

Copy link
Copy Markdown
Collaborator Author

Once tags alpha are merged into main, one can delete branches

  • feat/sonarcloud-ci
  • fix/ned-enu-attitude-body-swap
  • integrate_naval_group_work
  • integrate_naval_group_work_suite1
  • new_main
  • revert_removal_entity_manager

@Gjacquenot

Copy link
Copy Markdown
Collaborator Author

Ok, I am ready to merge. (@grossetjuliette , @malcom-neo , @cmoron, @echauvea, @estherRay )

@julienprodhon

Copy link
Copy Markdown
Contributor

Hi, thank you.
We need to check everything first, please wait.

@Gjacquenot

Copy link
Copy Markdown
Collaborator Author

Hi, thank you. We need to check everything first, please wait.

There is no need to hurry. Let me know if you need me to check some additional verifications.

@cmoron

cmoron commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Thanks @Gjacquenot for the careful reintegration! I have verified integrate_naval_group_work_suite1 on my side: the final tree of systems/physics_engine_interface is identical to the previous new_main state — all fixes are back (control-surface seeding, absolute sim time to xdyn, NED↔ENU body-frame swap, quaternion j/k mapping, interface-type guard), along with the gtest suite, frames_check.py, AGENTS.md and the SonarCloud CI. LGTM.

I will rebase #47 (--assets-path) onto main once this is merged.

@cmoron

cmoron commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Some perspective from the external-contributor seat, to help size how long to hold this.

Checking before touching main is legitimate, and the v0.1.1_alpha* tags @Gjacquenot created exist precisely so risk can be staged. But the current in-between state has a real cost outside the org: main still reflects the initial open-source drop while the de-facto base has lived on side branches for months. That base has already moved three times (new_main, then integrate_naval_group_work, then _suite1, with history rewritten each time). Four of our merged fixes were temporarily undone and re-imported along the way. #47 has been waiting since July for a main it can actually target, and the working branches are all scheduled for deletion after the merge. Every additional week in this state means more drift and re-verification work for everyone maintaining forks.

A concrete proposal, @julienprodhon: could you share the list of checks your team needs, and against which tag, so they can run in parallel rather than serially? @Gjacquenot already offered to run additional verifications, and I am happy to help too. On my side I have already verified that the suite1 tree is functionally identical to the previous new_main state. If nothing surfaces, would merging by the end of next week work? A timeboxed veto beats an open-ended wait.

One related ask, to make constraints like this checkable by contributors: entity_manager was removed as superseded by lotusim_mas, then restored (#43/#44) because it "is used by other project", quoting the title of #43, which is the entire justification on record: the issue has no description and the project is never named. Today nothing in the tree references it, nor does the public LOTUSim-generic-scenario. External contributors cannot see internal consumers: if downstream projects and the interfaces they pin were listed (a short section in CONTRIBUTING would do), we could verify compatibility ourselves instead of everyone having to be conservative by default. Happy to open a dedicated issue to track both points.

@julienprodhon

Copy link
Copy Markdown
Contributor

@cmoron Please stop posting AI-generated comments, it makes the discussion thread unnecessarily noisy.

We know what to do, but it requires some time, and we have other things in parallel.
We have a few manual checks to do on our side first, to confirm there's no user impact. We'll post an update here once those are done.

The issues you opened are useful but lower urgency for us at the moment, so they'll sit for a bit before we get to them. Appreciate your patience on timing, thank you.

@cmoron

cmoron commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Reviewed and approved by a human before posting, promise. Looking forward to your update.

@estherRay

Copy link
Copy Markdown

Hi everyone, thanks for your work :)
I am currently testing this PR and facing a few issues. Will get back to you when it's solved.

As @julienprodhon mentioned, let's get this new release sorted and we can fix bugs in following PR

Issue: launching an example then stopping lotusim left it stuck, unable to exit. demo.py also threw rclpy error.
Example fix: they now guards rclpy.shutdown
LOTUSim fix: EntityManager and ROS2Interface were missing deconstructors
DTMB mesh fix: the new .dae file was corrupted (duplicate offset=0 inputs in its polylist), crashing gazebo's mesh loader whenever a dtmb vessel was spawned. Re-converted the mesh from source stl via assimp and removed the wrong NORMAL input.
LOTUSim now shuts down correctly

Signed-off-by: estherRay <newsther@yahoo.com>
@estherRay
estherRay force-pushed the integrate_naval_group_work branch from 46e8394 to 4c80e3f Compare August 6, 2026 02:56
@estherRay

Copy link
Copy Markdown

Hello,
When I tested this PR, I ran into shutdown hang: after launching an example and stopping it, LOTUSim would get stuck and leave 'gz sim' running. There was 2 issues:

  1. Missing executor cleanup: EntityManager & ROS2Interface weren't cancelling/joining their ROS2 exec threads on shutdown. Also made sure ROS2Interface/XdynWebsocket get cleaned up right when the plugin shuts down
  2. Corrupted DTMB mesh: dtmb_cdg_enu.dae was malformed which crashed gazebo's mesh loader whenever a dtmb vessel was spawned. I re-exported the mesh from the stl via assimp and removed the bad input

also fixed a minor rclpy.shutdown error in the .py examples on CTRL+C

Shutdown is now clean everytime. Tested with: launch lotusim -> spawn different vessels including dtmb via the examples -> stop example + lotusim

@estherRay
estherRay force-pushed the integrate_naval_group_work branch from a877d67 to ea56695 Compare August 6, 2026 05:46
…am inside its sdf file

Signed-off-by: estherRay <newsther@yahoo.com>
@estherRay
estherRay force-pushed the integrate_naval_group_work branch from ea56695 to c387181 Compare August 6, 2026 06:16
@estherRay

Copy link
Copy Markdown

The example spawn_ships.py and .cpp were not connecting properly with the WaypointFollower. I removed a wrong param from the DTMB file. It's now working

I am done with the review of this PR

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.

4 participants