76 bool poll_requested{
false };
80 bool render_pending{
false };
86 std::string frame_name;
87 std::string info_topic;
88 std::string image_topic;
89 std::string depth_topic;
90 std::string trigger_service_name;
95 std::vector<uint8_t> image_buffer;
96 std::vector<float> depth_buffer;
98 sensor_msgs::msg::Image image;
99 sensor_msgs::msg::Image depth_image;
100 sensor_msgs::msg::CameraInfo camera_info;
102 rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr image_pub;
103 rclcpp::Publisher<sensor_msgs::msg::Image>::SharedPtr depth_image_pub;
104 rclcpp::Publisher<sensor_msgs::msg::CameraInfo>::SharedPtr camera_info_pub;
105 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr trigger_service;
149 bool init(rclcpp::Node::SharedPtr node,
const mjModel* model, mjData* data)
override;
161 bool init(rclcpp::Node::SharedPtr node,
const mjModel* model, mjData* data,
GlfwInitFn glfw_init_fn);
162 void update_write(
const mjModel* model, mjData* data)
override;
184 return publish_images_.load();
189 rclcpp::Logger logger_{ rclcpp::get_logger(
"CameraPlugin") };
200 bool register_cameras();
210 void update_cameras();
217 void render_and_publish_camera(CameraData& camera,
const rclcpp::Time& stamp);
223 void handle_trigger(
const std::shared_ptr<std_srvs::srv::Trigger::Request> ,
224 std::shared_ptr<std_srvs::srv::Trigger::Response> response,
const int camera_idx);
226 rclcpp::Node::SharedPtr node_;
229 std::recursive_mutex* sim_mutex_{
nullptr };
232 const mjModel* mj_model_;
233 mjData* mj_camera_data_;
236 double camera_publish_rate_{ 5.0 };
237 rclcpp::Time last_publish_time_{ 0, 0, RCL_ROS_TIME };
241 bool has_streaming_cameras_{
false };
244 std::atomic_bool poll_pending_{
false };
252 float camera_near_distance_;
253 float camera_depth_scale_;
256 std::vector<CameraData> cameras_;
260 std::vector<size_t> render_indices_;
263 std::thread rendering_thread_;
264 std::atomic_bool publish_images_{
false };
265 std::atomic_bool stop_requested_{
false };
266 std::mutex data_mutex_;
267 std::condition_variable data_cv_;
268 bool new_data_{
false };
271 EGLDisplay egl_display_{ EGL_NO_DISPLAY };
272 EGLContext egl_context_{ EGL_NO_CONTEXT };
273 EGLSurface egl_surface_{ EGL_NO_SURFACE };
274 bool use_egl_{
false };
280 bool init_egl_context();
285 void cleanup_egl_context();
void update_write(const mjModel *model, mjData *data) override
Called once per write() cycle, on the control thread, after the hardware interface has staged the con...
Definition camera_plugin.cpp:67