94 hardware_interface::CallbackReturn
100 on_init(
const hardware_interface::HardwareComponentInterfaceParams& params)
override;
108 std::vector<hardware_interface::StateInterface::ConstSharedPtr> on_export_state_interfaces()
override;
109 std::vector<hardware_interface::CommandInterface::SharedPtr> on_export_command_interfaces()
override;
112 hardware_interface::CallbackReturn on_activate(
const rclcpp_lifecycle::State& previous_state)
override;
113 hardware_interface::CallbackReturn on_deactivate(
const rclcpp_lifecycle::State& previous_state)
override;
116 const std::vector<std::string>& stop_interfaces)
override;
118 hardware_interface::return_type
read(
const rclcpp::Time& time,
const rclcpp::Duration& period)
override;
119 hardware_interface::return_type
write(
const rclcpp::Time& time,
const rclcpp::Duration& period)
override;
169 rclcpp::Logger get_logger()
const;
173 struct InterfaceBinding
176 std::string interface_name;
181 std::vector<InterfaceBinding> collect_state_interface_bindings();
184 std::vector<InterfaceBinding> collect_command_interface_bindings();
186#if !ROS_DISTRO_HUMBLE
188 template <
typename InterfaceT>
191 typename InterfaceT::SharedPtr handle;
195 std::vector<HandleBinding<hardware_interface::StateInterface>> state_bindings_;
196 std::vector<HandleBinding<hardware_interface::CommandInterface>> command_bindings_;
199 template <
typename InterfaceT>
200 static std::vector<HandleBinding<InterfaceT>> build_bindings(
const std::vector<InterfaceBinding>& bindings);
203 void build_interface_handles();
206 template <
typename InterfaceT>
207 static void push_bindings_to_interfaces(
const std::vector<HandleBinding<InterfaceT>>& bindings,
bool wait_for_lock);
210 void pull_commands_from_interfaces();
219 bool register_mujoco_actuators();
310 bool set_override_start_positions(
const std::string& override_start_position_file);
315 void set_initial_pose();
327 void reset_simulation_state(
bool fill_initial_state);
333 rclcpp::Node::SharedPtr get_node()
const;
342 void load_mujoco_plugins();
353 bool auto_register_plugin_if_needed(
const std::string& plugin_type,
const std::string& plugin_ns,
354 const std::vector<std::string>& loaded_plugins);
355 void load_legacy_cameras(
const std::vector<std::string>& plugins_ns);
356 void load_legacy_lidar(
const std::vector<std::string>& plugins_ns);
359 rclcpp::Logger logger_ = rclcpp::get_logger(
"MujocoSystemInterface");
363 std::unique_ptr<MujocoSimulation> simulation_;
366 std::shared_ptr<rclcpp::Node> mujoco_node_;
367 std::unique_ptr<rclcpp::executors::MultiThreadedExecutor> executor_;
368 std::thread executor_thread_;
371 std::shared_ptr<rclcpp::Publisher<sensor_msgs::msg::JointState>> actuator_state_publisher_ =
nullptr;
374 sensor_msgs::msg::JointState actuator_state_msg_;
377 std::shared_ptr<rclcpp::Publisher<nav_msgs::msg::Odometry>> floating_base_publisher_ =
nullptr;
379 nav_msgs::msg::Odometry floating_base_msg_;
382 int free_joint_id_ = -1;
383 int free_joint_qpos_adr_ = -1;
384 int free_joint_qvel_adr_ = -1;
387 std::unordered_map<std::string, hardware_interface::ComponentInfo> joint_hw_info_;
388 std::unordered_map<std::string, std::vector<hardware_interface::ComponentInfo>> sensors_hw_info_;
393 mjData* mj_data_control_{
nullptr };
396 MujocoSimulation::ControlState control_state_;
399 std::vector<MuJoCoActuatorData> mujoco_actuator_data_;
402 std::vector<URDFJointData> urdf_joint_data_;
405 std::unique_ptr<pluginlib::ClassLoader<transmission_interface::TransmissionLoader>> transmission_loader_ =
nullptr;
406 std::vector<std::shared_ptr<transmission_interface::Transmission>> transmission_instances_;
409 std::unique_ptr<pluginlib::ClassLoader<mujoco_ros2_control_plugins::MuJoCoROS2ControlPluginBase>> plugin_loader_ =
411 std::vector<std::shared_ptr<mujoco_ros2_control_plugins::MuJoCoROS2ControlPluginBase>> plugin_instances_;
413 std::vector<FTSensorData> ft_sensor_data_;
414 std::vector<IMUSensorData> imu_sensor_data_;
415 std::vector<SitePoseData> pose_sensor_data_;
416 std::vector<MagnetometerSensorData> magnetometer_sensor_data_;
418 bool override_mujoco_actuator_positions_{
false };
419 bool override_urdf_joint_positions_{
false };
421 std::string initial_keyframe_ =
"";