ROS2OdometrySensorComponent.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AzCore/Math/Quaternion.h>
  10. #include <AzCore/Math/Transform.h>
  11. #include <AzCore/Math/Vector3.h>
  12. #include <ROS2/Sensor/Events/PhysicsBasedSource.h>
  13. #include <ROS2/Sensor/ROS2SensorComponentBase.h>
  14. #include <ROS2Sensors/ROS2SensorsTypeIds.h>
  15. #include <nav_msgs/msg/odometry.hpp>
  16. #include <rclcpp/publisher.hpp>
  17. namespace ROS2Sensors
  18. {
  19. //! Odometry sensor Component.
  20. //! It constructs and publishes an odometry message, which contains information about vehicle velocity and position in space.
  21. //! This is a ground truth "sensor", which can be helpful for development and machine learning.
  22. //! @see <a href="https://index.ros.org/p/nav_msgs/"> nav_msgs package. </a>
  23. class ROS2OdometrySensorComponent : public ROS2::ROS2SensorComponentBase<ROS2::PhysicsBasedSource>
  24. {
  25. public:
  26. using SensorBaseType = ROS2::ROS2SensorComponentBase<ROS2::PhysicsBasedSource>;
  27. AZ_COMPONENT(ROS2OdometrySensorComponent, ROS2OdometrySensorComponentTypeId, SensorBaseType);
  28. ROS2OdometrySensorComponent();
  29. ~ROS2OdometrySensorComponent() = default;
  30. static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
  31. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
  32. static void Reflect(AZ::ReflectContext* context);
  33. //////////////////////////////////////////////////////////////////////////
  34. // Component overrides
  35. void Activate() override;
  36. void Deactivate() override;
  37. //////////////////////////////////////////////////////////////////////////
  38. private:
  39. AzPhysics::SimulatedBodyHandle m_bodyHandle = AzPhysics::InvalidSimulatedBodyHandle;
  40. std::shared_ptr<rclcpp::Publisher<nav_msgs::msg::Odometry>> m_odometryPublisher;
  41. nav_msgs::msg::Odometry m_odometryMsg;
  42. AZ::Transform m_initialTransform;
  43. void OnOdometryEvent(AzPhysics::SceneHandle sceneHandle);
  44. };
  45. } // namespace ROS2Sensors