rtt_rosdeployment_service.cpp
Go to the documentation of this file.
1 
2 #include <rtt/RTT.hpp>
3 #include <rtt/plugin/Plugin.hpp>
7 
8 #include <rtt_ros_msgs/Eval.h>
9 #include <rtt_ros_msgs/RunScript.h>
10 #include <rtt_ros_msgs/GetPeerList.h>
11 
12 #include <ocl/DeploymentComponent.hpp>
13 
14 #include <ros/ros.h>
15 
16 using namespace RTT;
17 using namespace std;
18 
20 {
21 public:
23 
24 private:
26 
28 
32 
33  bool eval_cb(
34  rtt_ros_msgs::Eval::Request& request,
35  rtt_ros_msgs::Eval::Response& response);
36 
37  bool run_script_cb(
38  rtt_ros_msgs::RunScript::Request& request,
39  rtt_ros_msgs::RunScript::Response& response);
40 
41  bool get_peer_list_cb(
42  rtt_ros_msgs::GetPeerList::Request& request,
43  rtt_ros_msgs::GetPeerList::Response& response);
44 
46 };
47 
48 
50  Service("rosdeployment", static_cast<RTT::TaskContext*>(deployer)),
51  deployer_(deployer),
52  nh_("~"+deployer->getName())
53 {
54  if(deployer_) {
55  // Create services
59 
60  eval_ = deployer_->getProvider<RTT::Scripting>("scripting")->eval;
61  } else {
62  RTT::log(RTT::Error) << "Attempted to load the rosdeployment service on a TaskContext which is not an OCL::DeploymentComponent. No ROS services will be advertised." << RTT::endlog();
63  }
64 }
65 
67  rtt_ros_msgs::Eval::Request& request,
68  rtt_ros_msgs::Eval::Response& response)
69 {
70  if (!eval_.ready()) return false;
71  response.success = eval_(request.code);
72  return true;
73 }
74 
76  rtt_ros_msgs::RunScript::Request& request,
77  rtt_ros_msgs::RunScript::Response& response)
78 {
79  response.success = deployer_->runScript(request.file_path);
80  return true;
81 }
82 
84  rtt_ros_msgs::GetPeerList::Request& request,
85  rtt_ros_msgs::GetPeerList::Response& response)
86 {
87  response.peers = deployer_->getPeerList();
88  return true;
89 }
90 
92  OCL::DeploymentComponent *deployer = dynamic_cast<OCL::DeploymentComponent*>(tc);
93 
94  if(!deployer) {
95  RTT::log(RTT::Error) << "The rosdeployment service must be loaded on a valid OCL::DeploymentComponent" <<RTT::endlog();
96  return false;
97  }
98 
99  deployer->import("rtt_rosnode");
100 
101  if(!ros::isInitialized()) {
102  RTT::log(RTT::Error) << "The rtt_rosdeployment plugin cannot be used without the rtt_rosnode plugin. Please load rtt_rosnode." << RTT::endlog();
103 
104  return false;
105  }
106 
107  RTT::Service::shared_ptr sp( new ROSDeploymentService( deployer ) );
108  return tc->provides()->addService( sp );
109 }
110 
111 extern "C" {
112  RTT_EXPORT bool loadRTTPlugin(RTT::TaskContext* tc);
114  if(tc == 0) return true;
115  return loadROSDeploymentService(tc);
116  }
120  return sp;
121  }
122  RTT_EXPORT std::string getRTTPluginName();
123  std::string getRTTPluginName() {
124  return "rosdeployment";
125  }
126  RTT_EXPORT std::string getRTTTargetName();
127  std::string getRTTTargetName() {
128  return OROCOS_TARGET_NAME;
129  }
130 }
131 
ros::ServiceServer run_script_service_
OCL::DeploymentComponent * deployer_
bool eval_cb(rtt_ros_msgs::Eval::Request &request, rtt_ros_msgs::Eval::Response &response)
Service::shared_ptr provides()
bool ready() const
ROSCPP_DECL bool isInitialized()
bool loadROSDeploymentService(RTT::TaskContext *tc)
std::string getName(void *handle)
ROSDeploymentService(OCL::DeploymentComponent *deployer)
bool import(const std::string &package)
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
RTT::OperationCaller< bool(std::string const &)> eval_
bool get_peer_list_cb(rtt_ros_msgs::GetPeerList::Request &request, rtt_ros_msgs::GetPeerList::Response &response)
virtual PeerList getPeerList() const
RTT_EXPORT bool loadRTTPlugin(RTT::TaskContext *tc)
RTT_EXPORT RTT::Service::shared_ptr createService()
RTT_EXPORT std::string getRTTPluginName()
RTT_EXPORT std::string getRTTTargetName()
bool runScript(const std::string &file_name)
ros::ServiceServer get_peer_list_service_
static Logger & log()
bool run_script_cb(rtt_ros_msgs::RunScript::Request &request, rtt_ros_msgs::RunScript::Response &response)
static Logger::LogFunction endlog()
boost::shared_ptr< ServiceType > getProvider(const std::string &name)


rtt_rosdeployment
Author(s): Jonthan Bohren
autogenerated on Mon May 10 2021 02:44:51