Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Wave Body MBARI: add MBARI buoy example for testing #76

Merged

Conversation

srmainwaring
Copy link
Owner

Add test model for the MBARI WEC buoy (float only).

This is a simplified version of the MBARI WEC buoy model from osrf/buoy_sim which only includes the float. The model sets the link origin at the buoy's water plane instead of the bridle attachment point as this means the BEM coefficients can be used without transformation.

BEM coefficients are from osrf/buoy_sim and have been saved to WEC-Sim HDF5 file format for use in the model.

The example highlights that there are still some issues to resolve in the linear-wave-body model. The simulation for regular waves T=6.0s, H=2m becomes unstable after approx. 50s. The breakdown appears to coincide with yaw drift, but needs to be confirmed/resolved.

Figure 1. MBARI buoy in Gazebo with regular waves.

lwb_mbari_gz

Figure 2. Forces, positions and velocities up to 30s.

lwb_mbari_plt_1

Figure 2. Forces, positions and velocities up to 60s. Instabilities set in as yaw drifts.

lwb_mbari_plt_2

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>
@srmainwaring srmainwaring merged commit f32302e into demo/linear-wave-body Oct 11, 2022
@srmainwaring srmainwaring deleted the srmainwaring/demo/lwb-mbari-buoy branch October 11, 2022 10:56
srmainwaring added a commit that referenced this pull request Nov 25, 2022
- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Nov 30, 2022
- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 5, 2022
- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 6, 2022
- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 8, 2022
Linear potential wave-body model demo (#70)

* Wave Body: Add linear potential wave-body model

Ellipsoid Buoy: add model for an ellipsoid buoy

- Add test model for hydrodynamics models.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: update linear wave-body interaction model

- add contributions to moments from hydrostatic equilibrium term (centre of buoyancy).

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: update linear wave-body interaction model

- update comments and disable debug output

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: update models for testing linear wave-body interaction model

- set wave amplitudes to zero and compare the two hydrostatic models

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: use loaded hydro data in calculations

- Clean up.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: document the hydrostatics calculation

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: use waterplane origin as reference point for displacements

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: add force control parameters to ellipsoid example

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave-Body:

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

Signed-off-by: Rhys Mainwaring <[email protected]>

Fluid added mass: update added mass example

- Clean and symmetrise matrix

Signed-off-by: Rhys Mainwaring <[email protected]>

Fluid added mass: add code to symmetrise added mass (disabled)

Signed-off-by: Rhys Mainwaring <[email protected]>

Fluid added mass: add flags for additional debug info

Signed-off-by: Rhys Mainwaring <[email protected]>

Fluid added mass: cleanup

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: update example model and add notes

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: use waves test model

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: add world for ellipsoid test case

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

Signed-off-by: Rhys Mainwaring <[email protected]>

* ROS: add a project to publish gazebo messages to ros2

Signed-off-by: Rhys Mainwaring <[email protected]>

ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

Signed-off-by: Rhys Mainwaring <[email protected]>

ROS: update README

Signed-off-by: Rhys Mainwaring <[email protected]>

ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

Update example regular wave models (#73)

* Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: add checks when reading the hdf5 file (#74)

* Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body MBARI: add collision mesh and change default BEM file (#77)

* Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

Merge (#80) into demo/linear-wave-body  (#81)

* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update regular wave model descriptions

Signed-off-by: Rhys Mainwaring <[email protected]>

Merge branch 'master' into demo/linear-wave-body (#83)

* Waves: enable wave direction in the sinusoid wave model (#80)

* Waves: enable wave direction in the sinusoid wave model

- Allow wave direction to be set for regular waves.
- Add test for a wave direction not parallel to the x-axis

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: rename monochromatic_waves model

- Rename to regular waves.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves simulation optimisation - part 1 (#82)

* Waves: add classes for spreading functions

- Add classes for directional spreading functions.
- Add vectorised calculations using Eigen.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update classes for spreading functions

- Update classes for directional spreading functions - use Eigen::MatrixXd rather than VectorXd.
- Update tests including broadcasting to arrays.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add classes for omni-directional spectrum functions

- Add classes for omni-directional wave spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u19 = 0)

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update classes for omni-directional spectrum functions

- Implement ECVK omni-directional spectra.
- Add test case for vectorised spectrum calculation using Eigen.
- Add regression test and check limits (k = 0, u10 = 0)

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add regression tests for spectra.

- Add regression test against spectrum calculation used in  FFT2.
- Make spectrum functions in FFT2 static.
- Add ECKV spectrum tests.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: fix spreading function test.

- Fix segfault caused by missing arg.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove unused wave simulation classes

- Remove FFTW and OpenCL simulation classes.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: reset test values after physical constant updates.

- Update buoyancy regression values after fluid density and gravity value update.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: fix failing static test in gz_waves_bridge

- Disable flake8 and fix docstring.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: replace std::vector with Eigen in WaveSimulation

- Migration from std::vector to Eigen::VectorXf. Not efficient as involved heap allocation each update.
- Replace std::vector for interface calls in OceanTile.
- Remove unused code from WaveSpectrum.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: fixes post cherry-pick

- Revert interface change in WaveSimulation.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove interface using std::vector<double> from WaveSimulation classes.
- Update waves plugin classes to use new interfaces.
- Update test

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: replace std::vector with Eigen in WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.
- Update tests

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: replace std::vector with Eigen in FFT WaveSimulation

- Remove internal interface using std::vector<double> from WaveSimulation classes.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: correct typos in derivative calculations for sinusoid and
trochoid waves

- Ensure Eigen vector workspace is initialised in WavesVisual.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: visual lighting workaround

- Tangent space calculation not correct - environment mapping looks incorrect unless dhdx <---> dhdx?

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update sinusoid wave interface

- Allow x and y to be set independently in wave grid.
- Streamline class declarations.
- Update tests.
- Add vectorise option for sinusoid waves.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove unused functions.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add tests for vectorised sinusoid wave sim

- Cross check vectorised code against non-vectorised version.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove unused include from WaveSimulationSinusoid

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: refactor WaveSimulation method names.

- Rename ComputeHeights to ComputeElevation.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: refactor update indentation formatting.

- Add vectorisation method to FFT wave simulation.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: refactor update member variable names in FFT wave simulation

- Standardise caps convention for naming member variables (using underscores).
- Update interface to allow different nx and ny for grid.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: temp workaround for wave derivatives used in lighting tangent space

- Workaround mixed conventions for matrix-ij vs matrix-xy storage in tangent space calcs.

Signed-off-by: Rhys Mainwaring <[email protected]>

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves simulation optimisation - part 2 (#84)

* Waves: update FFT wave simulation tests for non-square grids (nx != ny)

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: apply google coding standards

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update FFT test namesWaves

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: preparation for vectorising FFT wave simulation update

- Add placeholders for vectorised versions of functions
- Replace hardcoded gravity constants with params.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: preparation for vectorising FFT wave simulation update

- Add cross-check tests for vectorised versions of base and current amplitude calculations.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: progress vectorising FFT wave simulation update

- Change capitalisation of Cos2sSpreadingFunction.
- Update comments in WaveSpectrum.
- WaveSimulationFFT
 	- Consolidate initialisation code.
	- Update variable names (nyquist)
	- Delay allocation of storage for Eigen member variables.
	- Update tests to use nearest for cross checks on vectorised version.
	- Remove use of auto for Eigen references (use Eigen::Ref instead)
	- Factor out wavenumber initialisation.
	- Partial vectorisation.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: vectorise base amplitude calc for FFT wave simulation

- Leave initialisation of IID random normals un-vectorised for testing against original versions.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add unit test for Eigen and FFTW

- Add test skeleton.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add unit test for Eigen and FFTW

- Add examples using different storage choices.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add unit test for Eigen and FFTW

- Add examples for row vs column major storage.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add Eigen alignment macro

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use Eigen types for FFTW storage - reduce copies

- Use Eigen types instead of fftw_complex* for FFT workspace.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove unused code from FFWT wave simulation

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Intermediate step moving from Eigen::VectorXcd to Eigen::MatrixXcdRowMajor.
- FFTW requires row-major ordering, Eigen is column major by default.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use row-major Eigen matrix storage for FFT wave simulation

- Change to matrix indexing in FFT wave storage (from a single column).

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update output mapping from row to col major storage in FFT wave simulation

- Replace loops with vector calls using reshaped to flatten.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Set up CI using GitHub Actions (#85)

- CI: remove travis integration
- Add codeowners and gazebo ci.yml
- Minimal version - checkout only.
- Change checkout actions/checkout@v3
- Add CI workflows for ubuntu and macos
- Rename and split macOS into separate workflow.
- Install Gazebo Garden.
- Test caching
- Add brew install script.
- Add build script.
- Update macos-ci
- Add test step.
- Add GitHub Actions status badge, remove travis badges.
- Update ci install scripts
- Update the brew installation script to force relinking on all dependencies of the installed packages.
- Fix relink step.
- Update ubunti-ci workflow.
- Add install, build and test steps.
- Rename macos scripts.
- Update ubunti-ci workflow.
- Install additional build dependencies.
- Update ubunti-ci workflow.
- Fix colcon build command line.
- Move macOS to colcon build.
- Update workflow for ubuntu 20.04
- Ensure cgal etc are linked as well as deps.
- Split Ubuntu jobs to separate workflow
- Update macos workflow - add build tools
- Fix EigenFFTW breaking on Ubuntu.
- Update macos workflow - reenable build and test
- Fix timer in CGAL test and disable triangulation tests failing on Ubuntu.
- Fix errors in WaveSimulationFFT2 tests and set tolerances for variance comparisons.
- Check colcon install on macOS workflow
- Disable trochoid wave test
- Investigate why colcon not found in macOS CI workflow
- Add workflow to check build tools are installed.
- Use pip3
- Use full path to colcon
- Add pip install checks
- Update path to Python scripts
- Update path to Python scripts
- Pip install colcon and vcstool with --user flag

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves simulation optimisation - part 3 (#87)

* Waves: optimise current amplitude calculation for FFT wave simulation

- Investigate optimisation options for the current amplitude calculation.
- vectorised assignment to fft worlspace is not faster than a single loop.
- pre-calculate the fourier amplitude coefficients (reduce index lookup) - marginal gain?

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: label indices in ocean tile to distinguish between vertex indices and wave indices

- Vertex array index: v_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_cm: v - vertex, cm - column major
- Wave array index: w_idx_rm: v - vertex, rm - row major

Signed-off-by: Rhys Mainwaring <[email protected]>

* CI: only run macOS workflow on PR

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: rename FFT wave simulation class

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: duplicate FFT wave simulation class to factor out reference version

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: duplicate FFT wave simulation class to factor out reference version

- Complete split of reference implementation into separate class.
- Remove unused code from the separated FFT wave simulation classes.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove commented code

- Remove code referring to reference versions of the spectrum calculations.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add performance checks for spectrum and FFT amplitude calculations

- Initial performance tests. Contain debugging and timing info.
- Eigen component-wise array versions are not performant...

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: replace slow array versions of spectrum calcs.

- Eigen component-wise array versions are not performant - replace with calls using std::transform on unary / binary versions.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: refactor wave simulation and spectrum test names

- Functions are not truly vectorised - use Eigen array type to label tests instead.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: satisfy Eigen check that range iterators in STL algorithms are from the same expression.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves simulation optimisation - part 4 (#88)

* Waves: restructure wave spectrum performance test for instrumenting

- Move initialisation into test fixture

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove c-wise amplitude update

- Remove inefficient component wise amplitude update and associated data.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove c-wise cos / sin update in current amplitude calc

- Remove inefficient component wise amplitude update.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: restructure FFT wave amplitude performance test for instrumenting

- Move initialisation into test fixture.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: update FFT wave simulation

- Consolidate storage (shape depends whether loop is flattened or not).
-  Make test fixture class names consistent.
- Remove array allocation in current amplitude update

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use previously calculated wave numbers

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove two loops from FFT base amplitude calculation

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove component-wise array amplitude calculations

- Abandon using c-wise amplitude calculations as the loop based update has better performance.
- Remove unnecessary storage from the FFT class to reduce memory footprint.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: remove WaveSimulationFFTRef from public interface

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: add performance checks for elevation and displacement calculations

- Add performance check for main update loop - elevations, displacements and derivatives.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves simulation optimisation - part 5 (#89)

* Waves: update FFTW check

- Modify check to transform hermitian amplitudes back to real values.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: create FFTW plans before initialising arrays

- FFTW may overwrite data in arrays while planning. Allocate, plan, initialise.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use complex to real version of FFTW

- Change outputs to real arrays.
- Change size of input complex arrays to nx * ny/2+1
- Output in Compute* functions is now real.
- Add example in the Eigen FFTW test using a c2r plan.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use complex to real version of FFTW

- Flattened index must be calculated as loops do not cover full range.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: use complex to real version of FFTW

- Disable hermitian tests for optimised FFT wave sim (arrays truncated using symmetry)

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: temp disable tests broken because of switch to real DFT

The following tests require further review - restructuring
- ParsevalsIdentityTimeZero
- ParsevalsIdentityTimeNonZero
- Displacement

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: additional Hermitian tests

- Add placeholder tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Waves: fix Hermitian symmetry for derivatives (#90)

- Correct Nyquist term in derivative amplitudes (must be zero).
- Enable tests to check derivative and displacement amplitudes are Hermitian.

Signed-off-by: Rhys Mainwaring <[email protected]>

* CI: clean build warnings (#91)

* CI: enable all warnings and enforce as errors

- Clean build of all warnings.
- Disable unused variables from tests (primarily present for printing info).
- Comment unused parameters in function sigs.
- Fix int type comparison warnings in loops.
- Fix initialisation order errors in constructors.

Signed-off-by: Rhys Mainwaring <[email protected]>

* CI: enable all warnings and enforce as errors

- Remove GZ_ASSERT raising a warning on Ubuntu

Signed-off-by: Rhys Mainwaring <[email protected]>

* CI: enable all warnings and enforce as errors

- Renaming shadowing variables.

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: update ci workflow

- Add build flag for HighFive dependency

Signed-off-by: Rhys Mainwaring <[email protected]>

* Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

Signed-off-by: Rhys Mainwaring <[email protected]>

Wave Body: post rebase fixes.

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 8, 2022
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 9, 2022
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 9, 2022
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Dec 9, 2022
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 15, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 18, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 20, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 20, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 21, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 21, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 24, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 26, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
srmainwaring added a commit that referenced this pull request Jan 26, 2023
This is squashed history of the linear potential wave-body model.

1. Linear potential wave-body model demo (#70)

1.1. Wave Body: Add linear potential wave-body model

- Add model for an ellipsoid buoy
- Add test model for hydrodynamics models.

1.2. Wave-Body: add plugin for testing linear wave-body interaction models

- Initial version of plugin with hydrostatic restoring forces.

1.3. Wave-Body: update linear wave-body interaction model

- Add contributions to moments from hydrostatic equilibrium term (centre
of buoyancy).

1.4. Wave-Body: update linear wave-body interaction model

- Update comments and disable debug output

1.5. Wave-Body: update models for testing linear wave-body interaction model

- Set wave amplitudes to zero and compare the two hydrostatic models

1.6. Wave-Body: add hydro data file and load into plugin

- Add BEM hydro data .hdf5 file for ellipsoid (generated by capytaine / bemio)
- Add dependency on Eigen. HDF5 and HighFive to read data file (HighFive should be cloned into to workspace)

1.7. Wave-Body: use loaded hydro data in calculations

- Store loaded hydro data in a struct and replace hardcoded data.

1.8. Wave-Body: use loaded hydro data in calculations

- Clean up.

1.9. Wave-Body: load remaining hydro data

- Complete loading of all hydro data (except for state space model data)
- Load routines can be factored out and consolidated (2nd pass)

1.10. Wave-Body: split update into contributions by force type

- Split out hydrostatic force calculation.

1.11. Wave-Body: add parameter for hydro data file

- Add parameter <hydrodata> for specifying HDF5 file.
- Move model specific config under model folder.

1.12. Wave-Body: document the hydrostatics calculation

1.13. Wave-Body: use waterplane origin as reference point for displacements

1.14. Wave-Body: add radiation damping test case

- Update variable labelling for pose and vectors
- Add radiation damping test case example (hardcoded)

1.15. Wave-Body: add parameters to control which forces are calculated

- Add flags to control which force contributions are included
- Format hdf5 file reader
- Make hydrostatics forces switchable

1.16. Wave-Body: add force control parameters to ellipsoid example

1.17. Wave-Body: initial version of radiation added mass force

- Reorganise code to enable switching forces on / off
- Outline added mass calculation

1.18. Wave-Body: updated version of radiation added mass force

- Investigate a couple of methods - both approaches to capture acceleration in the force contribution are unstable.
- Alternative methods is to use the SetFluidAddedMass method of the inertial.
- This can be set on the component attached to the link entity in the plugin config, and this appears to propagate to the physics engine.

1.19. Wave-Body: replace hardcoded added mass override with parameters

- Allow the added mass and radiation damping to be set in parameters
- Remove added mass calculation from update and set inertial in config
- Add example parameters to demo world

1.20. Wave-Body: replace hardcoded radiation damping override with parameters

- Allow the radiation damping to be set in parameters

1.21. Wave-Body: add gravity calculation

- Add aliases for Vector6d and Matrix6d
- Add gravity calculation to use instead of global physics engine gravity
- Required when enabling added mass
- Update added mass calculation to use gazebosim/gz-physics#384

1.22. Fluid added mass: update added mass example

- Clean and symmetrise matrix

1.23. Fluid added mass: add code to symmetrise added mass (disabled)

1.24. Fluid added mass: add flags for additional debug info

1.25. Fluid added mass: cleanup

1.26. Wave Excitation: add parameters for constant coefficient overrides

- Add parameters for storing wave excitation force coefficients
- Add template specialisation to read Eigen::Vector6d
- Add example data to sdf model
- Remove stale code for added mass adjustments from class declaration

1.27. Wave Excitation: implement excitation force for regular waves

- Add overrides for wave period, height and phase
- Update documentation describing added mass calculation
- Implement constant coefficient excitation calculation for regular waves
- Update wave model to used trochoids with steepness = 0 (direction not implemented for sinusoids)
- Rename elements for wave excitation force components

1.28. Wave Excitation: correct buoyancy moment calculation

- Correct the buoyancy moment calculation for larger displacements.
- Add missing parameter read for the flag to enable / disable the excitation force

1.29. Wave Excitation: implement excitation Froude-Krylov and scattering force components

- Add example coefficients for excitation Froude-Krylove and scattering components.
- Read parameters in Config.
- Implement force calculations for new components.
- Initialise vectors and matrices to zero.

1.30. Wave Excitation: rename variables using Kane/monogram notation

- Rename pose, vectors using Kane/monogram notation described in the Drake docs.
- Fix gravity calculation.
- Factor out common link state updates.

1.31. Wave Body: update example model and add notes

1.32. Wave Body: add force publishers

- Publish force and torque if enabled
- Add parameters to enable force publishing
- Update launch script to enable ROS bridge for forces

1.33. Wave Body: configure buoy example to use all forces

- Set initial position to origin for linear potential model example
- Update document with references

1.34. Wave Body: refactor flags and publishers

- Group flags into structs to reduce clutter.
- Move debug flags into their own SDF element.

1.35. Wave Body: refactor hydro coefficient overrides

- Group coefficients into structs to reduce clutter.
- Reorganise hydro coefficient elements in SDF.
- Move waves and sim environment params into separate structs.
- Add override for hydrostatic linear restoring.

1.36. Wave Body: add geometry overrides

- Add section for geometry overrides.
- Rename the initial pose the body waterplane.

1.37. Wave Body Tests: add wave models for test cases

- Add regular wave models with different periods and amplitudes.

1.38. Wave Body: fix geometry overrides

- Fix issue with parsing SDF and ensure SDF example valid.

1.39. Wave Body: use waves test model

1.40. Wave Body: revert waves.sdf to original

- Move ellipsoid test to new world file.

1.41. Wave Body: add world for ellipsoid test case

1.42. Wave Body Tests: add spheroid test case

- Add spheroid for added mass Test1a

1.42. Wave Body Tests: update spheroid test case

- Add ROS launch file for tests.
- Update BEM coeffs from WEC-Sim example

1.43. Wave Body: improve overrides - 1

- Rename hydro coefficient class.
- Handle override for hydrostatic restoring.

1.44. Wave Body: improve overrides - 2

- Move HDF5 reader to separate function.

1.45. Wave Excitation: fix error in torque calculation

- Fix indexing error in torque lookup.
- Shorten spatial force names.

1.46. Wave Body Hydrostatics: update treatment of CoB offset from CoM

- Use the initial offset of the CoB from CoM in updates - tricky as CoB is dynamic but linear model appears to rely on this being at initial position.

1.47 Wave Body: improve overrides - 3

- Refactor duplicated code in array read functions.

1.48. Wave Body: improve overrides - 4

- Refactor SDF element names.
- Change <hydrodata> to <hdf5_file> as the element is a file name.
- Move <waves> up a level.
- Change <environment> to <simulation_parameters>
- Shorten <force_publishers> to <publishers>

1.49. Wave Body: improve overrides - 5

- Add notes on model and WEC-Sim data structures and modelling.

1.50. Wave Body: improve overrides - 6

- Name refactoring - preparation for introducing new structs for data that will be used in updates.

1.51. Wave Body: improve overrides - 7

- Add improved handling of overrides.
- Remove all override decision making from update loops.
- Add separate data structure to contain the hydro force coefficients used in the update loop.
- Document the load and override policy.

1.52. ROS: add a project to publish gazebo messages to ros2

1.53. ROS: add node to publish body response labelled using maritime conventions

- Add body_response_publisher
- Update launch file

1.54. ROS: update README

1.55. ROS: correct topic name for excitation force

Signed-off-by: Rhys Mainwaring <[email protected]>

2. Wave Body: improve overrides - 8 (#71)

- Remove hardcoded frequency index used to lookup hydro coeffs from hdf5 data.
- Coefficients from hdf5 are linearly interpolated and scaled given the frequency in the simulation params.

Signed-off-by: Rhys Mainwaring <[email protected]>

3. Wave Body: use model:// URI to specify BEM file location (#72)

- Use model://<model_path_to_config> URI syntax to locate BEM data files.

Signed-off-by: Rhys Mainwaring <[email protected]>

4. Wave Body: Update example regular wave models (#73)

4.1  Wave Body: rename regular wave example models to refer to wave height rather than amplitude

- Use wave height in linear wave-body model SDF and in the names of the example regular wave models.

4.2  Wave Body: add extra regular wave models to cover spectrum

- Add low and high frequency examples.

4.3. Wave Body: reset wave model used by examples

- Set examples to use regular_waves_6s_2m model - this matches the override hydro coefficients.

Signed-off-by: Rhys Mainwaring <[email protected]>

5. Wave Body: add checks when reading the hdf5 file (#74)

5.1. Wave Body: add checks when reading the hdf5 file

- Check that datasets are present before loading.
- Check that data is not empty before attempting to display.

5.2. Wave Body: update comments to clarify scaled means non-dimensioned

Signed-off-by: Rhys Mainwaring <[email protected]>

6. Wave Body: add publisher for added mass force (#75)

- Add publisher for estimated added mass force.

Signed-off-by: Rhys Mainwaring <[email protected]>

7. Wave Body MBARI: add MBARI buoy example for testing (#76)

- Add test model for the MBARI WEC buoy (float only)

Signed-off-by: Rhys Mainwaring <[email protected]>

8. Wave Body MBARI: add collision mesh and change default BEM file (#77)

8.1. Wave Body MBARI: add collision mesh for buoy

- Add simplified collision meshes for the buoy at different levels of refinement.
- Use the mesh with 316 faces in the model.
- Add BEM file generated using Capytaine and the 5548 face mesh.

8.2. Wave Body MBARI: change default the BEM data file

- The excitation data in the hdf5 file generated from WAMIT data has the wrong sign, use Capytaine / bemio generated file in the meanwhile.
- Simplify ramp function.

Signed-off-by: Rhys Mainwaring <[email protected]>

9. Wave Body MBARI: fix ramp function missing bracket (#78)

Signed-off-by: Rhys Mainwaring <[email protected]>

10. Wave Body: don't use auto with Eigen (#79)

Signed-off-by: Rhys Mainwaring <[email protected]>

11. Wave Body: update cmake dependencies

- Use FetchContent to retrieve dependency HighFive.
- Fix typo in documentation.
- Remove cpp style header for mlinterp

11.1 Wave Body: update ci workflow

- Add build flag for HighFive dependency

11.2. Wave Body: update waves bridge tests

- Remove breaking tests inherited from ROS project template.

11.3.Wave Body: post rebase fixes.

11.4. Wave-Body: fix config of regular_waves_3s_1m

11.5. Wave-Body: revert changes to regular_waves model

Signed-off-by: Rhys Mainwaring <[email protected]>
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.

1 participant