This PR improves the link level buoyancy calculation by ensuring that the wave field is only sampled when links (or their contained collision meshes) are enabled by the hydrodynamics plugin.
Other changes
Use fully scoped link and collision names in logging messages
Tests
Run the graded_buoyancy_waves.sdf world and check messages:
% gz sim -v4 -s graded_buoyancy_waves.sdf
...
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [lighter_than_water::ball::body]
[Msg] Hydrodynamics: including collision [lighter_than_water::ball::body::body_collision]
[Msg] Type: SPHERE
[Msg] Radius: 0.2
[Msg] MeshName: ball.body.body_collision.sphere
[Msg] Vertex: 81
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [lighter_than_water::ball::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: 0 0 0 0 0 0
[Msg] Hydrodynamics: link world CoM pose: 0 0 0 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [lighter_than_water::box::body]
[Msg] Hydrodynamics: including collision [lighter_than_water::box::body::body_collision]
[Msg] Type: BOX
[Msg] Size: 1 1 1
[Msg] MeshName: box.body.body_collision.box
[Msg] Vertex: 24
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [lighter_than_water::box::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: 3 3 0 0.3 0.2 0.1
[Msg] Hydrodynamics: link world CoM pose: 3 3 0 0.3 0.2 0.1
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [balloon_lighter_than_air::body]
[Msg] Hydrodynamics: including collision [balloon_lighter_than_air::body::body_collision]
[Msg] Type: SPHERE
[Msg] Radius: 0.2
[Msg] MeshName: balloon_lighter_than_air.body.body_collision.sphere
[Msg] Vertex: 81
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [balloon_lighter_than_air::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: 0 -3 -0.1 0 0 0
[Msg] Hydrodynamics: link world CoM pose: 0 -3 -0.1 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [box_neutral_buoyancy::body]
[Msg] Hydrodynamics: including collision [box_neutral_buoyancy::body::body_collision]
[Msg] Type: BOX
[Msg] Size: 1 1 1
[Msg] MeshName: box_neutral_buoyancy.body.body_collision.box
[Msg] Vertex: 24
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [box_neutral_buoyancy::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: 0 3 -3 0 0 0
[Msg] Hydrodynamics: link world CoM pose: 0 3 -3.1 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [box_neutral_buoyancy_collision_offset::body]
[Msg] Hydrodynamics: including collision [box_neutral_buoyancy_collision_offset::body::buoyancy_volume]
[Msg] Type: BOX
[Msg] Size: 1 1 1
[Msg] MeshName: box_neutral_buoyancy_collision_offset.body.buoyancy_volume.box
[Msg] Vertex: 24
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [box_neutral_buoyancy_collision_offset::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: -3 3 2 0 0 0
[Msg] Hydrodynamics: link world CoM pose: -3 3 -3.1 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [multi_collision_neutral_buoyancy::body]
[Msg] Hydrodynamics: skipping collision [multi_collision_neutral_buoyancy::body::collision_1]
[Msg] Hydrodynamics: including collision [multi_collision_neutral_buoyancy::body::collision_2]
[Msg] Type: BOX
[Msg] Size: 1 1 0.5
[Msg] MeshName: multi_collision_neutral_buoyancy.body.collision_2.box
[Msg] Vertex: 24
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [multi_collision_neutral_buoyancy::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: 3 3 -3 0 0 0
[Msg] Hydrodynamics: link world CoM pose: 3 3 -3.1 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
[Msg] Hydrodynamics: initialise physics
[Msg] Hydrodynamics: checking collision meshes for link [box_negative_buoyancy::body]
[Msg] Hydrodynamics: including collision [box_negative_buoyancy::body::body_collision]
[Msg] Type: BOX
[Msg] Size: 1 1 1
[Msg] MeshName: box_negative_buoyancy.body.body_collision.box
[Msg] Vertex: 24
[Msg] Hydrodynamics: links: 1, meshes: 1, collisions: 1
[Msg] Hydrodynamics: initialising link [box_negative_buoyancy::body]
[Msg] Hydrodynamics: link has [1] collision meshes
[Msg] Hydrodynamics: link world pose: -3 -3 0 0 0 0
[Msg] Hydrodynamics: link world CoM pose: -3 -3 -0.1 0 0 0
[Msg] Hydrodynamics: set water patch size: 20
[Msg] Hydrodynamics: done initialise physics
Application
Run MBARI wave buoy simulation at RTF > 1 by restricting the buoyancy forces to the main buoy link.
This PR improves the link level buoyancy calculation by ensuring that the wave field is only sampled when links (or their contained collision meshes) are enabled by the hydrodynamics plugin.
Other changes
Tests
Run the
graded_buoyancy_waves.sdf
world and check messages:Application
Run MBARI wave buoy simulation at RTF > 1 by restricting the buoyancy forces to the main buoy link.
https://user-images.githubusercontent.com/24916364/188275612-7e029cc6-cb30-44ad-b26d-052072916c2f.mov