mirror of
https://github.com/orbbec/OrbbecSDK_ROS2.git
synced 2026-10-04 20:17:47 +08:00
feat: support multiple ROS 2 distributions
This commit is contained in:
@@ -31,7 +31,7 @@ D2CViewer::D2CViewer(rclcpp::Node* const node, rmw_qos_profile_t rgb_qos,
|
||||
: node_(node), logger_(rclcpp::get_logger("d2c_viewer")), is_active_(true) {
|
||||
rgb_sub_ = std::make_shared<message_filters::Subscriber<sensor_msgs::msg::Image>>(
|
||||
node_, "color/image_raw",
|
||||
#ifdef message_filters_QoS
|
||||
#ifdef ORBBEC_MESSAGE_FILTERS_USES_RCLCPP_QOS
|
||||
rclcpp::QoS{rclcpp::QoSInitialization::from_rmw(rgb_qos), rgb_qos}
|
||||
#else
|
||||
rgb_qos
|
||||
@@ -39,7 +39,7 @@ D2CViewer::D2CViewer(rclcpp::Node* const node, rmw_qos_profile_t rgb_qos,
|
||||
);
|
||||
depth_sub_ = std::make_shared<message_filters::Subscriber<sensor_msgs::msg::Image>>(
|
||||
node_, "depth/image_raw",
|
||||
#ifdef message_filters_QoS
|
||||
#ifdef ORBBEC_MESSAGE_FILTERS_USES_RCLCPP_QOS
|
||||
rclcpp::QoS{rclcpp::QoSInitialization::from_rmw(depth_qos), depth_qos}
|
||||
#else
|
||||
depth_qos
|
||||
|
||||
@@ -35,20 +35,20 @@ size_t image_rcl_publisher::get_subscription_count() const {
|
||||
image_transport_publisher::image_transport_publisher(rclcpp::Node& node,
|
||||
const std::string& topic_name,
|
||||
const rmw_qos_profile_t& qos) {
|
||||
image_publisher_impl = std::make_shared<image_transport::Publisher>(
|
||||
image_transport::create_publisher(
|
||||
#ifdef image_transport_NODE_INTERFACE
|
||||
image_publisher_impl =
|
||||
std::make_shared<image_transport::Publisher>(image_transport::create_publisher(
|
||||
#ifdef ORBBEC_IMAGE_TRANSPORT_USES_REQUIRED_INTERFACES
|
||||
image_transport::RequiredInterfaces{node},
|
||||
#else
|
||||
&node,
|
||||
#endif
|
||||
topic_name,
|
||||
#ifdef image_transport_QoS
|
||||
#ifdef ORBBEC_IMAGE_TRANSPORT_USES_REQUIRED_INTERFACES
|
||||
rclcpp::QoS{rclcpp::QoSInitialization::from_rmw(qos), qos}
|
||||
#else
|
||||
qos
|
||||
#endif
|
||||
));
|
||||
));
|
||||
}
|
||||
void image_transport_publisher::publish(sensor_msgs::msg::Image::UniquePtr image_ptr) {
|
||||
image_publisher_impl->publish(*image_ptr);
|
||||
@@ -57,4 +57,4 @@ void image_transport_publisher::publish(sensor_msgs::msg::Image::UniquePtr image
|
||||
size_t image_transport_publisher::get_subscription_count() const {
|
||||
return image_publisher_impl->getNumSubscribers();
|
||||
}
|
||||
} // namespace orbbec_camera
|
||||
} // namespace orbbec_camera
|
||||
|
||||
@@ -5311,15 +5311,32 @@ void OBCameraNode::publishConfidenceFrame(const std::shared_ptr<ob::Frame> &conf
|
||||
}
|
||||
|
||||
void OBCameraNode::setupCameraInfo() {
|
||||
std::string color_camera_name = camera_name_ + "_color";
|
||||
const auto create_camera_info_manager = [this](const std::string &camera_name,
|
||||
const std::string &camera_info_url) {
|
||||
#ifdef ORBBEC_CAMERA_INFO_MANAGER_USES_NODE_INTERFACES
|
||||
#ifdef ORBBEC_CAMERA_INFO_MANAGER_USES_RCLCPP_QOS
|
||||
return std::make_unique<camera_info_manager::CameraInfoManager>(
|
||||
node_->get_node_base_interface(), node_->get_node_services_interface(),
|
||||
node_->get_node_logging_interface(), camera_name, camera_info_url,
|
||||
rclcpp::SystemDefaultsQoS());
|
||||
#else
|
||||
return std::make_unique<camera_info_manager::CameraInfoManager>(
|
||||
node_->get_node_base_interface(), node_->get_node_services_interface(),
|
||||
node_->get_node_logging_interface(), camera_name, camera_info_url, rmw_qos_profile_default);
|
||||
#endif
|
||||
#else
|
||||
return std::make_unique<camera_info_manager::CameraInfoManager>(node_, camera_name,
|
||||
camera_info_url);
|
||||
#endif
|
||||
};
|
||||
|
||||
const std::string color_camera_name = camera_name_ + "_color";
|
||||
if (!color_info_url_.empty()) {
|
||||
color_info_manager_ = std::make_unique<camera_info_manager::CameraInfoManager>(
|
||||
node_, color_camera_name, color_info_url_);
|
||||
color_info_manager_ = create_camera_info_manager(color_camera_name, color_info_url_);
|
||||
}
|
||||
std::string ir_camera_name = camera_name_ + "_ir";
|
||||
const std::string ir_camera_name = camera_name_ + "_ir";
|
||||
if (!ir_info_url_.empty()) {
|
||||
ir_info_manager_ = std::make_unique<camera_info_manager::CameraInfoManager>(
|
||||
node_, ir_camera_name, ir_info_url_);
|
||||
ir_info_manager_ = create_camera_info_manager(ir_camera_name, ir_info_url_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7287,8 +7304,8 @@ void OBCameraNode::publishStaticTransforms() {
|
||||
if (!publish_tf_) {
|
||||
return;
|
||||
}
|
||||
static_tf_broadcaster_ = std::make_shared<tf2_ros::StaticTransformBroadcaster>(node_);
|
||||
dynamic_tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(node_);
|
||||
static_tf_broadcaster_ = std::make_shared<tf2_ros::StaticTransformBroadcaster>(*node_);
|
||||
dynamic_tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(*node_);
|
||||
calcAndPublishStaticTransform();
|
||||
if (tf_publish_rate_ > 0) {
|
||||
tf_thread_ = std::make_shared<std::thread>([this]() { publishDynamicTransforms(); });
|
||||
|
||||
@@ -19,8 +19,13 @@
|
||||
#include <fcntl.h>
|
||||
#include <semaphore.h>
|
||||
#include <sys/shm.h>
|
||||
#include <ament_index_cpp/get_package_share_directory.hpp>
|
||||
#include <ament_index_cpp/get_package_prefix.hpp>
|
||||
#if __has_include(<ament_index_cpp/get_package_share_path.hpp>)
|
||||
#include <ament_index_cpp/get_package_share_path.hpp>
|
||||
#define ORBBEC_AMENT_INDEX_USES_FILESYSTEM_PATHS
|
||||
#else
|
||||
#include <ament_index_cpp/get_package_share_directory.hpp>
|
||||
#endif
|
||||
#include <rclcpp_components/register_node_macro.hpp>
|
||||
#include <rcutils/logging.h>
|
||||
#include <csignal>
|
||||
@@ -39,6 +44,24 @@ std::string g_time_domain = "global"; // Assuming this is declared elsew
|
||||
namespace {
|
||||
constexpr auto kStreamStartDelayAfterReconnect = std::chrono::seconds(5);
|
||||
|
||||
std::filesystem::path getPackageSharePath(const std::string &package_name) {
|
||||
#ifdef ORBBEC_AMENT_INDEX_USES_FILESYSTEM_PATHS
|
||||
return ament_index_cpp::get_package_share_path(package_name);
|
||||
#else
|
||||
return ament_index_cpp::get_package_share_directory(package_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::filesystem::path getPackagePrefixPath(const std::string &package_name) {
|
||||
#ifdef ORBBEC_AMENT_INDEX_USES_FILESYSTEM_PATHS
|
||||
std::filesystem::path package_prefix;
|
||||
ament_index_cpp::get_package_prefix(package_name, package_prefix);
|
||||
return package_prefix;
|
||||
#else
|
||||
return ament_index_cpp::get_package_prefix(package_name);
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string getLogDirectoryForCamera(const std::string &camera_name) {
|
||||
const char *log_dir_override = std::getenv("ORBBEC_LOG_DIR");
|
||||
if (log_dir_override && log_dir_override[0] != '\0') {
|
||||
@@ -153,10 +176,10 @@ int rosLogSeverityFromString(const std::string_view &log_level) {
|
||||
OBCameraNodeDriver::OBCameraNodeDriver(const rclcpp::NodeOptions &node_options)
|
||||
: Node("orbbec_camera_node", "/", node_options),
|
||||
node_options_(node_options),
|
||||
config_path_(ament_index_cpp::get_package_share_directory("orbbec_camera") +
|
||||
"/config/OrbbecSDKConfig_v2.0.xml"),
|
||||
config_path_(
|
||||
(getPackageSharePath("orbbec_camera") / "config" / "OrbbecSDKConfig_v2.0.xml").string()),
|
||||
logger_(this->get_logger()),
|
||||
extension_path_(ament_index_cpp::get_package_prefix("orbbec_camera") + "/lib/extensions") {
|
||||
extension_path_((getPackagePrefixPath("orbbec_camera") / "lib" / "extensions").string()) {
|
||||
node_name_ = "orbbec_camera_node";
|
||||
init();
|
||||
}
|
||||
@@ -165,10 +188,10 @@ OBCameraNodeDriver::OBCameraNodeDriver(const std::string &node_name, const std::
|
||||
const rclcpp::NodeOptions &node_options)
|
||||
: Node(node_name, ns, node_options),
|
||||
node_options_(node_options),
|
||||
config_path_(ament_index_cpp::get_package_share_directory("orbbec_camera") +
|
||||
"/config/OrbbecSDKConfig_v2.0.xml"),
|
||||
config_path_(
|
||||
(getPackageSharePath("orbbec_camera") / "config" / "OrbbecSDKConfig_v2.0.xml").string()),
|
||||
logger_(this->get_logger()),
|
||||
extension_path_(ament_index_cpp::get_package_prefix("orbbec_camera") + "/lib/extensions") {
|
||||
extension_path_((getPackagePrefixPath("orbbec_camera") / "lib" / "extensions").string()) {
|
||||
node_name_ = node_name;
|
||||
init();
|
||||
}
|
||||
|
||||
@@ -1165,8 +1165,8 @@ void OBLidarNode::publishStaticTransforms() {
|
||||
if (!publish_tf_) {
|
||||
return;
|
||||
}
|
||||
static_tf_broadcaster_ = std::make_shared<tf2_ros::StaticTransformBroadcaster>(node_);
|
||||
dynamic_tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(node_);
|
||||
static_tf_broadcaster_ = std::make_shared<tf2_ros::StaticTransformBroadcaster>(*node_);
|
||||
dynamic_tf_broadcaster_ = std::make_shared<tf2_ros::TransformBroadcaster>(*node_);
|
||||
calcAndPublishStaticTransform();
|
||||
if (tf_publish_rate_ > 0) {
|
||||
tf_thread_ = std::make_shared<std::thread>([this]() { publishDynamicTransforms(); });
|
||||
|
||||
Reference in New Issue
Block a user