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