kinematics-dynamics
Loading...
Searching...
No Matches
CartesianControlServerROS2.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CARTESIAN_CONTROL_SERVER_ROS2_HPP__
4#define __CARTESIAN_CONTROL_SERVER_ROS2_HPP__
5
6#include <string>
7
8#include <yarp/os/PeriodicThread.h>
9
10#include <yarp/dev/DeviceDriver.h>
11#include <yarp/dev/WrapperSingle.h>
12
13#include <rclcpp/rclcpp.hpp>
14#include <rclcpp_action/rclcpp_action.hpp>
15
16#include <rcl_interfaces/msg/set_parameters_result.hpp>
17
18#include <geometry_msgs/msg/pose.hpp>
19#include <geometry_msgs/msg/pose_stamped.hpp>
20#include <geometry_msgs/msg/twist.hpp>
21#include <geometry_msgs/msg/wrench.hpp>
22
23#include <std_srvs/srv/trigger.hpp>
24
25#include <kdl/frames.hpp>
26
27#include <rl_cartesian_control_msgs/srv/actuate_tool.hpp>
28#include <rl_cartesian_control_msgs/srv/change_tool.hpp>
29#include <rl_cartesian_control_msgs/srv/force_control.hpp>
30#include <rl_cartesian_control_msgs/srv/move_velocity.hpp>
31#include <rl_cartesian_control_msgs/srv/solve_pose.hpp>
32
33#include <rl_cartesian_control_msgs/action/pose_trajectory.hpp>
34
35#include "Ros2Utils.hpp"
36#include "ICartesianControl.h"
37#include "CartesianControlServerROS2_ParamsParser.h"
38
46class CartesianControlServerROS2 : public yarp::dev::DeviceDriver,
47 public yarp::dev::WrapperSingle,
48 public yarp::os::PeriodicThread,
50{
51public:
52 CartesianControlServerROS2() : yarp::os::PeriodicThread(1.0)
53 {}
54
55 // Implementation in DeviceDriverImpl.cpp
56 bool open(yarp::os::Searchable & config) override;
57 bool close() override;
58
59 // Implementation in IWrapperImpl.cpp
60 bool attach(yarp::dev::PolyDriver * poly) override;
61 bool detach() override;
62
63 // Implementation in PeriodicThread.cpp
64 void run() override;
65
66private:
67 bool configureRosHandlers();
68 bool configureRosParameters();
69 void destroyRosHandlers();
70
71 roboticslab::ICartesianControl * m_iCartesianControl;
72
73 roboticslab::ros2utils::Spinner::Ptr m_spinner;
74
75 rclcpp::Node::SharedPtr m_node;
76
77 rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr m_state;
78
79 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_pose;
80 rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr m_twist;
81 rclcpp::Subscription<geometry_msgs::msg::Wrench>::SharedPtr m_wrench;
82
83 rclcpp::Service<rl_cartesian_control_msgs::srv::MoveVelocity>::SharedPtr m_move_v;
84 rclcpp::Service<rl_cartesian_control_msgs::srv::ForceControl>::SharedPtr m_force;
85 rclcpp::Service<rl_cartesian_control_msgs::srv::ChangeTool>::SharedPtr m_tool;
86 rclcpp::Service<rl_cartesian_control_msgs::srv::SolvePose>::SharedPtr m_inv;
87 rclcpp::Service<rl_cartesian_control_msgs::srv::ActuateTool>::SharedPtr m_act;
88
89 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr m_gcmp;
90 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr m_stop;
91
92 rclcpp_action::Server<rl_cartesian_control_msgs::action::PoseTrajectory>::SharedPtr m_trajectory;
93 std::shared_ptr<rclcpp_action::ServerGoalHandle<rl_cartesian_control_msgs::action::PoseTrajectory>> m_goalHandle;
94
95 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr m_params;
96
97 rcl_interfaces::msg::SetParametersResult params_cb(const std::vector<rclcpp::Parameter> & parameters);
98};
99
100#endif // __CARTESIAN_CONTROL_SERVER_ROS2_HPP__
Definition CartesianControlServerROS2_ParamsParser.h:43
Definition CartesianControlServerROS2.hpp:50
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22