Galaxis Codebase  1.0.0
Team Galaxis software stack for the Carolo Cup 2023 - ROS2 based software
VCINode.cpp
Go to the documentation of this file.
1 #include "VCINode.hpp"
2 
4 
5 #include <utils/logger.hpp>
6 
7 #include <sensor_msgs/image_encodings.hpp>
8 #include <std_msgs/msg/header.hpp>
9 
10 #include "utils/clock.hpp"
11 
12 
13 using namespace galaxis::ros;
14 using namespace galaxis::utils;
15 
16 using namespace std;
17 
18 using std::placeholders::_1;
19 using namespace std::chrono_literals;
20 
22  GalaxisNode("VCINodeAsync"), m_sharedMemory("/galaxis__camera") {
23  m_laneImagePublisher = image_transport::create_publisher(this, galaxis::ros::TOPIC_CAMERA_RAW);
24 
25  // rclcpp::QoS qos_params = get_qos_profile(QOS_BEST_EFFORT);
26  // m_imagePublisherNew = this->create_publisher<sensor_msgs::msg::Image>(galaxis::ros::TOPIC_CAMERA_RAW_BE, qos_params);
27 
28  int maxTries = 3;
29  while(m_sharedMemory.allocate(m_imageSizeBytes) == false && maxTries > 0) {
30  log_warning("Failed to allocate shared memory. Trying again (",maxTries,")");
31  std::this_thread::sleep_for(1000ms);
32  if(maxTries == 1) {
33  std::exit(-1);
34  }
35  maxTries--;
36  }
37 
38  maxTries = 60;
39  while(m_camera.start_grabbing_detached() == false) {
40  log_warning("Failed to initialize camera. Trying again (",maxTries,")");
41  std::this_thread::sleep_for(1000ms);
42  if(maxTries == 1) {
43  std::exit(-1);
44  }
45  maxTries--;
46  }
47 
48  std::thread(&VCINodeAsync::camera_publish_loop, this).detach();
49 }
50 
52  com::SharedData data;
53 
54  while(1) {
55  auto msg = m_camera.pop_image(true); // blocking
56 
57  if(msg == nullptr) {
58  log_warning("[ASYNC-VCINODE] camera_publish_loop: Image is nullptr.");
59  std::this_thread::sleep_for(1ms); // std::chrono_literals
60  continue;
61  }
62 
63  // write data via shared memory
64  data.tv_sec = msg->header.stamp.sec;
65  data.tv_nsec = msg->header.stamp.nanosec;
66  data.data = msg->data.data();
67  data.dataSize = msg->data.size();
69 
70  // m_imagePublisherNew->publish(*msg);
71  m_laneImagePublisher.publish(msg);
72 
73  log("[ASYNC-VCINODE] camera_publish_loop: Image published via Shared Memory and ROS2.");
74  log_debug("[ASYNC-VCINODE] camera_publish_loop: Timestamp sec.nsec:", msg->header.stamp.sec, ".",msg->header.stamp.nanosec);
75  }
76 }
node_ros_pubsub_wrapper.hpp
galaxis::ros
Definition: node_ros_pubsub_wrapper.hpp:15
galaxis::utils::log_warning
void log_warning(const Args &... args)
Definition: logger.hpp:41
clock.hpp
com::SharedData::data
uint8_t * data
Definition: SharedMemory.hpp:20
com::SharedData::dataSize
size_t dataSize
Definition: SharedMemory.hpp:21
VCINodeAsync::m_sharedMemory
com::SharedMemory m_sharedMemory
Definition: VCINode.hpp:32
VCINodeAsync::VCINodeAsync
VCINodeAsync()
Definition: VCINode.cpp:21
AlviumAsyncCamera::pop_image
std::shared_ptr< sensor_msgs::msg::Image > pop_image(bool blocking)
Definition: AsyncCamera.cpp:137
com::SharedMemory::write_mutexed
bool write_mutexed(com::SharedData const &data)
Definition: SharedMemory.cpp:126
com::SharedData::tv_sec
int32_t tv_sec
Definition: SharedMemory.hpp:18
com::SharedData::tv_nsec
uint32_t tv_nsec
Definition: SharedMemory.hpp:19
VCINodeAsync::camera_publish_loop
void camera_publish_loop()
Definition: VCINode.cpp:51
com::SharedMemory::allocate
bool allocate(size_t sizeBytes)
Definition: SharedMemory.cpp:34
VCINodeAsync::m_laneImagePublisher
image_transport::Publisher m_laneImagePublisher
Definition: VCINode.hpp:27
VCINode.hpp
VCINodeAsync::m_imageSizeBytes
size_t m_imageSizeBytes
Definition: VCINode.hpp:33
com::SharedData
Definition: SharedMemory.hpp:17
GalaxisNode
Definition: GalaxisNode.hpp:21
logger.hpp
galaxis::utils
Definition: clock.hpp:5
galaxis::utils::log
void log(const Args &... args)
Definition: logger.hpp:33
galaxis::utils::log_debug
void log_debug(const Args &... args)
Definition: logger.hpp:62
AlviumAsyncCamera::start_grabbing_detached
bool start_grabbing_detached()
Definition: AsyncCamera.cpp:147
VCINodeAsync::m_camera
AlviumAsyncCamera m_camera
Definition: VCINode.hpp:26