3#ifndef __CARTESIAN_CONTROL_CLIENT_ROS2_HPP__
4#define __CARTESIAN_CONTROL_CLIENT_ROS2_HPP__
11#include <yarp/dev/Drivers.h>
13#include <rclcpp/rclcpp.hpp>
14#include <rclcpp_action/rclcpp_action.hpp>
16#include <std_srvs/srv/trigger.hpp>
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>
23#include <rcl_interfaces/srv/get_parameters.hpp>
24#include <rcl_interfaces/srv/set_parameters.hpp>
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>
32#include <rl_cartesian_control_msgs/action/pose_trajectory.hpp>
34#include "Ros2Utils.hpp"
35#include "ICartesianControl.h"
36#include "CartesianControlClientROS2_ParamsParser.h"
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;
63 yarp::dev::ReturnValue
forceControl(
const std::vector<double> & fd)
override;
65 yarp::dev::ReturnValue
changeTool(
const std::vector<double> & x)
override;
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;
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;
80 bool open(yarp::os::Searchable & config)
override;
81 bool close()
override;
84 bool configureRosHandlers();
85 bool populateRosParameters();
88 rclcpp::Node::SharedPtr m_node;
89 roboticslab::ros2utils::Spinner::Ptr m_spinner;
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;
95 rclcpp::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr m_state;
97 rclcpp_action::Client<rl_cartesian_control_msgs::action::PoseTrajectory>::SharedPtr m_trajectory;
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;
105 rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr m_gcmp;
106 rclcpp::Client<std_srvs::srv::Trigger>::SharedPtr m_stop;
108 rclcpp::Client<rcl_interfaces::srv::GetParameters>::SharedPtr m_get_params;
109 rclcpp::Client<rcl_interfaces::srv::SetParameters>::SharedPtr m_set_params;
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};
116 std::vector<std::string> m_supported_parameters;
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