ros2_control - kilted
Loading...
Searching...
No Matches
mujoco_3d_lidar_plugin.hpp
1
20#pragma once
21
22#include <vector>
23
24#include <mujoco/mujoco.h>
25
26#include <geometry_msgs/msg/vector3.hpp>
27#include <rclcpp/node.hpp>
28#include <rclcpp/publisher.hpp>
29#include <realtime_tools/realtime_publisher.hpp>
30#include <sensor_msgs/msg/laser_scan.hpp>
31#include <sensor_msgs/msg/point_cloud2.hpp>
32
33#include <mujoco_ros2_control_plugins/mujoco_ros2_control_plugins_base.hpp>
34
36{
37
42{
43 std::string name;
44 int sensor_id;
45 int sensor_adr;
46 int plugin_stateadr;
47 std::string frame_name;
48 std::vector<int> resolution;
49 std::vector<double> azimuth_range;
50 std::vector<double> elevation_range;
51 std::vector<geometry_msgs::msg::Vector3> vectors;
52 double range_min;
53 double range_max;
54 bool is_3d;
55
56 // Whether or not the underlying extension is async
57 bool async{ false };
58
59 // For message publishing
60 std::string lidar_topic;
61
62 // Tracking the last update and compute time from the plugin
63 mjtNum last_compute_time{ 0.0 };
64 mjtNum last_published_time{ 0.0 };
65
66 sensor_msgs::msg::LaserScan laser_scan_msg;
67 rclcpp::Publisher<sensor_msgs::msg::LaserScan>::SharedPtr scan_pub_raw;
68 std::unique_ptr<realtime_tools::RealtimePublisher<sensor_msgs::msg::LaserScan>> scan_pub;
69
70 sensor_msgs::msg::PointCloud2 point_cloud_msg;
71 rclcpp::Publisher<sensor_msgs::msg::PointCloud2>::SharedPtr pointcloud_pub_raw;
72 std::unique_ptr<realtime_tools::RealtimePublisher<sensor_msgs::msg::PointCloud2>> pointcloud_pub;
73};
74
84{
85public:
93 bool init(rclcpp::Node::SharedPtr node, const mjModel* model, mjData* data) override;
94
102 void update_write(const mjModel* model, mjData* data) override;
103
107 void cleanup() override;
108
109private:
122 bool register_sensor(const mjModel* model, int sensor_idx);
123
124 rclcpp::Node::SharedPtr node_;
125
126 // Containers for lidar data and ROS constructs
127 std::vector<Lidar3dConfig> lidar_sensors_;
128};
129
130} // namespace mujoco_ros2_control_plugins
Base class for MuJoCo ROS 2 control plugins.
Definition mujoco_ros2_control_plugins_base.hpp:52
Plugin wrapper of the included 3D Lidar MuJoCo extension.
Definition mujoco_3d_lidar_plugin.hpp:84
void cleanup() override
Destructs the plugin and all relevant data.
Definition mujoco_3d_lidar_plugin.cpp:380
void update_write(const mjModel *model, mjData *data) override
Callback to update the plugin's data.
Definition mujoco_3d_lidar_plugin.cpp:304
bool init(rclcpp::Node::SharedPtr node, const mjModel *model, mjData *data) override
Initializes a new MujocoLidar wrapper object for 3d lidar sensors.
Definition mujoco_3d_lidar_plugin.cpp:117
Definition mujoco_ros2_control_plugins_base.hpp:22
Data container for lidar sensor information.
Definition mujoco_3d_lidar_plugin.hpp:42