1#ifndef WBC_ROS_SINGLE_ARM_CONTROLLER_HPP
2#define WBC_ROS_SINGLE_ARM_CONTROLLER_HPP
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>
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>
26#include "single_arm_controller_parameters.hpp"
31 using CommandMsg = robot_control_msgs::msg::JointCommand;
32 using CommandPublisher = rclcpp::Publisher<CommandMsg>;
33 using RTCommandPublisher = realtime_tools::RealtimePublisher<CommandMsg>;
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>;
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>;
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>;
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>;
55 using TimingStatsMsg = wbc_msgs::msg::WbcTimingStats;
56 using TimingStatsPublisher = rclcpp::Publisher<TimingStatsMsg>;
57 using RTTimingStatsPublisher = realtime_tools::RealtimePublisher<TimingStatsMsg>;
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;
85 wbc::HierarchicalQP
qp;
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