ros2_control - kilted
Loading...
Searching...
No Matches
rangefinder_lidar_plugin.hpp
1
20#pragma once
21
22#include <atomic>
23#include <condition_variable>
24#include <mutex>
25#include <string>
26#include <thread>
27#include <vector>
28
29#include <mujoco/mujoco.h>
30
31#include <rclcpp/node.hpp>
32#include <rclcpp/publisher.hpp>
33#include <realtime_tools/realtime_publisher.hpp>
34#include <sensor_msgs/msg/laser_scan.hpp>
35
36#include <mujoco_ros2_control_plugins/mujoco_ros2_control_plugins_base.hpp>
37
39{
40
49{
50 std::string name;
51 std::string frame_name;
52 int num_rangefinders;
53 double min_angle;
54 double max_angle;
55 double angle_increment;
56 double range_min;
57 double range_max;
58
59 // Maps the index of the rangefinder to the index of the MuJoCo rangefinder's data.
60 // E.g. lidar-034 -> sensor_indexes[34] will contain index of that rangefinder in mj_data_->sensordata
61 std::vector<int> sensor_indexes;
62
63 // Raw data copied from mjData each update
64 std::vector<mjtNum> raw_data;
65
66 // For message publishing
67 std::string laserscan_topic;
68 sensor_msgs::msg::LaserScan laser_scan_msg;
69 rclcpp::Publisher<sensor_msgs::msg::LaserScan>::SharedPtr scan_pub_raw;
70 std::unique_ptr<realtime_tools::RealtimePublisher<sensor_msgs::msg::LaserScan>> scan_pub;
71};
72
80class [[deprecated("We recommend using the 3d Lidar plugin instead."
81 "See documentation for migration instructions.")]] RangefinderLidarPlugin
83{
84public:
85 bool init(rclcpp::Node::SharedPtr node, const mjModel* model, mjData* data) override;
86 void update_write(const mjModel* model, mjData* data) override;
87 void cleanup() override;
88
89private:
97 bool register_sensor(const std::string& lidar_name, const mjModel* model);
98
102 void publish_loop();
103
115 static std::pair<std::string, int> parse_lidar_name(const std::string& sensor_name);
116
117 rclcpp::Node::SharedPtr node_;
118 const mjModel* model_{ nullptr };
119 double publish_rate_{ 5.0 };
120 rclcpp::Time last_publish_time_{ 0, 0, RCL_ROS_TIME };
121
122 std::vector<RangefinderLidarData> lidar_sensors_;
123};
124
125} // namespace mujoco_ros2_control_plugins
Base class for MuJoCo ROS 2 control plugins.
Definition mujoco_ros2_control_plugins_base.hpp:52
Plugin wrapper for MuJoCo rangefinder-based lidar sensors.
Definition rangefinder_lidar_plugin.hpp:83
Definition mujoco_ros2_control_plugins_base.hpp:22
Per-lidar bookkeeping for a single named group of MuJoCo rangefinder sensors.
Definition rangefinder_lidar_plugin.hpp:49