add file exist conditions
This commit is contained in:
parent
718fd94d18
commit
97bbf46c6d
10 changed files with 87 additions and 32 deletions
|
@ -20,44 +20,33 @@ find_package(nlohmann_json REQUIRED)
|
||||||
|
|
||||||
set(dependencies
|
set(dependencies
|
||||||
rclcpp
|
rclcpp
|
||||||
# rclcpp_action
|
|
||||||
geometry_msgs
|
geometry_msgs
|
||||||
ament_index_cpp
|
ament_index_cpp
|
||||||
# tf2_ros
|
|
||||||
# rclcpp_components
|
|
||||||
nlohmann_json
|
nlohmann_json
|
||||||
scene_monitor_interfaces
|
scene_monitor_interfaces
|
||||||
)
|
)
|
||||||
|
|
||||||
include_directories(include)
|
include_directories(include)
|
||||||
|
|
||||||
add_library(component SHARED src/component.cpp)
|
add_library(component_state_lib SHARED
|
||||||
list(APPEND plugin_libs component)
|
src/component.cpp
|
||||||
|
src/component_state_monitor.cpp
|
||||||
add_library(component_state_monitor SHARED src/component_state_monitor.cpp)
|
|
||||||
list(APPEND plugin_libs component_state_monitor)
|
|
||||||
|
|
||||||
target_link_libraries(
|
|
||||||
component_state_monitor
|
|
||||||
component
|
|
||||||
)
|
)
|
||||||
|
ament_target_dependencies(component_state_lib ${dependencies})
|
||||||
foreach(plugin ${plugin_libs})
|
|
||||||
ament_target_dependencies(${plugin} ${dependencies})
|
|
||||||
endforeach()
|
|
||||||
|
|
||||||
add_executable(component_state_monitor_node src/component_state_monitor_node.cpp)
|
add_executable(component_state_monitor_node src/component_state_monitor_node.cpp)
|
||||||
|
target_link_libraries(component_state_monitor_node component_state_lib)
|
||||||
ament_target_dependencies(component_state_monitor_node ${dependencies})
|
ament_target_dependencies(component_state_monitor_node ${dependencies})
|
||||||
|
|
||||||
target_link_libraries(component_state_monitor_node ${plugin_libs})
|
install(TARGETS
|
||||||
|
component_state_lib
|
||||||
# install(DIRECTORY launch
|
ARCHIVE DESTINATION lib
|
||||||
# DESTINATION share/${PROJECT_NAME}
|
LIBRARY DESTINATION lib
|
||||||
# )
|
RUNTIME DESTINATION bin
|
||||||
|
)
|
||||||
|
|
||||||
install(TARGETS
|
install(TARGETS
|
||||||
component_state_monitor_node
|
component_state_monitor_node
|
||||||
${plugin_libs}
|
|
||||||
DESTINATION lib/${PROJECT_NAME}
|
DESTINATION lib/${PROJECT_NAME}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -66,6 +55,4 @@ if(BUILD_TESTING)
|
||||||
ament_lint_auto_find_test_dependencies()
|
ament_lint_auto_find_test_dependencies()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# ament_export_dependencies(${dependencies})
|
|
||||||
|
|
||||||
ament_package()
|
ament_package()
|
|
@ -40,6 +40,8 @@ public:
|
||||||
scene_monitor_interfaces::msg::GraspPose getGraspPose(const std::string &grasp_pose_name) const;
|
scene_monitor_interfaces::msg::GraspPose getGraspPose(const std::string &grasp_pose_name) const;
|
||||||
std::vector<scene_monitor_interfaces::msg::GraspPose> getGraspPoses() const;
|
std::vector<scene_monitor_interfaces::msg::GraspPose> getGraspPoses() const;
|
||||||
geometry_msgs::msg::Pose getPlacementPose() const;
|
geometry_msgs::msg::Pose getPlacementPose() const;
|
||||||
|
|
||||||
|
void setFrameName(const std::string &frame_name);
|
||||||
|
|
||||||
void initializeFromJson(json &input);
|
void initializeFromJson(json &input);
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <rclcpp/timer.hpp>
|
#include <rclcpp/timer.hpp>
|
||||||
|
|
||||||
#include "scene_monitor_interfaces/srv/get_part.hpp"
|
#include "scene_monitor_interfaces/srv/get_part.hpp"
|
||||||
|
#include "scene_monitor_interfaces/srv/get_grasp_pose.hpp"
|
||||||
#include "scene_monitor_interfaces/srv/get_grasp_poses.hpp"
|
#include "scene_monitor_interfaces/srv/get_grasp_poses.hpp"
|
||||||
|
|
||||||
#include "component.hpp"
|
#include "component.hpp"
|
||||||
|
@ -13,6 +14,7 @@
|
||||||
namespace component_state_monitor
|
namespace component_state_monitor
|
||||||
{
|
{
|
||||||
using GetPartSrv = scene_monitor_interfaces::srv::GetPart;
|
using GetPartSrv = scene_monitor_interfaces::srv::GetPart;
|
||||||
|
using GetGraspPoseSrv = scene_monitor_interfaces::srv::GetGraspPose;
|
||||||
using GetGraspPosesSrv = scene_monitor_interfaces::srv::GetGraspPoses;
|
using GetGraspPosesSrv = scene_monitor_interfaces::srv::GetGraspPoses;
|
||||||
|
|
||||||
class ComponentStateMonitor: public rclcpp::Node
|
class ComponentStateMonitor: public rclcpp::Node
|
||||||
|
@ -30,9 +32,12 @@ private:
|
||||||
std::shared_ptr<GetPartSrv::Response> response);
|
std::shared_ptr<GetPartSrv::Response> response);
|
||||||
void getGraspPoses(const std::shared_ptr<GetGraspPosesSrv::Request> request,
|
void getGraspPoses(const std::shared_ptr<GetGraspPosesSrv::Request> request,
|
||||||
std::shared_ptr<GetGraspPosesSrv::Response> response);
|
std::shared_ptr<GetGraspPosesSrv::Response> response);
|
||||||
|
void getGraspPose(const std::shared_ptr<GetGraspPoseSrv::Request> request,
|
||||||
|
std::shared_ptr<GetGraspPoseSrv::Response> response);
|
||||||
|
|
||||||
std::map<std::string, Component> _loaded_components;
|
std::map<std::string, Component> _loaded_components;
|
||||||
rclcpp::Service<GetPartSrv>::SharedPtr _get_part_service;
|
rclcpp::Service<GetPartSrv>::SharedPtr _get_part_service;
|
||||||
|
rclcpp::Service<GetGraspPoseSrv>::SharedPtr _get_grasp_pose_service;
|
||||||
rclcpp::Service<GetGraspPosesSrv>::SharedPtr _get_grasp_poses_service;
|
rclcpp::Service<GetGraspPosesSrv>::SharedPtr _get_grasp_poses_service;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -44,6 +44,11 @@ namespace component_state_monitor
|
||||||
return grasp_poses;
|
return grasp_poses;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Component::setFrameName(const std::string &frame_name)
|
||||||
|
{
|
||||||
|
_frame_name = frame_name;
|
||||||
|
}
|
||||||
|
|
||||||
geometry_msgs::msg::Pose Component::getPlacementPose() const
|
geometry_msgs::msg::Pose Component::getPlacementPose() const
|
||||||
{
|
{
|
||||||
return _placement;
|
return _placement;
|
||||||
|
@ -103,6 +108,8 @@ namespace component_state_monitor
|
||||||
|
|
||||||
_grasp_poses.insert({grasp_pose.label, grasp_pose});
|
_grasp_poses.insert({grasp_pose.label, grasp_pose});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_current_state = ComponentState::Initialized;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -5,7 +5,6 @@
|
||||||
#include <ament_index_cpp/get_package_share_directory.hpp>
|
#include <ament_index_cpp/get_package_share_directory.hpp>
|
||||||
|
|
||||||
#include "component_state_monitor.hpp"
|
#include "component_state_monitor.hpp"
|
||||||
#include "nlohmann_json/json.hpp"
|
|
||||||
|
|
||||||
namespace component_state_monitor
|
namespace component_state_monitor
|
||||||
{
|
{
|
||||||
|
@ -21,6 +20,11 @@ namespace component_state_monitor
|
||||||
std::bind(&ComponentStateMonitor::getGraspPoses, this,
|
std::bind(&ComponentStateMonitor::getGraspPoses, this,
|
||||||
std::placeholders::_1, std::placeholders::_2));
|
std::placeholders::_1, std::placeholders::_2));
|
||||||
|
|
||||||
|
RCLCPP_INFO(this->get_logger(), "Initialize [get_grasp_pose] service");
|
||||||
|
_get_grasp_pose_service = this->create_service<GetGraspPoseSrv>("scene_monitor/get_grasp_pose",
|
||||||
|
std::bind(&ComponentStateMonitor::getGraspPose, this,
|
||||||
|
std::placeholders::_1, std::placeholders::_2));
|
||||||
|
|
||||||
std::string package_name = "sdf_models";
|
std::string package_name = "sdf_models";
|
||||||
initializeComponents(package_name);
|
initializeComponents(package_name);
|
||||||
}
|
}
|
||||||
|
@ -71,6 +75,26 @@ namespace component_state_monitor
|
||||||
RCLCPP_INFO(this->get_logger(), "[get_grasp_poses] Sending back response");
|
RCLCPP_INFO(this->get_logger(), "[get_grasp_poses] Sending back response");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ComponentStateMonitor::getGraspPose(const std::shared_ptr<GetGraspPoseSrv::Request> request,
|
||||||
|
std::shared_ptr<GetGraspPoseSrv::Response> response)
|
||||||
|
{
|
||||||
|
RCLCPP_INFO(this->get_logger(), "[get_grasp_pose] Incoming request");
|
||||||
|
if (_loaded_components.find(request->frame_id) != _loaded_components.end())
|
||||||
|
{
|
||||||
|
auto component = _loaded_components.at(request->frame_id);
|
||||||
|
response->grasp_pose = component.getGraspPose(request->grasp_pose_name);
|
||||||
|
response->success = true;
|
||||||
|
response->message = "succesfully received a response from service [get_grasp_pose]";
|
||||||
|
} else {
|
||||||
|
|
||||||
|
RCLCPP_WARN(this->get_logger(), "[get_grasp_pose] Frame with name (%s) not loaded in component_state_monitor", request->frame_id.c_str());
|
||||||
|
response->success = false;
|
||||||
|
response->message = "could not found frame (%s) in component_state_monitor";
|
||||||
|
}
|
||||||
|
|
||||||
|
RCLCPP_INFO(this->get_logger(), "[get_grasp_pose] Sending back response");
|
||||||
|
}
|
||||||
|
|
||||||
void ComponentStateMonitor::initializeComponents(const std::string& package_name)
|
void ComponentStateMonitor::initializeComponents(const std::string& package_name)
|
||||||
{
|
{
|
||||||
RCLCPP_INFO(this->get_logger(), "Start read package (%s)", package_name.c_str());
|
RCLCPP_INFO(this->get_logger(), "Start read package (%s)", package_name.c_str());
|
||||||
|
@ -82,21 +106,42 @@ namespace component_state_monitor
|
||||||
|
|
||||||
std::string package_share_directory = ament_index_cpp::get_package_share_directory(package_name);
|
std::string package_share_directory = ament_index_cpp::get_package_share_directory(package_name);
|
||||||
std::filesystem::path models_path = package_share_directory + "/models/";
|
std::filesystem::path models_path = package_share_directory + "/models/";
|
||||||
|
|
||||||
|
if (!std::filesystem::exists(models_path))
|
||||||
|
{
|
||||||
|
RCLCPP_WARN(this->get_logger(), "Package (%s) does not contain '/models/' directory", package_name.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
for (const auto &entry: std::filesystem::directory_iterator(models_path))
|
for (const auto &entry: std::filesystem::directory_iterator(models_path))
|
||||||
{
|
{
|
||||||
RCLCPP_INFO(this->get_logger(), "Start read frame (%s)", entry.path().c_str());
|
std::string frame_directory_name = entry.path().string();
|
||||||
std::filesystem::path json_path = entry.path().string() + "/frames.json";
|
std::string frame_name = frame_directory_name.substr(frame_directory_name.find_last_of("/")+1, frame_directory_name.size()-1);
|
||||||
RCLCPP_INFO(this->get_logger(), "Start read frame metadata (%s)", json_path.c_str());
|
|
||||||
|
RCLCPP_INFO(this->get_logger(), "Start read frame (%s)", frame_name.c_str());
|
||||||
|
std::filesystem::path json_path = entry.path().string() + "/frames.json";
|
||||||
|
|
||||||
std::ifstream json_file(json_path);
|
|
||||||
auto input = json::parse(json_file);
|
|
||||||
Component component;
|
Component component;
|
||||||
|
|
||||||
component.initializeFromJson(input);
|
if (!std::filesystem::exists(json_path))
|
||||||
|
{
|
||||||
|
RCLCPP_WARN(this->get_logger(), "Package (%s) with frame (%s) does not contain 'frames.json' file", package_name.c_str(), frame_name.c_str());
|
||||||
|
RCLCPP_INFO(this->get_logger(), "Initialize empty component with frame name (%s)", frame_name.c_str());
|
||||||
|
|
||||||
|
component.setFrameName(frame_name);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
RCLCPP_INFO(this->get_logger(), "Start read frame metadata (%s)", json_path.c_str());
|
||||||
|
|
||||||
|
std::ifstream json_file(json_path);
|
||||||
|
auto input = json::parse(json_file);
|
||||||
|
|
||||||
|
component.initializeFromJson(input);
|
||||||
|
}
|
||||||
|
|
||||||
_loaded_components.insert({component.getFrameName(), component});
|
_loaded_components.insert({component.getFrameName(), component});
|
||||||
|
|
||||||
RCLCPP_INFO(this->get_logger(), "Successfully initialize component");
|
RCLCPP_INFO(this->get_logger(), "Successfully initialize component (%s)", component.getFrameName().c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -25,6 +25,7 @@ set(msg_files
|
||||||
)
|
)
|
||||||
|
|
||||||
set(srv_files
|
set(srv_files
|
||||||
|
"srv/GetGraspPose.srv"
|
||||||
"srv/GetGraspPoses.srv"
|
"srv/GetGraspPoses.srv"
|
||||||
"srv/GetPart.srv"
|
"srv/GetPart.srv"
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
string frame_id
|
||||||
|
string grasp_pose_name
|
||||||
|
---
|
||||||
|
#result definition
|
||||||
|
GraspPose grasp_pose
|
||||||
|
|
||||||
|
bool success # indicate successful run of triggered service
|
||||||
|
string message # informational, e.g. for error messages
|
Loading…
Add table
Add a link
Reference in a new issue