Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

No version for distro github showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 0.0.2
License Apache-2.0
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description
Checkout URI https://github.com/ros-controls/mujoco_ros2_control.git
VCS Type git
VCS Version main
Last Updated 2026-04-29
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

Plugin package for mujoco_ros2_control

Maintainers

  • Nathan Dunkelberger
  • Erik Holum
  • Bence Magyar
  • Denis Štogl
  • Christoph Froehlich
  • Sai Kishor Kothakota

Authors

  • Sai Kishor Kothakota

mujoco_ros2_control_plugins

This package provides a plugin interface for extending the functionality of mujoco_ros2_control.

Overview

The mujoco_ros2_control_plugins package is designed to contain plugins that extend the capabilities of the main mujoco_ros2_control package. This separation allows for modular development and optional features without adding complexity to the core package.

[!NOTE] This interface provides flexibility for accessing information from the MuJoCo model and data. Users are responsible for handling that data correctly and avoiding changes to critical information.

Available Plugins

HeartbeatPublisherPlugin

A simple demonstration plugin that publishes a heartbeat message every second to the /mujoco_heartbeat topic.

   
Topic mujoco_heartbeat (std_msgs/String)
Rate 1 Hz
Message format "MuJoCo ROS2 Control Heartbeat #N \| Simulation time: Xs"

ExternalWrenchPlugin

Applies one or more external wrenches (force + torque) to named MuJoCo bodies for configurable durations via a ROS 2 service. Multiple wrenches can be submitted in a single call and each expires independently.

   
Service ~/apply_wrench (mujoco_ros2_control_msgs/srv/ApplyExternalWrench)
Topic ~/wrench_markers (visualization_msgs/msg/MarkerArray)

Service request

The request contains a single wrenches field of type mujoco_ros2_control_msgs/ExternalWrenchArray, which holds an array of ExternalWrench messages. All wrenches in the array are validated atomically — if any body name is unknown the entire request is rejected and nothing is applied.

Each ExternalWrench in the array has:

Field Type Description
wrench.header.frame_id string MuJoCo body name (must match the MJCF <body name="...">)
wrench.wrench.force geometry_msgs/Vector3 Linear force [N] expressed in the body (link) frame. Rotates with the body every simulation step.
wrench.wrench.torque geometry_msgs/Vector3 Angular moment [N·m] expressed in the body (link) frame. Rotates with the body every simulation step.
application_point geometry_msgs/Point Force application point in the body (link) frame (relative to body frame origin, metres). Zero → apply at the body frame origin.
duration builtin_interfaces/Duration How long the wrench remains active. Zero → single simulation step.
ramp_down_duration builtin_interfaces/Duration Duration over which the wrench linearly ramps from full magnitude to zero at the end of duration. Zero → no ramp-down.

Service response fields

Field Type Description
success bool false if any body name was not found in the model
message string Human-readable status or error description

Example: apply a 10 N push along X for 2 seconds at a 10 cm offset, with a 0.5 s ramp-down

This applies a constant force of 10 N for 1.5 seconds and then decays linearly over the next 0.5 seconds.

ros2 service call /external_wrench/apply_wrench \
  mujoco_ros2_control_msgs/srv/ApplyExternalWrench \
  "{
    wrenches: {
      external_wrenches: [
        {
          wrench: {
            header: {frame_id: 'base_link'},
            wrench: {
              force:  {x: 10.0, y: 0.0, z: 0.0},
              torque: {x:  0.0, y: 0.0, z: 0.0}
            }
          },
          application_point: {x: 0.1, y: 0.0, z: 0.0},
          duration: {sec: 2, nanosec: 0},
          ramp_down_duration: {sec: 0, nanosec: 500000000}
        }
      ]
    }
  }"

Example: apply two simultaneous wrenches in a single call

```bash ros2 service call /mujoco_ros2_control/my_plugin/apply_wrench
mujoco_ros2_control_msgs/srv/ApplyExternalWrench
“{ wrenches: { external_wrenches: [ { wrench: {header: {frame_id: ‘link_a’}, wrench: {force: {x: 5.0, y: 0.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }, { wrench: {header: {frame_id: ‘link_b’}, wrench: {force: {x: 0.0, y: -3.0, z: 0.0}}}, duration: {sec: 1, nanosec: 0} }

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package mujoco_ros2_control_plugins

0.0.2 (2026-03-17)

  • [Feature] MuJoCo ros2 control plugins (#133)
  • Contributors: Sai Kishor Kothakota, Erik Holum

0.0.1 (2026-02-24)

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged mujoco_ros2_control_plugins at Robotics Stack Exchange