Skip to content

Read IMU Data from Gazebo harmonic

Simulation / Gazebo

Read imu message from gazebo simulation using cpp

prerequisites

1
2
3
4
5
6
7
sudo apt install build-essential
sudo apt install \
    libgz-transport12-dev
    libgz-msgs10-dev
    libgz-tools-dev
    libgz-common5-dev
    libgz-math7-dev
world with IMU

read_imu.cpp
#include <gz/transport.hh>
#include <gz/msgs.hh>
#include <iostream>

void imuCallback(const gz::msgs::IMU &msg)
{
  std::cout << "IMU Data:" << std::endl;
  std::cout << "  Linear Accel: "
            << msg.linear_acceleration().x() << ", "
            << msg.linear_acceleration().y() << ", "
            << msg.linear_acceleration().z() << std::endl;

  // std::cout << "  Angular Vel: "
  //           << msg.angular_velocity().x() << ", "
  //           << msg.angular_velocity().y() << ", "
  //           << msg.angular_velocity().z() << std::endl;
}

int main()
{
  gz::transport::Node node;

  std::string topic = "/imu";
  if (!node.Subscribe(topic, imuCallback))
  {
    std::cerr << "Failed to subscribe to topic: " << topic << std::endl;
    return -1;
  }

  std::cout << "Listening to IMU data on: " << topic << std::endl;
  gz::transport::waitForShutdown();
  return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.22)
project(imu_subscriber)

# Find Gazebo dependencies
find_package(gz-transport12 REQUIRED)
find_package(gz-msgs10 REQUIRED)


# Add executable
add_executable(read_imu read_imu.cpp)
target_link_libraries(read_imu
    gz-transport12::gz-transport12
    ${GZ-MSGS_LIBRARIES}
)