Skip to content

Add support for microduck #807

Open
Open

Description

@sfmig

@mshooter and I would like to add an example to Robotics Academy using Pollen Robotics’ microduck. To do that, @jmplaza advised to first add support for microduck in this repo.

In this issue, we would like to confirm with the community that our understanding and approach is correct. We have been doing a bit of research but we are new to robotics, so feel free to correct any understanding that may be off!

RoboticsInfrastructure and RoboticsAcademy

RoboticsInfrastructure is where the robots and worlds live. RoboticsAcademy is where exercise code and documentation live. RoboticsAcademy pulls the RoboticsInfrastructure repo as a dependency.

The RoboticsInfrastructure repository holds robots not included in the official ROS or Gazebo packages. Most (or is it all?) of the RoboticsAcademy examples rely on Gazebo as the “backend” simulator. The examples show the student a live view of the simulated robot in the browser. That view is produced by Gazebo and piped through the existing plumbing

microduck policies may need re-validating

The microduck runs policies trained in MuJoCo (specifically, mjlab see here). If I understand correctly, this means that even though a URDF for the duck exists (see here for example) and the geometry converts easily, physics may not. In particular, the linked repo seems to aim for visualisation in Gazebo, not simulation. In practice, this means that the MuJoCo-trained policies provided by Pollen Robotics may need re-validating for Gazebo.

Since re-validating all current and future microduck shipped policies would mean a significant effort (and affect long-term sustainability), we were wondering: is there a way to quickly assess how likely this risk is?

Claude suggested loading the duck URDF in Gazebo and try running one of the shipped policies against it. Is this what you would recommend?

Non-Gazebo backend

Alternatively, is a non-Gazebo backend something you'd consider, given the policies are MuJoCo-trained? Maybe supporting MuJoCo-based approaches would expand the space of possible exercises.

However, it seems that a MuJoCo exercise would need to render frames in a way that does not rely on Gazebo, and get them into the browser. Is there a simple way to do this?

Would it be worth it to draft a standalone demo? E.g. the duck walking in MuJoCo, streamed to a browser, driven by Robotics Academy-style Python with HAL.setVelocity(). This was suggested by Claude too.

I understand that even on the MuJoCo route we'd likely still touch RoboticsInfrastructure, because launchers and the database registration live here (and probably the MJCF and the ONNX policy too?).

Let us know what you think about these two possible paths. We are happy to try a few things before committing to one of the two.

Btw @jmplaza also suggested checking the Unitree case as a reference, but I couldn’t find it in the repo. Would you mind pointing us to it?

Thanks!

Activity

  1. jmplaza commented on Sep 14, 2026

    @jmplaza
    Member

    Hi @sfmig @mshooter ,

    Yes, your understanding of RoboticsAcademy and RoboticsAcademy is perfect.

    Yes, microduck policies will be developed in MuJoCo and then transferred to Gazebo. We already did something similar with Unitree G1 humanoid: first we developed a walking policy in MuJoCo (https://www.youtube.com/watch?v=bNbMfIUZjRg) and then transferred it successfully to Gazebo (https://www.youtube.com/watch?v=X91FYZdADgk). Despite the physics in both simulators may slightly differ we did not touch the policy, just made sure we called the physics ticks and the policy inferences fast enough. We noted a slight degradation in walking accuracy, but manageable.

    Some reference repos are: https://github.com/RoboticsLabURJC/2025-tfg-diego-lopez (from @dlopezm17), https://github.com/unitreerobotics/unitree_rl_mjlab

    Yes, although the final goal is to integrate the microduck in some exercises inside RoboticsAcademy, starting with a standalone demo in MuJoCo looks good to me a first milestone. Then the transfer to Gazebo can be faced in next stages. And finally its integration into RoboticsAcademy and RoboticsInfrastructure, which will take time. We would face then the cmd_vel ROS topics which will be the "command/input_parameter" of your policy for the microduck. For instance, we still are in the process of integrating the Unitree G1, as the "walking gait" layer has to provide a full set of motion possibilties (stand-up, pick a box...). Hopefully in the next two months we have this humanoid robot integrated in RoboticsInfrastructure, and then, available for RoboticsAcademy challenges.

    Yes, Gazebo is the reference simulator for RoboticsAcademy but the architecture is open to new simulators. For instance we developed this year the integration of O3DE simulator, which has a very good rendering and it is also open-source: FollowLine exercise (https://www.youtube.com/watch?v=gFB-ZCDkLGY), LaserMapping (https://www.youtube.com/watch?v=aXSCNdJxi8M) and FollowPerson (https://www.youtube.com/watch?v=dSHW3yHe-ic). The results were fine but we did not move to production as O3DE requires much space in the robotics runtime required to Robotics Academy (RADI) and the use of GPU is compulsory.... Gazebo is a good trade-off between size, features, ROS2 integration and operation even without GPU.

    Hope it helps. Cheers!

  2. coder-Yash886 commented on Oct 13, 2026

    @coder-Yash886

    @javizqh i am looking to work on this issue please assign me this issue

  3. jmplaza commented on Oct 13, 2026

    @jmplaza
    Member

    3. @javizqh i am looking to work on this issue please assign me this issue

    @sfmig and @mshooter are already working on this...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions