@@ -62,13 +62,21 @@ class HCM_CPP : public rclcpp::Node {
6262
6363 // Create subscriber for high frequency sensor data
6464 joint_state_sub_ = this ->create_subscription <sensor_msgs::msg::JointState>(
65- " joint_states" , 1 , std::bind (&HCM_CPP::joint_state_callback, this , _1));
65+ " joint_states" , 1 , std::bind (&HCM_CPP::joint_state_callback, this , _1), high_hz_sub_options () );
6666 pressure_l_sub_ = this ->create_subscription <bitbots_msgs::msg::FootPressure>(
67- " foot_pressure_left/filtered" , 1 , std::bind (&HCM_CPP::pressure_l_callback, this , _1));
67+ " foot_pressure_left/filtered" , 1 , std::bind (&HCM_CPP::pressure_l_callback, this , _1), high_hz_sub_options () );
6868 pressure_r_sub_ = this ->create_subscription <bitbots_msgs::msg::FootPressure>(
69- " foot_pressure_right/filtered" , 1 , std::bind (&HCM_CPP::pressure_r_callback, this , _1));
70- imu_sub_ =
71- this ->create_subscription <sensor_msgs::msg::Imu>(" imu/data" , 1 , std::bind (&HCM_CPP::imu_callback, this , _1));
69+ " foot_pressure_right/filtered" , 1 , std::bind (&HCM_CPP::pressure_r_callback, this , _1), high_hz_sub_options ());
70+ imu_sub_ = this ->create_subscription <sensor_msgs::msg::Imu>(
71+ " imu/data" , 1 , std::bind (&HCM_CPP::imu_callback, this , _1), high_hz_sub_options ());
72+ }
73+
74+ rclcpp::SubscriptionOptions high_hz_sub_options () {
75+ // Setup a MutuallyExclusive callback group for each high frequency
76+ // subscription so that they don't block each other
77+ rclcpp::SubscriptionOptions options;
78+ options.callback_group = this ->create_callback_group (rclcpp::CallbackGroupType::MutuallyExclusive);
79+ return options;
7280 }
7381
7482 void animation_callback (bitbots_msgs::msg::Animation msg) {
0 commit comments