Autoware.Auto
spinnaker_camera_node.hpp
Go to the documentation of this file.
1 // Copyright 2020 Apex.AI, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef SPINNAKER_CAMERA_NODES__SPINNAKER_CAMERA_NODE_HPP_
16 #define SPINNAKER_CAMERA_NODES__SPINNAKER_CAMERA_NODE_HPP_
17 
18 #include <rclcpp/rclcpp.hpp>
19 #include <rclcpp/publisher.hpp>
20 #include <sensor_msgs/msg/image.hpp>
23 
24 #include <memory>
25 #include <string>
26 #include <vector>
27 #include <mutex>
28 
29 namespace autoware
30 {
31 namespace drivers
32 {
33 namespace camera
34 {
35 
36 class SPINNAKER_CAMERA_NODES_PUBLIC SpinnakerCameraNode : public ::rclcpp::Node
37 {
38 public:
41  explicit SpinnakerCameraNode(
42  const rclcpp::NodeOptions & node_options);
43 
44 private:
46  class SPINNAKER_CAMERA_NODES_LOCAL ProtectedPublisher;
47 
49  SPINNAKER_CAMERA_NODES_LOCAL void publish_image(
50  std::uint32_t camera_index,
51  std::unique_ptr<sensor_msgs::msg::Image> image);
52 
54  SPINNAKER_CAMERA_NODES_LOCAL spinnaker::CameraListWrapper & create_cameras_from_params(
55  spinnaker::SystemWrapper * spinnaker_wrapper);
56 
58  SPINNAKER_CAMERA_NODES_LOCAL static std::vector<ProtectedPublisher> create_publishers(
59  ::rclcpp::Node * node,
60  size_t number_of_cameras,
61  bool use_publisher_per_camera);
62 
63  std::unique_ptr<spinnaker::SystemWrapper> m_spinnaker_wrapper{};
64  std::vector<ProtectedPublisher> m_publishers{};
65  bool m_use_publisher_per_camera{};
66 };
67 
69 {
70  using PublisherT = ::rclcpp::Publisher<::sensor_msgs::msg::Image>;
71 
72 public:
74  void set_publisher(PublisherT::SharedPtr publisher);
76  void publish(std::unique_ptr<sensor_msgs::msg::Image> image);
77 
78 private:
79  std::mutex m_publish_mutex{};
80  PublisherT::SharedPtr m_publisher{};
81 };
82 
83 } // namespace camera
84 } // namespace drivers
85 } // namespace autoware
86 
87 #endif // SPINNAKER_CAMERA_NODES__SPINNAKER_CAMERA_NODE_HPP_
autoware::drivers::camera::SpinnakerCameraNode::ProtectedPublisher
Definition: spinnaker_camera_node.hpp:68
visibility_control.hpp
autoware::drivers::camera::SpinnakerCameraNode::ProtectedPublisher::publish
void publish(std::unique_ptr< sensor_msgs::msg::Image > image)
Publish an image.
Definition: spinnaker_camera_node.cpp:164
autoware::drivers::camera::SpinnakerCameraNode
Definition: spinnaker_camera_node.hpp:36
autoware
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
autoware::drivers::camera::SpinnakerCameraNode::ProtectedPublisher::set_publisher
void set_publisher(PublisherT::SharedPtr publisher)
Co-share ownership of a rclcpp publisher.
Definition: spinnaker_camera_node.cpp:159
system_wrapper.hpp
autoware::drivers::camera::spinnaker::SystemWrapper
A class that wraps the Spinnaker SDK system pointer and handles its correct release.
Definition: system_wrapper.hpp:38
autoware::drivers::camera::spinnaker::CameraListWrapper
Definition: camera_list_wrapper.hpp:49