Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"cmake.sourceDirectory": "/home/marek/hector/src/image_projection/image_projection"
}
163 changes: 110 additions & 53 deletions image_projection/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,58 +1,74 @@
cmake_minimum_required(VERSION 3.0.2)
cmake_minimum_required(VERSION 3.8)
project(image_projection)

## Compile as C++11, supported in ROS Kinetic and newer
add_compile_options(-std=c++11)
# Default to C++17
if (NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
endif ()
#set(CMAKE_POSITION_INDEPENDENT_CODE ON)

find_package(catkin REQUIRED COMPONENTS
kalibr_camera_loader
nodelet
roscpp
if (CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif ()

find_package(ament_cmake REQUIRED)
set(DEPENDENCIES
rclcpp
rclcpp_components
hector_ros2_utils
extended_camera_loader
sensor_msgs
tf2_ros
eigen_conversions
tf2_eigen
image_transport
image_projection_msgs
image_projection_plugin_interface
dynamic_reconfigure
OpenCV
pluginlib
#dynamic_reconfigure
)
foreach(Dependency IN ITEMS ${DEPENDENCIES})
find_package(${Dependency} REQUIRED)
endforeach()

################################################
## Declare ROS dynamic reconfigure parameters ##
################################################
## Generate dynamic reconfigure parameters in the 'cfg' folder
generate_dynamic_reconfigure_options(
cfg/Projection.cfg
)

#generate_dynamic_reconfigure_options(
# cfg/Projection.cfg
#)

###################################
## catkin specific configuration ##
###################################
catkin_package(
INCLUDE_DIRS include
LIBRARIES image_projection
CATKIN_DEPENDS
kalibr_camera_loader
nodelet
roscpp
sensor_msgs
tf2_ros
eigen_conversions
image_projection_msgs
image_projection_plugin_interface
dynamic_reconfigure
image_transport
#catkin_package(
# INCLUDE_DIRS include
# LIBRARIES image_projection
# CATKIN_DEPENDS
# kalibr_camera_loader
# nodelet
# roscpp
# sensor_msgs
# tf2_ros
# eigen_conversions
# image_projection_msgs
# image_projection_plugin_interface
# dynamic_reconfigure
# image_transport
# DEPENDS system_lib
)
#)

###########
## Build ##
###########

include_directories(
include
${catkin_INCLUDE_DIRS}
)
#include_directories(
# include
# ${catkin_INCLUDE_DIRS}
#)

set(HEADERS
include/${PROJECT_NAME}/image_projection.h
Expand All @@ -66,41 +82,82 @@ set(SOURCES
src/image_projection.cpp
src/periodic_image_projection.cpp
src/image_projection_server.cpp
src/periodic_image_projection_nodelet.cpp
src/image_projection_server_nodelet.cpp
src/periodic_image_projection_node.cpp
#src/periodic_image_projection_nodelet.cpp
#src/image_projection_server_nodelet.cpp
src/utils/utils.cpp
)

add_library(${PROJECT_NAME} ${HEADERS} ${SOURCES})
target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES})
add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
add_library(${PROJECT_NAME} SHARED ${HEADERS} ${SOURCES})
target_include_directories(${PROJECT_NAME}
PUBLIC
"$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>"
"$<INSTALL_INTERFACE:include>")
#target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBRARIES})
#add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_gencfg)
ament_target_dependencies(${PROJECT_NAME} PUBLIC ${DEPENDENCIES})

add_executable(periodic_image_projection_node src/periodic_image_projection_node.cpp)
target_link_libraries(periodic_image_projection_node ${PROJECT_NAME})
add_library(periodic_image_projection src/periodic_image_projection.cpp)
ament_target_dependencies(periodic_image_projection
rclcpp
rclcpp_components
)
target_link_libraries(periodic_image_projection ${PROJECT_NAME})

add_executable(image_projection_server_node src/image_projection_server_node.cpp)
target_link_libraries(image_projection_server_node ${PROJECT_NAME})

install(DIRECTORY
config
cfg
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
rclcpp_components_register_node(periodic_image_projection
PLUGIN "image_projection::PeriodicImageProjection"
EXECUTABLE periodic_image_projection_node
)

add_library(image_projection_server src/image_projection_server.cpp)
ament_target_dependencies(image_projection_server
rclcpp
rclcpp_components
)
target_link_libraries(image_projection_server ${PROJECT_NAME})


install(TARGETS ${PROJECT_NAME} periodic_image_projection_node image_projection_server_node
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
rclcpp_components_register_node(image_projection_server
PLUGIN "image_projection::ImageProjectionServer"
EXECUTABLE image_projection_server_node
)

add_executable(periodic_image_projection_standalone_node src/periodic_image_projection_standalone_node.cpp)
target_link_libraries(periodic_image_projection_standalone_node ${PROJECT_NAME})

add_executable(image_projection_server_standalone_node src/image_projection_server_standalone_node.cpp)
target_link_libraries(image_projection_server_standalone_node ${PROJECT_NAME})

# Install
ament_export_targets(export_image_projection)
install(TARGETS ${PROJECT_NAME}
periodic_image_projection
image_projection_server
periodic_image_projection_standalone_node
image_projection_server_standalone_node
EXPORT export_${PROJECT_NAME}
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
RUNTIME DESTINATION lib/${PROJECT_NAME})
install(DIRECTORY include/ DESTINATION include)

install(DIRECTORY
config
DESTINATION share/${PROJECT_NAME}
)

# install(TARGETS ${PROJECT_NAME}
# ARCHIVE DESTINATION lib/${PROJECT_NAME}
# LIBRARY DESTINATION lib/${PROJECT_NAME}
# RUNTIME DESTINATION lib/${PROJECT_NAME}
# )

# Mark cpp header files for installation
install(DIRECTORY include/${PROJECT_NAME}/
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
DESTINATION share/${PROJECT_NAME}
FILES_MATCHING PATTERN "*.h"
PATTERN ".svn" EXCLUDE
)

install(FILES
nodelet_plugins.xml
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
ament_package()
Empty file removed image_projection/COLCON_IGNORE
Empty file.
17 changes: 0 additions & 17 deletions image_projection/cfg/Projection.cfg

This file was deleted.

35 changes: 20 additions & 15 deletions image_projection/include/image_projection/image_projection.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,17 @@
#include <ctime>
#include <sstream>

#include <ros/ros.h>
#include <rclcpp/rclcpp.hpp>
#include <Eigen/Eigen>
#include <opencv2/opencv.hpp>

#include <kalibr_camera_loader/camera_loader.h>
#include <extended_camera_loader/camera_loader.h>

#include <tf2_ros/transform_listener.h>

#include <eigen_conversions/eigen_msg.h>
#include <tf2_eigen/tf2_eigen.hpp>

#include <pluginlib/class_loader.h>
#include <pluginlib/class_loader.hpp>
#include <image_projection_plugin_interface/projection_base.h>

namespace image_projection {
Expand All @@ -25,24 +25,29 @@ typedef std::unordered_map<std::string, std::pair<cv::UMat, cv::UMat>> PixelMapp
typedef std::shared_ptr<image_projection_plugin_interface::ProjectionBase> ProjectionPtr;
typedef pluginlib::ClassLoader<image_projection_plugin_interface::ProjectionBase> ProjectionClassLoader;

class ImageProjection {
class ImageProjection
{
public:
ImageProjection(const ros::NodeHandle &nh, const ros::NodeHandle &pnh);
using CvImageMap = std::unordered_map<std::string, cv_bridge::CvImageConstPtr>;
explicit ImageProjection(const rclcpp::Node::SharedPtr& node);
~ImageProjection();

ProjectionPtr loadProjectionPlugin(const std::string& projection_name);
PixelMapping createMapping(const ProjectionPtr& projection, const std::string& base_frame, const ros::Time& stamp=ros::Time::now(),
const Eigen::Isometry3d& sensor_pose=Eigen::Isometry3d::Identity()) const;
std::map<std::string, cv_bridge::CvImageConstPtr> getLatestImages(ros::Time& stamp, std::string& encoding) const;
bool projectImages(const std::map<std::string, cv_bridge::CvImageConstPtr>& images, const PixelMapping& pixel_mapping, cv::UMat& projection) const;
bool projectLatestImages(const PixelMapping& pixel_mapping, cv::UMat& projection, ros::Time& stamp, std::string& encoding) const;
[[nodiscard]] PixelMapping createMapping(const ProjectionPtr& projection, const std::string& base_frame,
const rclcpp::Time& stamp = rclcpp::Clock().now(),
const Eigen::Isometry3d& sensor_pose = Eigen::Isometry3d::Identity()) const;
CvImageMap getLatestImages(rclcpp::Time& stamp, std::string& encoding) const;
bool projectImages(const CvImageMap& images, const PixelMapping& pixel_mapping, cv::UMat& projection) const;
bool projectLatestImages(const PixelMapping& pixel_mapping, cv::UMat& projection, rclcpp::Time& stamp,
std::string& encoding) const;

extended_image_geometry::CameraLoader& getCameraLoader();

kalibr_image_geometry::CameraLoader& getCameraLoader();
private:
ros::NodeHandle nh_;
rclcpp::Node::SharedPtr node_;

ProjectionClassLoader projection_loader_;
kalibr_image_geometry::CameraLoader camera_loader_;
extended_image_geometry::CameraLoader camera_loader_;

std::shared_ptr<tf2_ros::Buffer> tf_buffer_;
std::shared_ptr<tf2_ros::TransformListener> tf_listener_;
Expand All @@ -52,6 +57,6 @@ class ImageProjection {
std::string save_folder_;
};

}
} // namespace image_projection

#endif
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
#ifndef IMAGE_PROJECTION_IMAGE_PROJECTION_SERVER_H
#define IMAGE_PROJECTION_IMAGE_PROJECTION_SERVER_H

#include <ros/ros.h>
#include <rclcpp/rclcpp.hpp>

namespace image_projection {

class ImageProjectionServer {
class ImageProjectionServer : public rclcpp::Node {
public:
ImageProjectionServer(const ros::NodeHandle& nh, const ros::NodeHandle& pnh);
ImageProjectionServer(const rclcpp::NodeOptions& options);
private:
ros::NodeHandle nh_;
ros::NodeHandle pnh_;

ros::ServiceServer projection_srv_;
//rclcpp::Service<>::SharedPtr projection_srv_;

};

Expand Down
Loading