ros2_canopen  master
C++ ROS CANopen Library
node_canopen_402_driver.hpp
Go to the documentation of this file.
1 #ifndef NODE_CANOPEN_402_DRIVER
2 #define NODE_CANOPEN_402_DRIVER
3 
6 #include "canopen_interfaces/srv/co_target_double.hpp"
8 #include "sensor_msgs/msg/joint_state.hpp"
9 
10 namespace ros2_canopen
11 {
12 namespace node_interfaces
13 {
14 
15 template <class NODETYPE>
17 {
18  static_assert(
19  std::is_base_of<rclcpp::Node, NODETYPE>::value ||
20  std::is_base_of<rclcpp_lifecycle::LifecycleNode, NODETYPE>::value,
21  "NODETYPE must derive from rclcpp::Node or rclcpp_lifecycle::LifecycleNode");
22 
23 protected:
24  std::shared_ptr<Motor402> motor_;
25  rclcpp::TimerBase::SharedPtr timer_;
26  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_init_service;
27  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_halt_service;
28  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_recover_service;
29  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_position_service;
30  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_torque_service;
31  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_velocity_service;
32  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_cyclic_velocity_service;
33  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_cyclic_position_service;
34  rclcpp::Service<std_srvs::srv::Trigger>::SharedPtr handle_set_mode_interpolated_position_service;
35  rclcpp::Service<canopen_interfaces::srv::COTargetDouble>::SharedPtr handle_set_target_service;
36  rclcpp::Publisher<sensor_msgs::msg::JointState>::SharedPtr publish_joint_state;
42 
43  void publish();
44  virtual void poll_timer_callback() override;
45 
46 public:
47  NodeCanopen402Driver(NODETYPE * node);
48 
49  virtual void init(bool called_from_base) override;
50  virtual void configure(bool called_from_base) override;
51  virtual void activate(bool called_from_base) override;
52  virtual void deactivate(bool called_from_base) override;
53  virtual void add_to_master() override;
54 
55  virtual double get_speed() { return motor_->get_speed() * scale_vel_from_dev_; }
56 
57  virtual double get_position() { return motor_->get_position() * scale_pos_from_dev_; }
58 
59  virtual uint16_t get_mode() { return motor_->getMode(); }
60 
70  void handle_init(
71  const std_srvs::srv::Trigger::Request::SharedPtr request,
72  std_srvs::srv::Trigger::Response::SharedPtr response);
73 
85  bool init_motor();
86 
96  void handle_recover(
97  const std_srvs::srv::Trigger::Request::SharedPtr request,
98  std_srvs::srv::Trigger::Response::SharedPtr response);
99 
110  bool recover_motor();
111 
122  void handle_halt(
123  const std_srvs::srv::Trigger::Request::SharedPtr request,
124  std_srvs::srv::Trigger::Response::SharedPtr response);
125 
137  bool halt_motor();
138 
150  const std_srvs::srv::Trigger::Request::SharedPtr request,
151  std_srvs::srv::Trigger::Response::SharedPtr response);
152 
153  bool set_operation_mode(uint16_t mode);
154 
166  bool set_mode_position();
167 
179  const std_srvs::srv::Trigger::Request::SharedPtr request,
180  std_srvs::srv::Trigger::Response::SharedPtr response);
181 
193  bool set_mode_velocity();
194 
206  const std_srvs::srv::Trigger::Request::SharedPtr request,
207  std_srvs::srv::Trigger::Response::SharedPtr response);
208 
220  const std_srvs::srv::Trigger::Request::SharedPtr request,
221  std_srvs::srv::Trigger::Response::SharedPtr response);
222 
234 
247 
259  const std_srvs::srv::Trigger::Request::SharedPtr request,
260  std_srvs::srv::Trigger::Response::SharedPtr response);
261 
274 
286  const std_srvs::srv::Trigger::Request::SharedPtr request,
287  std_srvs::srv::Trigger::Response::SharedPtr response);
288 
300  bool set_mode_torque();
301 
312  void handle_set_target(
313  const canopen_interfaces::srv::COTargetDouble::Request::SharedPtr request,
314  canopen_interfaces::srv::COTargetDouble::Response::SharedPtr response);
315 
327  bool set_target(double target);
328 };
329 } // namespace node_interfaces
330 } // namespace ros2_canopen
331 
332 #endif
InternalState
Definition: state.hpp:33
Definition: node_canopen_402_driver.hpp:17
double scale_vel_from_dev_
Definition: node_canopen_402_driver.hpp:40
double scale_vel_to_dev_
Definition: node_canopen_402_driver.hpp:39
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:358
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:316
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_interpolated_position_service
Definition: node_canopen_402_driver.hpp:34
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:295
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_torque_service
Definition: node_canopen_402_driver.hpp:30
bool set_target(double target)
Method to set target.
Definition: node_canopen_402_driver_impl.hpp:574
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_halt_service
Definition: node_canopen_402_driver.hpp:27
bool set_mode_velocity()
Method to set profiled velocity mode.
Definition: node_canopen_402_driver_impl.hpp:494
virtual double get_position()
Definition: node_canopen_402_driver.hpp:57
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_cyclic_position_service
Definition: node_canopen_402_driver.hpp:33
double scale_pos_to_dev_
Definition: node_canopen_402_driver.hpp:37
bool set_mode_torque()
Method to set profiled torque mode.
Definition: node_canopen_402_driver_impl.hpp:554
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_position_service
Definition: node_canopen_402_driver.hpp:29
rclcpp::TimerBase::SharedPtr timer_
Definition: node_canopen_402_driver.hpp:25
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:35
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:373
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_velocity_service
Definition: node_canopen_402_driver.hpp:31
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:334
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:350
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:365
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:342
virtual void poll_timer_callback() override
Definition: node_canopen_402_driver_impl.hpp:268
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_init_service
Definition: node_canopen_402_driver.hpp:26
bool set_mode_interpolated_position()
Method to set interpolated position mode.
Definition: node_canopen_402_driver_impl.hpp:474
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:326
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:306
bool halt_motor()
Method to halt device.
Definition: node_canopen_402_driver_impl.hpp:431
bool set_mode_position()
Method to set profiled position mode.
Definition: node_canopen_402_driver_impl.hpp:454
std::shared_ptr< Motor402 > motor_
Definition: node_canopen_402_driver.hpp:21
bool init_motor()
Method to initialise device.
Definition: node_canopen_402_driver_impl.hpp:403
bool recover_motor()
Method to recover device.
Definition: node_canopen_402_driver_impl.hpp:418
ros2_canopen::State402::InternalState switching_state_
Definition: node_canopen_402_driver.hpp:41
virtual uint16_t get_mode()
Definition: node_canopen_402_driver.hpp:59
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_recover_service
Definition: node_canopen_402_driver.hpp:28
rclcpp::Service< std_srvs::srv::Trigger >::SharedPtr handle_set_mode_cyclic_velocity_service
Definition: node_canopen_402_driver.hpp:32
NodeCanopen402Driver(NODETYPE *node)
Definition: node_canopen_402_driver_impl.hpp:13
double scale_pos_from_dev_
Definition: node_canopen_402_driver.hpp:38
void publish()
Definition: node_canopen_402_driver_impl.hpp:277
bool set_operation_mode(uint16_t mode)
Definition: node_canopen_402_driver_impl.hpp:444
rclcpp::Publisher< sensor_msgs::msg::JointState >::SharedPtr publish_joint_state
Definition: node_canopen_402_driver.hpp:36
bool set_mode_cyclic_velocity()
Method to set cyclic velocity mode.
Definition: node_canopen_402_driver_impl.hpp:534
virtual double get_speed()
Definition: node_canopen_402_driver.hpp:55
bool set_mode_cyclic_position()
Method to set cyclic position mode.
Definition: node_canopen_402_driver_impl.hpp:514
virtual void add_to_master() override
Add the driver to master.
Definition: node_canopen_402_driver_impl.hpp:288
void deactivate()
Deactivate the driver.
Definition: node_canopen_driver.hpp:251
void activate()
Activate the driver.
Definition: node_canopen_driver.hpp:209
void init()
Initialise the driver.
Definition: node_canopen_driver.hpp:113
Definition: node_canopen_proxy_driver.hpp:12
Definition: configuration_manager.hpp:28