Init commit.

This commit is contained in:
James Pace 2026-01-01 19:14:42 -05:00
commit 01b13b7afd
3 changed files with 120 additions and 0 deletions

45
CMakeLists.txt Normal file
View File

@ -0,0 +1,45 @@
cmake_minimum_required(VERSION 3.8)
project(image_publisher)
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(rclcpp_components REQUIRED)
find_package(image_transport REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(OpenCV REQUIRED)
find_package(cv_bridge REQUIRED)
add_library(image_publisher_component SHARED src/ImagePublisher.cpp)
target_include_directories(image_publisher_component PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include/${PROJECT_NAME}>)
target_compile_features(image_publisher_component PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17
target_link_libraries(image_publisher_component
rclcpp::rclcpp
rclcpp_components::component
image_transport::image_transport
${sensor_msgs_TARGETS}
${std_msgs_TARGETS}
${OpenCV_LIBS}
cv_bridge::cv_bridge
)
rclcpp_components_register_node(image_publisher_component
PLUGIN "j7s::ImagePublisher"
EXECUTABLE image_publisher
)
ament_export_targets(export_image_publisher_component)
install(TARGETS image_publisher_component
EXPORT export_image_publisher_component
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
ament_package()

21
package.xml Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>image_publisher</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="jpace121@gmail.com">jimmy</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<depend>cv_bridge</depend>
<depend>image_transport</depend>
<depend>sensor_msgs</depend>
<depend>std_msgs</depend>
<depend>rclcpp_components</depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>

54
src/ImagePublisher.cpp Normal file
View File

@ -0,0 +1,54 @@
#include <rclcpp/rclcpp.hpp>
#include <image_transport/image_transport.hpp>
#include <sensor_msgs/msg/image.hpp>
#include <std_msgs/msg/header.hpp>
#include <cv_bridge/cv_bridge.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgproc.hpp>
#include <chrono>
using namespace std::chrono_literals;
namespace j7s {
class ImagePublisher : public rclcpp::Node {
public:
ImagePublisher(const rclcpp::NodeOptions& options);
private:
image_transport::ImageTransport m_transport;
image_transport::Publisher m_publisher;
rclcpp::TimerBase::SharedPtr m_timer;
sensor_msgs::msg::Image::SharedPtr draw_image();
};
};
namespace j7s {
ImagePublisher::ImagePublisher(const rclcpp::NodeOptions& options):
Node("image_publisher", options),
m_transport(std::shared_ptr<rclcpp::Node>(this)),
m_publisher(m_transport.advertise("image", 1)),
m_timer{}
{
m_timer = this->create_timer(10ms, [this]() -> void {
const auto msg = draw_image();
m_publisher.publish(msg);
});
}
sensor_msgs::msg::Image::SharedPtr ImagePublisher::draw_image()
{
cv::Mat mat = cv::Mat::zeros(200, 200, CV_8UC3);
std_msgs::msg::Header header;
header.stamp = this->now();
cv_bridge::CvImage image(header, "mono8", mat);
return image.toImageMsg();
}
};
#include <rclcpp_components/register_node_macro.hpp>
RCLCPP_COMPONENTS_REGISTER_NODE(j7s::ImagePublisher)