ros2_canopen master
C++ ROS CANopen Library
Loading...
Searching...
No Matches
node_canopen_402_driver.hpp
Go to the documentation of this file.
1// Copyright 2023 Christoph Hellmann Santos
2// Vishnuprasad Prachandabhanu
3// Lovro Ivanov
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful,
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13// GNU General Public License for more details.
14//
15// You should have received a copy of the GNU General Public License
16// along with this program. If not, see <https://www.gnu.org/licenses/>.
17//
18
19#ifndef NODE_CANOPEN_402_DRIVER
20#define NODE_CANOPEN_402_DRIVER
21
24#include "canopen_interfaces/srv/co_target_double.hpp"
26#include "sensor_msgs/msg/joint_state.hpp"
27
28namespace ros2_canopen
29{
30namespace node_interfaces
31{
32
33template <class NODETYPE>
35{
36 static_assert(
37 std::is_base_of<rclcpp::Node, NODETYPE>::value ||
38 std::is_base_of<rclcpp_lifecycle::LifecycleNode, NODETYPE>::value,
39 "NODETYPE must derive from rclcpp::Node or rclcpp_lifecycle::LifecycleNode");
40
41protected:
42 std::shared_ptr<Motor402> motor_;
43 rclcpp::TimerBase::SharedPtr timer_;
44 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_init_service;
45 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_enable_service;
46 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_disable_service;
47 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_halt_service;
48 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_recover_service;
49 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_position_service;
50 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_torque_service;
51 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_velocity_service;
52 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_cyclic_velocity_service;
53 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_cyclic_position_service;
54 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_cyclic_torque_service;
55 rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_interpolated_position_service;
56 rclcpp::Service<canopen_interfaces::srv::COTargetDouble>::SharedPtr handle_set_target_service;
57 rclcpp::Publisher<sensor_msgs::msg::JointState>::SharedPtr publish_joint_state;
66
67 void publish();
68 virtual void poll_timer_callback() override;
69 void diagnostic_callback(diagnostic_updater::DiagnosticStatusWrapper & stat) override;
70
71public:
72 NodeCanopen402Driver(NODETYPE * node);
73
74 virtual void init(bool called_from_base) override;
75 virtual void configure(bool called_from_base) override;
76 virtual void activate(bool called_from_base) override;
77 virtual void deactivate(bool called_from_base) override;
78 virtual void add_to_master() override;
79
80 virtual double get_speed() { return motor_->get_speed() * scale_vel_from_dev_; }
81
82 virtual double get_position()
83 {
84 return motor_->get_position() * scale_pos_from_dev_ + offset_pos_from_dev_;
85 }
86
87 virtual uint16_t get_mode() { return motor_->getMode(); }
88
98 void handle_init(
99 const std_srvs::srv::Trigger::Request::SharedPtr request,
100 std_srvs::srv::Trigger::Response::SharedPtr response);
101
111 void handle_enable(
112 const std_srvs::srv::Trigger::Request::SharedPtr request,
113 std_srvs::srv::Trigger::Response::SharedPtr response);
114
124 void handle_disable(
125 const std_srvs::srv::Trigger::Request::SharedPtr request,
126 std_srvs::srv::Trigger::Response::SharedPtr response);
127
139 bool init_motor();
140
150 void handle_recover(
151 const std_srvs::srv::Trigger::Request::SharedPtr request,
152 std_srvs::srv::Trigger::Response::SharedPtr response);
153
164 bool recover_motor();
165
176 void handle_halt(
177 const std_srvs::srv::Trigger::Request::SharedPtr request,
178 std_srvs::srv::Trigger::Response::SharedPtr response);
179
191 bool halt_motor();
192
203 bool set_operation_mode(uint16_t mode);
204
216 const std_srvs::srv::Trigger::Request::SharedPtr request,
217 std_srvs::srv::Trigger::Response::SharedPtr response);
218
230 const std_srvs::srv::Trigger::Request::SharedPtr request,
231 std_srvs::srv::Trigger::Response::SharedPtr response);
232
244 const std_srvs::srv::Trigger::Request::SharedPtr request,
245 std_srvs::srv::Trigger::Response::SharedPtr response);
246
258 const std_srvs::srv::Trigger::Request::SharedPtr request,
259 std_srvs::srv::Trigger::Response::SharedPtr response);
260
272 const std_srvs::srv::Trigger::Request::SharedPtr request,
273 std_srvs::srv::Trigger::Response::SharedPtr response);
274
286 const std_srvs::srv::Trigger::Request::SharedPtr request,
287 std_srvs::srv::Trigger::Response::SharedPtr response);
288
300 const std_srvs::srv::Trigger::Request::SharedPtr request,
301 std_srvs::srv::Trigger::Response::SharedPtr response);
302
314 const canopen_interfaces::srv::COTargetDouble::Request::SharedPtr request,
315 canopen_interfaces::srv::COTargetDouble::Response::SharedPtr response);
316
328 bool set_target(double target);
329};
330} // namespace node_interfaces
331} // namespace ros2_canopen
332
333#endif
InternalState
Definition state.hpp:50
Definition node_canopen_402_driver.hpp:35
double scale_vel_from_dev_
Definition node_canopen_402_driver.hpp:61
double scale_vel_to_dev_
Definition node_canopen_402_driver.hpp:60
double offset_pos_to_dev_
Definition node_canopen_402_driver.hpp:62
void handle_set_mode_cyclic_velocity(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set cyclic velocity mode.
Definition node_canopen_402_driver_impl.hpp:499
void handle_halt(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to halt device.
Definition node_canopen_402_driver_impl.hpp:457
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_interpolated_position_service
Definition node_canopen_402_driver.hpp:55
void handle_enable(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to enable device.
Definition node_canopen_402_driver_impl.hpp:564
void handle_init(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to initialise device.
Definition node_canopen_402_driver_impl.hpp:436
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_torque_service
Definition node_canopen_402_driver.hpp:50
bool set_target(double target)
Method to set target.
Definition node_canopen_402_driver_impl.hpp:634
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_enable_service
Definition node_canopen_402_driver.hpp:45
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_halt_service
Definition node_canopen_402_driver.hpp:47
virtual double get_position()
Definition node_canopen_402_driver.hpp:82
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_cyclic_position_service
Definition node_canopen_402_driver.hpp:53
double scale_pos_to_dev_
Definition node_canopen_402_driver.hpp:58
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_position_service
Definition node_canopen_402_driver.hpp:49
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_cyclic_torque_service
Definition node_canopen_402_driver.hpp:54
rclcpp::TimerBase::SharedPtr timer_
Definition node_canopen_402_driver.hpp:43
virtual void configure(bool called_from_base) override
Configure the driver.
rclcpp::Service< canopen_interfaces::srv::COTargetDouble >::SharedPtr handle_set_target_service
Definition node_canopen_402_driver.hpp:56
void handle_set_target(const canopen_interfaces::srv::COTargetDouble::Request::SharedPtr request, canopen_interfaces::srv::COTargetDouble::Response::SharedPtr response)
Service Callback to set target.
Definition node_canopen_402_driver_impl.hpp:522
void handle_set_mode_cyclic_torque(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set cyclic torque mode.
Definition node_canopen_402_driver_impl.hpp:514
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_velocity_service
Definition node_canopen_402_driver.hpp:51
void handle_set_mode_velocity(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set profiled velocity mode.
Definition node_canopen_402_driver_impl.hpp:475
void handle_set_mode_interpolated_position(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set interpolated position mode.
Definition node_canopen_402_driver_impl.hpp:491
void handle_set_mode_torque(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set profiled torque mode.
Definition node_canopen_402_driver_impl.hpp:506
void handle_set_mode_cyclic_position(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set cyclic position mode.
Definition node_canopen_402_driver_impl.hpp:483
virtual void poll_timer_callback() override
Definition node_canopen_402_driver_impl.hpp:408
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_init_service
Definition node_canopen_402_driver.hpp:44
void handle_set_mode_position(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to set profiled position mode.
Definition node_canopen_402_driver_impl.hpp:467
void handle_recover(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to recover device.
Definition node_canopen_402_driver_impl.hpp:447
void diagnostic_callback(diagnostic_updater::DiagnosticStatusWrapper &stat) override
Definition node_canopen_402_driver_impl.hpp:666
bool halt_motor()
Method to halt device.
Definition node_canopen_402_driver_impl.hpp:604
std::shared_ptr< Motor402 > motor_
Definition node_canopen_402_driver.hpp:42
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_disable_service
Definition node_canopen_402_driver.hpp:46
bool init_motor()
Method to initialise device.
Definition node_canopen_402_driver_impl.hpp:576
bool recover_motor()
Method to recover device.
Definition node_canopen_402_driver_impl.hpp:591
ros2_canopen::State402::InternalState switching_state_
Definition node_canopen_402_driver.hpp:64
virtual uint16_t get_mode()
Definition node_canopen_402_driver.hpp:87
int homing_timeout_seconds_
Definition node_canopen_402_driver.hpp:65
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_recover_service
Definition node_canopen_402_driver.hpp:48
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_cyclic_velocity_service
Definition node_canopen_402_driver.hpp:52
double scale_pos_from_dev_
Definition node_canopen_402_driver.hpp:59
void publish()
Definition node_canopen_402_driver_impl.hpp:417
bool set_operation_mode(uint16_t mode)
Service Callback to set operation mode.
Definition node_canopen_402_driver_impl.hpp:617
rclcpp::Publisher< sensor_msgs::msg::JointState >::SharedPtr publish_joint_state
Definition node_canopen_402_driver.hpp:57
virtual double get_speed()
Definition node_canopen_402_driver.hpp:80
void handle_disable(const std_srvs::srv::Trigger::Request::SharedPtr request, std_srvs::srv::Trigger::Response::SharedPtr response)
Service Callback to disable device.
Definition node_canopen_402_driver_impl.hpp:552
double offset_pos_from_dev_
Definition node_canopen_402_driver.hpp:63
virtual void add_to_master() override
Add the driver to master.
Definition node_canopen_402_driver_impl.hpp:428
void deactivate()
Deactivate the driver.
Definition node_canopen_driver.hpp:265
void activate()
Activate the driver.
Definition node_canopen_driver.hpp:223
void init()
Initialise the driver.
Definition node_canopen_driver.hpp:127
Definition node_canopen_proxy_driver.hpp:26
Definition configuration_manager.hpp:28