wbc_ros
single_arm_controller.hpp
Go to the documentation of this file.
1#ifndef WBC_ROS_SINGLE_ARM_CONTROLLER_HPP
2#define WBC_ROS_SINGLE_ARM_CONTROLLER_HPP
3
4#include <rclcpp_lifecycle/lifecycle_node.hpp>
5#include <robot_control_msgs/msg/joint_command.hpp>
6#include <robot_control_msgs/msg/robot_state.hpp>
7#include <robot_control_msgs/msg/rigid_body_state.hpp>
8#include <std_msgs/msg/float64_multi_array.hpp>
9#include <wbc_msgs/msg/wbc_timing_stats.hpp>
10#include <realtime_tools/realtime_buffer.hpp>
11#include <realtime_tools/realtime_publisher.hpp>
12
13#include <wbc/core/RobotModel.hpp>
14#include <wbc/core/PluginLoader.hpp>
15#include <wbc/core/Scene.hpp>
16#include <wbc/core/QPSolver.hpp>
17#include <wbc/tools/JointIntegrator.hpp>
18#include <wbc/tasks/SpatialVelocityTask.hpp>
19#include <wbc/tasks/JointVelocityTask.hpp>
20#include <wbc/controllers/CartesianPosPDController.hpp>
21#include <wbc/controllers/JointPosPDController.hpp>
22#include <wbc/types/RigidBodyState.hpp>
23#include <wbc/core/QuadraticProgram.hpp>
24
25// auto-generated by generate_parameter_library
26#include "single_arm_controller_parameters.hpp"
27
28namespace wbc_ros{
29 class SingleArmController : public rclcpp_lifecycle::LifecycleNode{
30
31 using CommandMsg = robot_control_msgs::msg::JointCommand;
32 using CommandPublisher = rclcpp::Publisher<CommandMsg>;
33 using RTCommandPublisher = realtime_tools::RealtimePublisher<CommandMsg>;
34
35 using RobotStateMsg = robot_control_msgs::msg::RobotState;
36 using RobotStateMsgPtr = std::shared_ptr<RobotStateMsg>;
37 using RobotStateSubscription = rclcpp::Subscription<RobotStateMsg>::SharedPtr;
38 using RTRobotStateBuffer = realtime_tools::RealtimeBuffer<RobotStateMsgPtr>;
39
40 using RigidBodyStateMsg = robot_control_msgs::msg::RigidBodyState;
41 using RigidBodyStateMsgPtr = std::shared_ptr<RigidBodyStateMsg>;
42 using RigidBodyStateSubscription = rclcpp::Subscription<RigidBodyStateMsg>::SharedPtr;
43 using RTRigidBodyStateBuffer = realtime_tools::RealtimeBuffer<RigidBodyStateMsgPtr>;
44
45 using JointCommandMsg = robot_control_msgs::msg::JointCommand;
46 using JointCommandMsgPtr = std::shared_ptr<JointCommandMsg>;
47 using JointCommandSubscription = rclcpp::Subscription<JointCommandMsg>::SharedPtr;
48 using RTJointCommandBuffer = realtime_tools::RealtimeBuffer<JointCommandMsgPtr>;
49
50 using JointWeightMsg = std_msgs::msg::Float64MultiArray;
51 using JointWeightMsgPtr = std::shared_ptr<JointWeightMsg>;
52 using JointWeightSubscription = rclcpp::Subscription<JointWeightMsg>::SharedPtr;
53 using RTJointWeightBuffer = realtime_tools::RealtimeBuffer<JointWeightMsgPtr>;
54
55 using TimingStatsMsg = wbc_msgs::msg::WbcTimingStats;
56 using TimingStatsPublisher = rclcpp::Publisher<TimingStatsMsg>;
57 using RTTimingStatsPublisher = realtime_tools::RealtimePublisher<TimingStatsMsg>;
58
59 public:
60 SingleArmController(const rclcpp::NodeOptions & options = rclcpp::NodeOptions());
62
63 virtual CallbackReturn on_configure(const rclcpp_lifecycle::State & previous_state) override;
64 virtual CallbackReturn on_activate(const rclcpp_lifecycle::State & previous_state) override;
65 virtual CallbackReturn on_deactivate(const rclcpp_lifecycle::State & previous_state) override;
66 virtual CallbackReturn on_cleanup(const rclcpp_lifecycle::State & previous_state) override;
67 virtual CallbackReturn on_error(const rclcpp_lifecycle::State & previous_state) override;
68 virtual CallbackReturn on_shutdown(const rclcpp_lifecycle::State & previous_state) override;
69
70 void updateController();
71 void joint_weight_callback(const JointWeightMsgPtr msg);
72 void robot_state_callback(const RobotStateMsgPtr msg);
73 void ee_pose_callback(const RigidBodyStateMsgPtr msg);
74 void joint_position_callback(const JointCommandMsgPtr msg);
75 void elbow_pose_callback(const RigidBodyStateMsgPtr msg);
76
77 protected:
78 wbc::ScenePtr scene;
79 wbc::RobotModelPtr robot_model;
80 wbc::QPSolverPtr solver;
81 wbc::types::JointState joint_state;
84 wbc::types::JointCommand solver_output;
85 wbc::HierarchicalQP qp;
86 wbc::JointIntegrator joint_integrator;
87 wbc::CartesianPosPDControllerPtr ee_pose_controller;
88 wbc::JointPosPDControllerPtr joint_pos_controller;
89 wbc::CartesianPosPDControllerPtr elbow_pose_controller;
90 wbc::SpatialVelocityTaskPtr ee_pose_task;
91 wbc::JointVelocityTaskPtr joint_position_task;
92 wbc::SpatialVelocityTaskPtr elbow_pose_task;
93
95 CommandPublisher::SharedPtr solver_output_publisher;
96 std::unique_ptr<RTCommandPublisher> rt_solver_output_publisher;
97
98 TimingStatsMsg timing_stats;
99 TimingStatsPublisher::SharedPtr timing_stats_publisher;
100 std::unique_ptr<RTTimingStatsPublisher> rt_timing_stats_publisher;
101
102 JointWeightSubscription joint_weight_subscriber;
103 RTJointWeightBuffer rt_joint_weight_buffer;
104 JointWeightMsgPtr joint_weight_msg;
105
106 RobotStateSubscription robot_state_subscriber;
107 RTRobotStateBuffer rt_robot_state_buffer;
108 RobotStateMsgPtr robot_state_msg;
109
110 RigidBodyStateSubscription ee_pose_subscriber;
111 RTRigidBodyStateBuffer rt_ee_pose_buffer;
112 RigidBodyStateMsgPtr ee_pose_msg;
113 wbc::types::RigidBodyState ee_pose;
114
115 JointCommandSubscription joint_position_subscriber;
116 RTJointCommandBuffer rt_joint_position_buffer;
117 JointCommandMsgPtr joint_position_msg;
118 wbc::types::JointCommand joint_position;
119
120 RigidBodyStateSubscription elbow_pose_subscriber;
121 RTRigidBodyStateBuffer rt_elbow_pose_buffer;
122 RigidBodyStateMsgPtr elbow_pose_msg;
123 wbc::types::RigidBodyState elbow_pose;
124
125 rclcpp::Time stamp;
126 rclcpp::TimerBase::SharedPtr timer;
127
128 std::vector<int> joint_idx_map;
129
130 std::shared_ptr<single_arm_controller::ParamListener> param_listener;
131 single_arm_controller::Params params;
132 };
133}
134
135#endif
void ee_pose_callback(const RigidBodyStateMsgPtr msg)
Definition single_arm_controller.cpp:25
JointCommandMsgPtr joint_position_msg
Definition single_arm_controller.hpp:117
std::unique_ptr< RTCommandPublisher > rt_solver_output_publisher
Definition single_arm_controller.hpp:96
JointCommandSubscription joint_position_subscriber
Definition single_arm_controller.hpp:115
TimingStatsMsg timing_stats
Definition single_arm_controller.hpp:98
RTRobotStateBuffer rt_robot_state_buffer
Definition single_arm_controller.hpp:107
wbc::types::RigidBodyState ee_pose
Definition single_arm_controller.hpp:113
RobotStateMsgPtr robot_state_msg
Definition single_arm_controller.hpp:108
RigidBodyStateSubscription ee_pose_subscriber
Definition single_arm_controller.hpp:110
void elbow_pose_callback(const RigidBodyStateMsgPtr msg)
Definition single_arm_controller.cpp:33
RobotStateSubscription robot_state_subscriber
Definition single_arm_controller.hpp:106
wbc::JointPosPDControllerPtr joint_pos_controller
Definition single_arm_controller.hpp:88
wbc::types::JointState joint_state
Definition single_arm_controller.hpp:81
wbc::HierarchicalQP qp
Definition single_arm_controller.hpp:85
CommandPublisher::SharedPtr solver_output_publisher
Definition single_arm_controller.hpp:95
virtual CallbackReturn on_cleanup(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:231
void joint_weight_callback(const JointWeightMsgPtr msg)
Definition single_arm_controller.cpp:16
wbc::CartesianPosPDControllerPtr elbow_pose_controller
Definition single_arm_controller.hpp:89
~SingleArmController()
Definition single_arm_controller.hpp:61
wbc::RobotModelPtr robot_model
Definition single_arm_controller.hpp:79
RTJointCommandBuffer rt_joint_position_buffer
Definition single_arm_controller.hpp:116
wbc::SpatialVelocityTaskPtr ee_pose_task
Definition single_arm_controller.hpp:90
JointWeightMsgPtr joint_weight_msg
Definition single_arm_controller.hpp:104
virtual CallbackReturn on_error(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:248
std::unique_ptr< RTTimingStatsPublisher > rt_timing_stats_publisher
Definition single_arm_controller.hpp:100
RTRigidBodyStateBuffer rt_ee_pose_buffer
Definition single_arm_controller.hpp:111
rclcpp::Time stamp
Definition single_arm_controller.hpp:125
virtual CallbackReturn on_shutdown(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:252
wbc::JointVelocityTaskPtr joint_position_task
Definition single_arm_controller.hpp:91
int update_rate
Definition single_arm_controller.hpp:83
virtual CallbackReturn on_deactivate(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:226
TimingStatsPublisher::SharedPtr timing_stats_publisher
Definition single_arm_controller.hpp:99
rclcpp::TimerBase::SharedPtr timer
Definition single_arm_controller.hpp:126
std::vector< int > joint_idx_map
Definition single_arm_controller.hpp:128
wbc::ScenePtr scene
Definition single_arm_controller.hpp:78
single_arm_controller::Params params
Definition single_arm_controller.hpp:131
wbc::JointIntegrator joint_integrator
Definition single_arm_controller.hpp:86
wbc::types::JointCommand solver_output
Definition single_arm_controller.hpp:84
virtual CallbackReturn on_configure(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:37
JointWeightSubscription joint_weight_subscriber
Definition single_arm_controller.hpp:102
void robot_state_callback(const RobotStateMsgPtr msg)
Definition single_arm_controller.cpp:20
RigidBodyStateSubscription elbow_pose_subscriber
Definition single_arm_controller.hpp:120
wbc::types::JointCommand joint_position
Definition single_arm_controller.hpp:118
wbc::QPSolverPtr solver
Definition single_arm_controller.hpp:80
virtual CallbackReturn on_activate(const rclcpp_lifecycle::State &previous_state) override
Definition single_arm_controller.cpp:142
bool has_robot_state
Definition single_arm_controller.hpp:82
wbc::types::RigidBodyState elbow_pose
Definition single_arm_controller.hpp:123
SingleArmController(const rclcpp::NodeOptions &options=rclcpp::NodeOptions())
Definition single_arm_controller.cpp:10
CommandMsg solver_output_msg
Definition single_arm_controller.hpp:94
std::shared_ptr< single_arm_controller::ParamListener > param_listener
Definition single_arm_controller.hpp:130
wbc::SpatialVelocityTaskPtr elbow_pose_task
Definition single_arm_controller.hpp:92
RTJointWeightBuffer rt_joint_weight_buffer
Definition single_arm_controller.hpp:103
wbc::CartesianPosPDControllerPtr ee_pose_controller
Definition single_arm_controller.hpp:87
void updateController()
Definition single_arm_controller.cpp:151
RigidBodyStateMsgPtr elbow_pose_msg
Definition single_arm_controller.hpp:122
RigidBodyStateMsgPtr ee_pose_msg
Definition single_arm_controller.hpp:112
void joint_position_callback(const JointCommandMsgPtr msg)
Definition single_arm_controller.cpp:29
RTRigidBodyStateBuffer rt_elbow_pose_buffer
Definition single_arm_controller.hpp:121
Definition biped_controller.cpp:9