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
15#include <rcl_interfaces/msg/set_parameters_result.hpp>
16
17#include <geometry_msgs/msg/pose.hpp>
18#include <geometry_msgs/msg/pose_stamped.hpp>
19#include <geometry_msgs/msg/twist.hpp>
20#include <geometry_msgs/msg/wrench.hpp>
21
22#include <std_msgs/msg/int32.hpp>
23#include <std_srvs/srv/trigger.hpp>
24
25#include <kdl/frames.hpp>
26
27#include <rl_cartesian_control_msgs/srv/inv.hpp>
28
29#include "Spinner.hpp"
30#include "ICartesianControl.h"
31#include "CartesianControlServerROS2_ParamsParser.h"
32
40class CartesianControlServerROS2 : public yarp::dev::DeviceDriver,
41 public yarp::dev::WrapperSingle,
42 public yarp::os::PeriodicThread,
44{
45public:
46 CartesianControlServerROS2() : yarp::os::PeriodicThread(1.0)
47 {}
48
49 // Implementation in DeviceDriverImpl.cpp
50 bool open(yarp::os::Searchable & config) override;
51 bool close() override;
52
53 // Implementation in IWrapperImpl.cpp
54 bool attach(yarp::dev::PolyDriver * poly) override;
55 bool detach() override;
56
57 // Implementation in PeriodicThread.cpp
58 void run() override;
59
60private:
61 bool configureRosHandlers();
62 bool configureRosParameters();
63 void destroyRosHandlers();
64
65 roboticslab::ICartesianControl * m_iCartesianControl;
66
67 Spinner * m_spinner;
68
69 rclcpp::Node::SharedPtr m_node;
70
71 rclcpp::Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr m_stat;
72
73 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_pose;
74 rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr m_twist;
75 rclcpp::Subscription<geometry_msgs::msg::Wrench>::SharedPtr m_wrench;
76
77 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_movj;
78 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_relj;
79 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_movl;
80 rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr m_movv;
81 rclcpp::Subscription<geometry_msgs::msg::Wrench>::SharedPtr m_forc;
82 rclcpp::Subscription<geometry_msgs::msg::Pose>::SharedPtr m_tool;
83 rclcpp::Subscription<std_msgs::msg::Int32>::SharedPtr m_act;
84
85 rclcpp::Service<rl_cartesian_control_msgs::srv::Inv>::SharedPtr m_inv;
86 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr m_gcmp;
87 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr m_stop;
88
89 rclcpp::node_interfaces::OnSetParametersCallbackHandle::SharedPtr m_params;
90
91 rcl_interfaces::msg::SetParametersResult params_cb(const std::vector<rclcpp::Parameter> &parameters);
92
93 // Note that the order of gripper_state enum values must match the order from spacenav_device. If modifying this, please update.
94 enum gripper_state { GRIPPER_NONE, GRIPPER_OPEN, GRIPPER_CLOSE, GRIPPER_STOP };
95};
96
97#endif // __CARTESIAN_CONTROL_SERVER_ROS2_HPP__
Contains roboticslab::ICartesianControl and related vocabs.
Definition CartesianControlServerROS2_ParamsParser.h:43
Definition CartesianControlServerROS2.hpp:44
Definition Spinner.hpp:11
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:145