kinematics-dynamics
Loading...
Searching...
No Matches
CartesianControlClientROS2.hpp
1// -*- mode:C++; tab-width:4; c-basic-offset:4; indent-tabs-mode:nil -*-
2
3#ifndef __CARTESIAN_CONTROL_CLIENT_ROS2_HPP__
4#define __CARTESIAN_CONTROL_CLIENT_ROS2_HPP__
5
6#include <atomic>
7#include <mutex>
8#include <string>
9#include <vector>
10
11#include <yarp/dev/Drivers.h>
12
13#include <rclcpp/rclcpp.hpp>
14#include <rclcpp_action/rclcpp_action.hpp>
15
16#include <std_srvs/srv/trigger.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 <rcl_interfaces/srv/get_parameters.hpp>
24#include <rcl_interfaces/srv/set_parameters.hpp>
25
26#include <rl_cartesian_control_msgs/srv/actuate_tool.hpp>
27#include <rl_cartesian_control_msgs/srv/change_tool.hpp>
28#include <rl_cartesian_control_msgs/srv/force_control.hpp>
29#include <rl_cartesian_control_msgs/srv/move_velocity.hpp>
30#include <rl_cartesian_control_msgs/srv/solve_pose.hpp>
31
32#include <rl_cartesian_control_msgs/action/pose_trajectory.hpp>
33
34#include "Ros2Utils.hpp"
35#include "ICartesianControl.h"
36#include "CartesianControlClientROS2_ParamsParser.h"
37
49class CartesianControlClientROS2 : public yarp::dev::DeviceDriver,
52{
53public:
54 // -- ICartesianControl declarations. Implementation in ICartesianControlImpl.cpp --
55
56 // RPC commands
57 yarp::dev::ReturnValue getState(roboticslab::ICartesianControl::ControllerState & state) override;
58 yarp::dev::ReturnValue solvePose(const std::vector<double> & xd, std::vector<double> & q) override;
59 yarp::dev::ReturnValue moveJoint(const std::vector<double> & xd) override;
60 yarp::dev::ReturnValue moveLinear(const std::vector<double> & xd) override;
61 yarp::dev::ReturnValue moveVelocity(const std::vector<double> & xdotd) override;
62 yarp::dev::ReturnValue gravityCompensation() override;
63 yarp::dev::ReturnValue forceControl(const std::vector<double> & fd) override;
64 yarp::dev::ReturnValue stopControl() override;
65 yarp::dev::ReturnValue changeTool(const std::vector<double> & x) override;
66 yarp::dev::ReturnValue actuateTool(roboticslab::ICartesianControl::Actuator command) override;
67
68 // streaming commands
69 void pose(const std::vector<double> & x) override;
70 void twist(const std::vector<double> & xdot) override;
71 void wrench(const std::vector<double> & w) override;
72
73 // configuration getters/setters
74 yarp::dev::ReturnValue setParameter(roboticslab::ICartesianControl::Config vocab, double value) override;
75 yarp::dev::ReturnValue getParameter(roboticslab::ICartesianControl::Config vocab, double * value) override;
76 yarp::dev::ReturnValue setParameters(const std::map<roboticslab::ICartesianControl::Config, double> & params) override;
77 yarp::dev::ReturnValue getParameters(std::map<roboticslab::ICartesianControl::Config, double> & params) override;
78
79 // -------- DeviceDriver declarations. Implementation in DeviceDriverImpl.cpp --------
80 bool open(yarp::os::Searchable & config) override;
81 bool close() override;
82
83private:
84 bool configureRosHandlers();
85 bool populateRosParameters();
86 yarp::dev::ReturnValue sendTrajectoryGoal(roboticslab::ICartesianControl::Mode mode, const std::vector<double> & xd);
87
88 rclcpp::Node::SharedPtr m_node;
89 roboticslab::ros2utils::Spinner::Ptr m_spinner;
90
91 rclcpp::Publisher<geometry_msgs::msg::Pose>::SharedPtr m_pose;
92 rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr m_twist;
93 rclcpp::Publisher<geometry_msgs::msg::Wrench>::SharedPtr m_wrench;
94
95 rclcpp::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr m_state;
96
97 rclcpp_action::Client<rl_cartesian_control_msgs::action::PoseTrajectory>::SharedPtr m_trajectory;
98
99 rclcpp::Client<rl_cartesian_control_msgs::srv::MoveVelocity>::SharedPtr m_move_v;
100 rclcpp::Client<rl_cartesian_control_msgs::srv::ForceControl>::SharedPtr m_force;
101 rclcpp::Client<rl_cartesian_control_msgs::srv::ChangeTool>::SharedPtr m_tool;
102 rclcpp::Client<rl_cartesian_control_msgs::srv::SolvePose>::SharedPtr m_inv;
103 rclcpp::Client<rl_cartesian_control_msgs::srv::ActuateTool>::SharedPtr m_act;
104
105 rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr m_gcmp;
106 rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr m_stop;
107
108 rclcpp::Client<rcl_interfaces::srv::GetParameters>::SharedPtr m_get_params;
109 rclcpp::Client<rcl_interfaces::srv::SetParameters>::SharedPtr m_set_params;
110
111 std::mutex m_mutex_state;
112 geometry_msgs::msg::PoseStamped m_pose_last;
113 std::atomic<float> m_progress {1.0f};
114 std::atomic<bool> m_success {false};
115
116 std::vector<std::string> m_supported_parameters;
117};
118
119#endif // __CARTESIAN_CONTROL_CLIENT_ROS2_HPP__
Definition CartesianControlClientROS2_ParamsParser.h:43
The CartesianControlClientROS2 class implements ICartesianControl client side.
Definition CartesianControlClientROS2.hpp:52
void wrench(const std::vector< double > &w) override
Exert force.
Definition ICartesianControlImpl.cpp:498
void pose(const std::vector< double > &x) override
Achieve pose.
Definition ICartesianControlImpl.cpp:461
yarp::dev::ReturnValue moveJoint(const std::vector< double > &xd) override
Move in joint space.
Definition ICartesianControlImpl.cpp:309
void twist(const std::vector< double > &xdot) override
Instantaneous velocity steps.
Definition ICartesianControlImpl.cpp:483
yarp::dev::ReturnValue changeTool(const std::vector< double > &x) override
Change tool.
Definition ICartesianControlImpl.cpp:395
yarp::dev::ReturnValue solvePose(const std::vector< double > &xd, std::vector< double > &q) override
Inverse kinematics.
Definition ICartesianControlImpl.cpp:205
yarp::dev::ReturnValue stopControl() override
Stop control.
Definition ICartesianControlImpl.cpp:382
yarp::dev::ReturnValue getParameter(roboticslab::ICartesianControl::Config vocab, double *value) override
Retrieve a configuration parameter.
Definition ICartesianControlImpl.cpp:541
yarp::dev::ReturnValue forceControl(const std::vector< double > &fd) override
Force control.
Definition ICartesianControlImpl.cpp:359
yarp::dev::ReturnValue getState(roboticslab::ICartesianControl::ControllerState &state) override
Current state and position.
Definition ICartesianControlImpl.cpp:181
yarp::dev::ReturnValue moveVelocity(const std::vector< double > &xdotd) override
Linear move with given velocity.
Definition ICartesianControlImpl.cpp:323
yarp::dev::ReturnValue setParameter(roboticslab::ICartesianControl::Config vocab, double value) override
Set a configuration parameter.
Definition ICartesianControlImpl.cpp:513
yarp::dev::ReturnValue actuateTool(roboticslab::ICartesianControl::Actuator command) override
Actuate tool.
Definition ICartesianControlImpl.cpp:425
yarp::dev::ReturnValue moveLinear(const std::vector< double > &xd) override
Linear move to target position.
Definition ICartesianControlImpl.cpp:316
yarp::dev::ReturnValue gravityCompensation() override
Gravity compensation.
Definition ICartesianControlImpl.cpp:346
Abstract base class for a cartesian controller.
Definition ICartesianControl.h:22
Mode
Controller mode vocabs.
Definition ICartesianControl.h:75
Actuator
Actuator control vocabs.
Definition ICartesianControl.h:90
Config
Controller configuration vocabs.
Definition ICartesianControl.h:104
Controller state structure.
Definition ICartesianControl.h:120