sas
Modularised monitoring, logging, and control of robots.
Loading...
Searching...
No Matches
sas_robot_kinematics_server.hpp
1#pragma once
2/*
3# Copyright (c) 2020-2023 Murilo Marques Marinho
4#
5# This file is part of sas_robot_kinematics.
6#
7# sas_robot_kinematics is free software: you can redistribute it and/or modify
8# it under the terms of the GNU Lesser General Public License as published by
9# the Free Software Foundation, either version 3 of the License, or
10# (at your option) any later version.
11#
12# sas_robot_driver is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15# GNU Lesser General Public License for more details.
16#
17# You should have received a copy of the GNU Lesser General Public License
18# along with sas_robot_kinematics. If not, see <https://www.gnu.org/licenses/>.
19#
20# ################################################################
21#
22# Author: Murilo M. Marinho, email: murilomarinho@ieee.org
23#
24# ################################################################*/
25
26#include <atomic>
27
28#include <dqrobotics/DQ.h>
29
30#include <rclcpp/rclcpp.hpp>
31#include <geometry_msgs/msg/pose_stamped.hpp>
33#include <sas_msgs/msg/float64.hpp>
34
35using namespace rclcpp;
36using namespace DQ_robotics;
37
38namespace sas
39{
48class RobotKinematicsServer: private sas::Object
49{
50protected:
51 std::shared_ptr<Node> node_;
52
53 std::atomic_bool enabled_;
54 const std::string topic_prefix_;
55
56 Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr publisher_pose_;
57 Publisher<geometry_msgs::msg::PoseStamped>::SharedPtr publisher_reference_frame_;
58
59 Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr subscriber_desired_pose_;
60 DQ desired_pose_;
61 Subscription<sas_msgs::msg::Float64>::SharedPtr subscriber_desired_interpolator_speed_;
62 double desired_interpolator_speed_;
63
64 void _callback_desired_pose(const geometry_msgs::msg::PoseStamped& msg);
65 void _callback_desired_interpolator_speed(const sas_msgs::msg::Float64& msg);
66public:
67 RobotKinematicsServer()=delete;
68 RobotKinematicsServer(const RobotKinematicsServer&)=delete;
69
70#ifdef IS_SAS_PYTHON_BUILD
71 RobotKinematicsServer(const std::string& topic_prefix);
72#endif
73
82 RobotKinematicsServer(const std::shared_ptr<Node>& node, const std::string& topic_prefix);
83
88 DQ get_desired_pose() const;
89
94 double get_desired_interpolator_speed() const;
95
100 bool is_enabled() const;
101
106 void send_pose(const DQ& pose) const;
107
112 void send_reference_frame(const DQ& reference_frame) const;
113
114};
115
116}
Base class for SAS objects.
Definition sas_object.hpp:40
bool is_enabled() const
Check whether the server is enabled (publishers/subscribers active).
Definition sas_robot_kinematics_server.cpp:75
void send_pose(const DQ &pose) const
Publish the current robot pose.
Definition sas_robot_kinematics_server.cpp:97
double get_desired_interpolator_speed() const
Get the most recently received desired interpolator speed.
Definition sas_robot_kinematics_server.cpp:92
void send_reference_frame(const DQ &reference_frame) const
Publish the robot's reference frame pose.
Definition sas_robot_kinematics_server.cpp:102
DQ get_desired_pose() const
Get the most recently received desired pose.
Definition sas_robot_kinematics_server.cpp:80
Base object class for identification and license utilities.