Init commit.
This commit is contained in:
commit
01b13b7afd
|
|
@ -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()
|
||||||
|
|
@ -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>
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue