End-of-life Warning!
This version of Gazebo, now called Gazebo classic, reaches end-of-life in January 2025. Users are highly encouraged to migrate to the new Gazebo using our
migration guides.
Toggle navigation
Tutorials
Download
Blog
Media
Projects
WARNING
: This documentation is for Gazebo-classic, which has been superseded by Gazebo.
Click here to see the documentation for the latest Gazebo release
Gazebo Tutorials
Browse
Categoried view
Beginner: Overview
Overview and installation instructions
Beginner: GUI
Introduction to the graphical interface.
Beginner: Model Editor
How to make or edit a model.
Intermediate: Velodyne
How to construct a Velodyne model.
Intermediate: Model Appearance
How to add meshes to a model to improve visual appearance.
Intermediate: Sensor Noise
How to add noise to a sensor.
Intermediate: Upload Velodyne Model
How to upload a model to the model database.
Intermediate: Control plugin
How to control a sensor using a plugin.
Intermediate: Connect to ROS
How to control a plugin using ROS.
Advanced: Where is the code?
Introduction to the series and basic concepts
Advanced: Run your own copy of Gazebo
Get the code and build Gazebo from source
Advanced: Workflow
Get familiar with the source code and toolchain
Advanced: Code quality
Testing, style, warnings and documentation
Advanced: Code review
Choose a bug, fix it, and get your patch into Gazebo!
Ubuntu
Installation instructions for Ubuntu using packages (amd6...
Debian, Fedora, Arch or Gentoo
Installation instructions for major linux distributions...
Mac
Installation instructions for Mac installations using hom...
Windows
Installation instructions for Windows.
Unstable packages: prerelease and nig...
How to install and uninstall the unstable Ubuntu...
From source (Ubuntu and Mac)
Installation instructions for building a gazebo a...
Dependencies from source
Install some dependencies from source, such as SDFormat a...
Quick Start
Simple and fast introduction to Gazebo.
Plugins 101
Overview of Gazebo plugins.
Model plugins
Manipulate a model using a model plugin.
World plugins
Inserting models using a world plugin.
Programmatic World Control
Modify world properties, such as ambient color and the ph...
Make a Mobile Robot
How to make a 2-wheeled mobile robot
Import Meshes
How to import 3D meshes into Gazebo for use as visual and...
Attach Meshes
Improve model visual appearance by attaching Collada meshes
Add a Sensor to a Robot
How to add a laser sensor to a robot
Make a Simple Gripper
Build a simple pinching gripper
Attach Gripper to Robot
Connect the simple gripper to the mobile robot
Model a 4-bar linkage in SDFormat and...
Model a 4-bar linkage in SDFormat and URDF.
Make a model
Describes models, and how to create custom models.
Make an animated model (actor)
Describes how to create animated skeletons and scripted t...
Model structure and requirements
Describes how Gazebo finds and load models, and requireme...
How to contribute a model
Describes how add a new model to the Gazebo model database.
Nested model
Describes how to create an assembly of models.
Sensor Noise Model
How to add noise to sensors
Camera Distortion
How to add distortion to cameras.
Wide-Angle Camera
How to create and setup wide-angle cameras.
Create a Video with a Camera
Shows how to create a video from a camera in the world.
Building a world
How to populate a simulated world with simulated objects.
Modifying a world
How to change scene and physics parameters of a world usi...
Random numbers
How to set the random number seed.
Topics subscription
How to subscribe to gazebo topics.
Topics on the commandline with gz topic
How to introspect and publish on gazebo-transport topics ...
Custom messages
How to create custom messages
Friction
How to setup friction properties.
Torsional friction
How to setup torsional friction properties.
Physics Parameters
How to tune the physics parameters.
Collide bitmask
Learn how to control which geometries collide or do not c...
Fluids
Fluid simulation on the GPU using Fluidix library.
Aerodynamics
Simulate aerodynamic robots and vehicles with the LiftDra...
Hydrodynamics
Simulate self-propelling underwater submarines using lift...
Logging and playback
Record and playback your simulation, via the GUI or comma...
Code introspection
Introspect Gazebo and your plugins
Log filtering
How to filter a recorded state log file.
Applying Force/Torque
Use the graphical interface to apply force and torque to ...
Instrument HDF5 Datasets
How to dump simulation data into HDF5 format for benchmark.
Gazebo Components
Overview of the basic components in a Gazebo simulation.
Gazebo Architecture
Overview of Gazebo's code structure.
Population of models
Automatically create a collection of identical models.
Building Editor
Create multi-level buildings without having to write code.
Model Editor
Create and edit models within a model editor.
Extrude SVG files
Extrude 2D SVG files into 3D meshes to create robots.
Gzweb installation
Explains how to install and run the WebGL client for Gazebo.
Gzweb development
How to make changes to Gzweb and contribute your modifica...
Color And Texture Models
How to add color and textures to a model.
Elevators
How to create and use elevators.
ContainPlugin
How to use ContainPlugin to trigger events.
Flashlight Plugin
How to use FlashLightPlugin to blink lights on a model.
LED Plugin
How to use LedPlugin to blink lights on a model.
Joint Events
Use the SimEvents plugin to send messages when a joint st...
Occupied Event
Use the OccupiedEvent plugin to send messages when a 3D r...
Force/Torque Sensor
How to create and get data from force/torque sensors.
Logical Camera Sensor
How to create and get data from logical camera sensors.
Contact Sensor
How to create and get data from contact sensors.
Random Velocity Plugin
Use this for random walks of any link.
ROS overview
Overview of ROS integration.
ROS 2 overview
Overview of ROS 2 integration.
ROS control
Using actuators, controllers, and ros_control with Gazebo.
ROS communication
ROS communication with Gazebo.
ROS Depth Camera Integration
Connect a Gazebo depth camera to ROS.
ROS plugin
Create ROS for Gazebo.
Installing gazebo_ros_pkgs (ROS 1)
Installing gazebo_ros_pkgs for ROS 1.
Installing gazebo_ros_pkgs (ROS 2)
Installing gazebo_ros_pkgs for ROS 2.
Using roslaunch
Using roslaunch to start Gazebo, world files and URDF mod...
URDF in Gazebo
Using a URDF in Gazebo
Gazebo plugins in ROS
Using Gazebo plugins with ROS
Animated Box
Animate the pose of box.
Inertial parameters of triangle meshes
Identify reasonable inertial parameters for a model compo...
Manage physics profiles
Use the Preset Manager interface to store and switch betw...
Parallel physics
Take advantage of improved physics performance with two d...
Profiler
Used to perform application-wide performance profiling.
Performance metrics
Track simulation and sensor performance through a transpo...
Visual Lightmap
How to apply lightmaps to a model visual.
Razer Hydra
Using the Razer Hydra
System Plugin
Describes the process of making a system plugin that is l...
Which combination of ROS/Gazebo versi...
Details the reasons to pick an specific ROS or Gazebo ver...
Using the RobotiQ 3-Finger Adaptive R...
How to grasp and view the state while using the 3-Finger ...
Visibility layers
Assign layers to visuals and toggle their visibility in t...
Gravity compensation
Use gravity compensation to complement PID position contr...
Ground plane model with satellite images
How to insert a satellte image textured ground plane from...
Lockstep of physics and sensors
How to enable lockstep synchronization between physics an...
Digital Elevation Models
How to use DEMs in Gazebo.
Oculus Rift
Using the Oculus Rift VR headset
Stereo Glasses
Setup Gazebo to generate a stereo images suitable for use...
Advanced ROS Integration
Miscellaneous Gazebo-ROS tricks and tips.
Add/Modify Tutorials
How to add or modify tutorials.
Contribute Code
How to create new code for inclusion into Gazebo.
Development process
Description of the Gazebo development process.
Capture screenshot
Shows how to capture a screen shot of Gazebo's render win...
Player Position
Covers connecting the position2d Player interface to Gazebo.
Player Laser
Covers connecting the laser Player interface to Gazebo.
Player Camera
Covers connecting the camera Player interface to Gazebo.
Clone a simulation
This tutorial describes how to clone the current simulation.
BDI Atlas Robot Interface 3.0.0 Stand...
A guide to compiling a stand-in for the AtlasRobotInterfa...
Launchfile options
A guide to launching DRCSim with different Atlas versions...
Atlas fake walking
How to drive a simulated Atlas as if it were a wheeled ro...
Spawn Atlas into a custom world
How to spawn Atlas into your own custom world.
Modify environment
How to modify the simulated Atlas' environment, such as a...
DRC Simulator installation
Explains how to install the DRC Simulator.
Visualization and logging
How to visualize and log sensor data.
Atlas MultiSense SL head
How to visualize data streams from the simulated Atlas ro...
Animate joints
How to move a robot in simulation without dynamics throug...
Grasp with Sandia hands
How to send desired grasp pose to Sandia hands mounted on...
Atlas Keyboard Teleoperation over ROS
DRCSim provides an interface to the Atlas Sim Interface a...
Atlas switching control modes
How to use the BDI-provided behavior library to control t...
How to use the Atlas Sim Interface
How to use the Atlas Sim Interface to command Atlas to wa...
Atlas Controller Synchronization over...
How to setup synchronized controller updates over ROS top...
Atlas control over ROS with python
How to control the Atlas robot with a python joint trajec...
Sending joint commands with ROS
How to send joint positions to a robot in simulation thro...
DRC vehicle tele-operation
How to control the DRC Vehicle using ROS topics provided ...
DRC vehicle tele-operation with Atlas
How to automatically place the Atlas robot in the driver'...
Changing Viscous Damping Coefficients...
Changing Atlas and Sandia Hand Joint Viscous Damping Coef...
Teleoperate atlas with a music mixer
How to use a music mixer, to teleoperate the Atlas model.
Running BDI controller demo
How to start the 5-step behavior demo implemented in the ...
GUI Overlay
This tutorial describes how to create custom GUI interfac...
Setting Velocity on Joints and Links
This tutorial describes how to programatically set veloc...
GazeboJs installation
Explains how to install the javascript NodeJs bindings to...
GazeboJs installation on Mac
Explains how to install the javascript NodeJs bindings to...
GazeboJs publish and subscribe
Explains how to write publishers and subscribers for Gaze...
GazeboJs camera topics
Explains how to save images from Gazebo camera topics.
GazeboJs models
Explains how to access the sdf and to get other informati...
GazeboJs hydra publisher
Hydra publisher using node-sixense and GazeboJs
HAPTIX environment setup
Instructions for the hardware installation and de...
HAPTIX C API
This tutorial describes how to use the C API, defined at...
HAPTIX software install and update
This tutorial describes how to install...
HAPTIX Matlab and Octave API
This tutorial describes how to use the...
HAPTIX Simulation World API
This tutorial describes how to use the World API to manip...
HAPTIX Tactor Glove
This tutorial describes how to craft a DIY tactor glove f...
HAPTIX Teleoperation
This tutorial describes how to control arm position and g...
HAPTIX Optitrack Control
How to configure the...
HAPTIX Simulation World API with Cust...
This tutorial describes how to use the World API to manip...
HAPTIX logging
This tutorial describes how to use the World API and ...
HAPTIX DEKA Luke hand installation
This tutorial describes how to install the DEKA Luke ...
HAPTIX Simulation Scoring Plugin Example
This tutorial describes how to use the Gazebo SimEvents p...