Skip to content

Gazebo harmonic

Gazebo official site

install

gazebo docs install



ROS2 bridge

gazebo docs - Installing Gazebo with ROS gazebo docs - Use ROS 2 to interact with Gazebo

Install

Install bridge from osrf repository

set gazebo and bridge in dockerfile
1
2
3
4
5
6
RUN curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg \
  && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null \
  && apt-get update && apt-get install -q -y --no-install-recommends \
  gz-harmonic \
  ros-humble-ros-gzharmonic \
  && rm -rf /var/lib/apt/lists/*
apt-get install ros-humble-ros-gzharmonic

Check

bridge github send message from side to side (no need to run gz sim for this check)

send string message from gz to ros and from ros to gz using cli - Run bridge - Pub from GZ echo in ROS - Pub from ROS echo in GZ -

Terminal1: bridge
1
2
3
4
ros2 run ros_gz_bridge parameter_bridge /chatter@std_msgs/msg/String@gz.msgs.StringMsg
#
[INFO] [1734974012.615668960] [ros_gz_bridge]: Creating GZ->ROS Bridge: [/chatter (gz.msgs.StringMsg) -> /chatter (std_msgs/msg/String)] (Lazy 0)
[INFO] [1734974012.616345817] [ros_gz_bridge]: Creating ROS->GZ Bridge: [/chatter (std_msgs/msg/String) -> /chatter (gz.msgs.StringMsg)] (Lazy 0)

pub data from gz to ros

Terminal2: ros subscribe
ros2 topic echo /chatter
Terminal3: gz pub
gz topic -t /chatter -m gz.msgs.StringMsg -p 'data:"Hello"'

pub data from ros to gz

Terminal2: ros pub
ros2 topic pub /chatter std_msgs/msg/String "data: 'Hi'"
Terminal3: gz sub
gz topic -e -t /chatter

Send camera image

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

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

<sensor name="camera" type="camera">
    <camera>
        <horizontal_fov>1.047</horizontal_fov>
        <image>
            <width>320</width>
            <height>240</height>
        </image>
        <clip>
            <near>0.1</near>
            <far>100</far>
        </clip>
    </camera>
    <always_on>1</always_on>
    <update_rate>15</update_rate>
    <visualize>true</visualize>
    <topic>/vehicle/camera</topic>
</sensor>
1
2
3
4
5
gz topic --list
/clock
...
/vehicle/camera
/vehicle/camera_info

Bridge send data from gz to ros one way

Tip

parameter_bridge <topic@ROS2_type@gz_type>

Tip

  • @ → a bidirectional bridge,
  • [ → a bridge from Gazebo to ROS,
  • ] → a bridge from ROS to Gazebo.
bridge
ros2 run ros_gz_bridge parameter_bridge /vehicle/camera@sensor_msgs/msg/Image[gz.msgs.Image
1
2
3
4
ros2 topic list
/parameter_events
/rosout
/vehicle/camera
gazebo

alt text

RQT

alt text


Reference