Skip to content

Commit

Permalink
Maritime tutorials 💧 - Part 4 of 4 (#2260)
Browse files Browse the repository at this point in the history
* Adding a maritime surface vehicle tutorial.
---------

Signed-off-by: Carlos Agüero <[email protected]>
Co-authored-by: Alejandro Hernández Cordero <[email protected]>
Co-authored-by: crvogt <[email protected]>
Co-authored-by: Ian Chen <[email protected]>
  • Loading branch information
4 people authored Dec 23, 2023
1 parent beada29 commit 8f84b05
Show file tree
Hide file tree
Showing 42 changed files with 388,808 additions and 39 deletions.
5 changes: 4 additions & 1 deletion tutorials.md.in
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,10 @@ for your model.
* \subpage adding_system_plugins "Adding system plugins:" How to add plugins to
your model to provide extra capabilities to it.
* \subpage lander "Create a lander vehicle:" How to create a lander robot.
* \subpage underwater_vehicles "Create an underwater vehicle:" How to create an underwater robot.
* \subpage underwater_vehicles "Create an underwater vehicle:" How to create an
underwater robot.
* \subpage surface_vehicles "Create a surface vehicle:" How to create a maritime
surface robot.

## License

Expand Down
2 changes: 1 addition & 1 deletion tutorials/adding_system_plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ gz sim -r ~/gazebo_maritime/worlds/buoyant_turtle.sdf
```

Now, when our simple trajectory controller reaches its target and stops appling
force, the turtle stops moving acting like the fluid decelerates its motion.
force, the turtle stops moving acting like the fluid decelerates its motion.
Additionally you can notice how the up and down oscillations are also damped by
the effect of the hydrodynamics.

Expand Down
2 changes: 1 addition & 1 deletion tutorials/adding_visuals.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ mesh to our turtle, making it look much better.
https://gazebosim.org/api/sim/8/meshtofuel.html

The next tutorials, although still relevant, are from an older version of Gazebo
and some details might be different than the current versions:
and some details might be different than the current versions:

https://classic.gazebosim.org/tutorials?tut=import_mesh&cat=build_robot
https://classic.gazebosim.org/tutorials?cat=guided_i&tut=guided_i2
Expand Down
10 changes: 5 additions & 5 deletions tutorials/files/adding_system_plugins/buoyant_turtle.sdf
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<grid>false</grid>
</scene>

<light type="directional" name="sun">
<cast_shadows>true</cast_shadows>
<pose>0 0 10 0 0 0</pose>
Expand All @@ -27,7 +27,7 @@
filename="gz-sim-physics-system"
name="gz::sim::systems::Physics">
</plugin>

<plugin
filename="gz-sim-buoyancy-system"
name="gz::sim::systems::Buoyancy">
Expand All @@ -44,17 +44,17 @@
filename="gz-sim-user-commands-system"
name="gz::sim::systems::UserCommands">
</plugin>

<plugin
filename="gz-sim-scene-broadcaster-system"
name="gz::sim::systems::SceneBroadcaster">
</plugin>

<plugin
filename="gz-sim-sensors-system"
name="gz::sim::systems::Sensors">
</plugin>

<gui fullscreen="0">
<!-- 3D scene -->
<plugin filename="MinimalScene" name="3D View">
Expand Down
10 changes: 5 additions & 5 deletions tutorials/files/lander/buoyant_lander.sdf
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<ambient>0.0 1.0 1.0</ambient>
<grid>false</grid>
</scene>

<light type="directional" name="sun">
<cast_shadows>true</cast_shadows>
<pose>0 0 10 0 0 0</pose>
Expand All @@ -25,7 +25,7 @@
filename="gz-sim-physics-system"
name="gz::sim::systems::Physics">
</plugin>

<plugin
filename="gz-sim-buoyancy-system"
name="gz::sim::systems::Buoyancy">
Expand All @@ -42,17 +42,17 @@
filename="gz-sim-user-commands-system"
name="gz::sim::systems::UserCommands">
</plugin>

<plugin
filename="gz-sim-scene-broadcaster-system"
name="gz::sim::systems::SceneBroadcaster">
</plugin>

<plugin
filename="gz-sim-sensors-system"
name="gz::sim::systems::Sensors">
</plugin>

<gui fullscreen="0">
<!-- 3D scene -->
<plugin filename="MinimalScene" name="3D View">
Expand Down
2 changes: 1 addition & 1 deletion tutorials/files/lander/inkfish-lander.dae
Original file line number Diff line number Diff line change
Expand Up @@ -336,4 +336,4 @@
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>
</COLLADA>
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
cmake_minimum_required(VERSION 3.10.2 FATAL_ERROR)

project(gazebo_maritime)

find_package(gz-sim8 REQUIRED)
set(GZ_SIM_VER ${gz-sim8_VERSION_MAJOR})
find_package(gz-common5 REQUIRED COMPONENTS graphics)
set(GZ_COMMON_VER ${gz-common5_VERSION_MAJOR})
find_package(gz-math7 REQUIRED)
set(GZ_MATH_VER ${gz-math7_VERSION_MAJOR})
find_package(gz-msgs10 REQUIRED)
set(GZ_MSGS_VER ${gz-msgs10_VERSION_MAJOR})
find_package(gz-transport13 REQUIRED)
set(GZ_TRANSPORT_VER ${gz-transport13_VERSION_MAJOR})
find_package(gz-plugin2 REQUIRED COMPONENTS loader register)
set(GZ_PLUGIN_VER ${gz-plugin2_VERSION_MAJOR})
find_package(gz-rendering8 REQUIRED)
set(GZ_RENDERING_VER ${gz-rendering8_VERSION_MAJOR})
find_package(gz-sensors8 REQUIRED)
set(GZ_SENSORS_VER ${gz-sensors8_VERSION_MAJOR})
find_package(gz-utils2 REQUIRED)
set(GZ_UTILS_VER ${gz-utils2_VERSION_MAJOR})
find_package(sdformat14 REQUIRED)
find_package(Eigen3 REQUIRED)

# Waves
add_library(Waves SHARED
src/Wavefield.cc
)
target_link_libraries(Waves PUBLIC
Eigen3::Eigen
gz-common${GZ_COMMON_VER}::gz-common${GZ_COMMON_VER}
gz-math${GZ_MATH_VER}
gz-msgs${GZ_MSGS_VER}::gz-msgs${GZ_MSGS_VER}
gz-sim${GZ_SIM_VER}::core
)
install(
TARGETS Waves
DESTINATION lib)

# Other plugins
list(APPEND MARITIME_GZ_PLUGINS
PublisherPlugin
Surface
WaveVisual
)

foreach(PLUGIN ${MARITIME_GZ_PLUGINS})
add_library(${PLUGIN} SHARED src/${PLUGIN}.cc)
target_link_libraries(${PLUGIN} PUBLIC
Eigen3::Eigen
gz-plugin${GZ_PLUGIN_VER}::gz-plugin${GZ_PLUGIN_VER}
gz-rendering${GZ_RENDERING_VER}::gz-rendering${GZ_RENDERING_VER}
gz-sensors${GZ_SENSORS_VER}::gz-sensors${GZ_SENSORS_VER}
gz-sim${GZ_SIM_VER}::core
gz-transport${GZ_TRANSPORT_VER}::gz-transport${GZ_TRANSPORT_VER}
gz-utils${GZ_UTILS_VER}::gz-utils${GZ_UTILS_VER}
Waves
)
endforeach()

install(
TARGETS ${MARITIME_GZ_PLUGINS}
DESTINATION lib)

#============================================================================
# Resources
install(DIRECTORY
models
worlds
DESTINATION share/${PROJECT_NAME})
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
// Copyright (c) 2016 The UUV Simulator Authors.
// All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

#version 330

////////// Input parameters //////////
// Textures
uniform sampler2D bumpMap;
uniform samplerCube cubeMap;

// Colors
uniform vec4 deepColor;
uniform vec4 shallowColor;
uniform float fresnelPower;
uniform float hdrMultiplier;

////////// Input computed in vertex shader //////////
in block
{
mat3 rotMatrix;
vec3 eyeVec;
vec2 bumpCoord;
} inPs;

out vec4 fragColor;

void main()
{
// Apply bump mapping to normal vector to make waves look more detailed:
vec4 bump = texture(bumpMap, inPs.bumpCoord)*2.0 - 1.0;
vec3 N = normalize(inPs.rotMatrix * bump.xyz);

// Reflected ray:
vec3 E = normalize(inPs.eyeVec);
vec3 R = reflect(E, N);

// negate z for use with the skybox texture that comes with gz-rendering
R = vec3(R.x, R.y, -R.z);

// uncomment this line if using other textures that are Y up
// Gazebo requires rotated cube map lookup.
// R = vec3(R.x, R.z, R.y);

// Get environment color of reflected ray:
vec4 envColor = texture(cubeMap, R, 0.0);

// Cheap hdr effect:
envColor.rgb *= (envColor.r+envColor.g+envColor.b)*hdrMultiplier;

// Compute refraction ratio (Fresnel):
float facing = 1.0 - dot(-E, N);
float waterEnvRatio = clamp(pow(facing, fresnelPower), 0.05, 1.0);

// Refracted ray only considers deep and shallow water colors:
vec4 waterColor = mix(shallowColor, deepColor, facing);

// Perform linear interpolation between reflection and refraction.
vec4 color = mix(waterColor, envColor, waterEnvRatio);

fragColor = vec4(color.xyz, 0.9);
}
Loading

0 comments on commit 8f84b05

Please sign in to comment.