diff --git a/CMakeLists.txt b/CMakeLists.txt index 684bc3bec..20d732d51 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,16 @@ set(MUJOCO_MPC_MUJOCO_GIT_TAG CACHE STRING "Git revision for MuJoCo." ) +set(MUJOCO_MPC_MENAGERIE_GIT_TAG + aef3ee5c07ea51506e893a62fd832773ff0162c8 + CACHE STRING "Git revision for MuJoCo Menagerie." +) + +set(MUJOCO_MPC_DM_CONTROL_GIT_TAG + 774f46182140106e22725914aad3c6299ed91edd + CACHE STRING "Git revision for dm_control." +) + findorfetch( USE_SYSTEM_PACKAGE OFF @@ -160,7 +170,7 @@ unset(BUILD_SHARED_LIBS_OLD) FetchContent_Declare( menagerie GIT_REPOSITORY https://github.com/google-deepmind/mujoco_menagerie.git - GIT_TAG main + GIT_TAG ${MUJOCO_MPC_MENAGERIE_GIT_TAG} ) FetchContent_GetProperties(menagerie) @@ -168,6 +178,17 @@ if(NOT menagerie_POPULATED) FetchContent_Populate(menagerie) endif() +FetchContent_Declare( + dm_control + GIT_REPOSITORY https://github.com/google-deepmind/dm_control.git + GIT_TAG ${MUJOCO_MPC_DM_CONTROL_GIT_TAG} +) + +FetchContent_GetProperties(dm_control) +if(NOT dm_control_POPULATED) + FetchContent_Populate(dm_control) +endif() + if(NOT TARGET lodepng) FetchContent_Declare( lodepng diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md index c2e01a1b1..c4df15bf1 100644 --- a/docs/CONTRIBUTING.md +++ b/docs/CONTRIBUTING.md @@ -32,7 +32,13 @@ This code adheres to the [Google style](https://google.github.io/styleguide/). ## New Tasks -When submitting a PR for a new task using models from [MuJoCo Menagerie](https://github.com/google-deepmind/mujoco_menagerie), do not include assets directly. Instead, modify the task [CMakeLists](mjpc/tasks/CMakeLists.txt) to copy these assets to the build binary. +When submitting a PR for a new task that depends on third-party models, including from [MuJoCo Menagerie](https://github.com/google-deepmind/mujoco_menagerie) and [dm_control](https://github.com/google-deepmind/dm_control), do not include the xml model or assets in the task directly. Instead, modify the task [CMakeLists](mjpc/tasks/CMakeLists.txt) to copy the xml model and/or assets to the build binary. + +If the xml model needs to be modified, create a patch that is applied in the [CMakeLists](mjpc/tasks/CMakeLists.txt). A [patch](https://github.com/google-deepmind/mujoco_mpc/blob/main/mjpc/tasks/op3/op3.xml.patch) can be generated using the following command: +``` +diff -u {original}.xml {modified}.xml > {modified}.xml.patch +``` +The first three lines of the generated patch file will need to be be adapted for your use case. Please see an [example](https://github.com/google-deepmind/mujoco_mpc/blob/main/mjpc/tasks/op3/op3.xml.patch) for a template. ## Unit Tests diff --git a/mjpc/tasks/CMakeLists.txt b/mjpc/tasks/CMakeLists.txt index 4112694dc..e152534af 100644 --- a/mjpc/tasks/CMakeLists.txt +++ b/mjpc/tasks/CMakeLists.txt @@ -16,7 +16,55 @@ # built binary. add_custom_target( - copy_menagerie_resources ALL + copy_model_resources ALL + ## dm_control models + # acrobot + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/acrobot.xml + ${CMAKE_CURRENT_BINARY_DIR}/acrobot/acrobot.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/acrobot/acrobot_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/acrobot/acrobot.xml + <${CMAKE_CURRENT_SOURCE_DIR}/acrobot/acrobot.xml.patch + # cartpole + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/cartpole.xml + ${CMAKE_CURRENT_BINARY_DIR}/cartpole/cartpole.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/cartpole/cartpole_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/cartpole/cartpole.xml + <${CMAKE_CURRENT_SOURCE_DIR}/cartpole/cartpole.xml.patch + # humanoid + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/humanoid.xml + ${CMAKE_CURRENT_BINARY_DIR}/humanoid/humanoid.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/humanoid/humanoid_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/humanoid/humanoid.xml + <${CMAKE_CURRENT_SOURCE_DIR}/humanoid/humanoid.xml.patch + # particle + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/point_mass.xml + ${CMAKE_CURRENT_BINARY_DIR}/particle/particle.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/particle/particle_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/particle/particle.xml + <${CMAKE_CURRENT_SOURCE_DIR}/particle/particle.xml.patch + # swimmer + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/swimmer.xml + ${CMAKE_CURRENT_BINARY_DIR}/swimmer/swimmer.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/swimmer/swimmer_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/swimmer/swimmer.xml + <${CMAKE_CURRENT_SOURCE_DIR}/swimmer/swimmer.xml.patch + # walker + COMMAND ${CMAKE_COMMAND} -E copy + ${dm_control_SOURCE_DIR}/dm_control/suite/walker.xml + ${CMAKE_CURRENT_BINARY_DIR}/walker/walker.xml + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/walker/walker_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/walker/walker.xml + <${CMAKE_CURRENT_SOURCE_DIR}/walker/walker.xml.patch + + ## Menagerie models + COMMAND ${CMAKE_COMMAND} -E copy + ${menagerie_SOURCE_DIR}/shadow_hand/right_hand.xml + ${CMAKE_CURRENT_BINARY_DIR}/hand/right_hand.xml COMMAND ${CMAKE_COMMAND} -E copy ${menagerie_SOURCE_DIR}/wonik_allegro/right_hand.xml ${CMAKE_CURRENT_BINARY_DIR}/allegro/right_hand.xml @@ -29,21 +77,39 @@ add_custom_target( COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/shadow_hand/assets ${CMAKE_CURRENT_BINARY_DIR}/hand/assets + COMMAND ${CMAKE_COMMAND} -E copy + ${menagerie_SOURCE_DIR}/franka_emika_panda/panda.xml + ${CMAKE_CURRENT_BINARY_DIR}/panda/panda.xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/franka_emika_panda/assets ${CMAKE_CURRENT_BINARY_DIR}/panda/assets + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/panda/panda_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/panda/panda.xml + <${CMAKE_CURRENT_SOURCE_DIR}/panda/panda.xml.patch + COMMAND ${CMAKE_COMMAND} -E copy + ${menagerie_SOURCE_DIR}/unitree_a1/a1.xml + ${CMAKE_CURRENT_BINARY_DIR}/quadruped/a1.xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/unitree_a1/assets ${CMAKE_CURRENT_BINARY_DIR}/quadruped/assets + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/quadruped/a1_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/quadruped/a1.xml + <${CMAKE_CURRENT_SOURCE_DIR}/quadruped/a1.xml.patch COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/franka_emika_panda ${CMAKE_CURRENT_BINARY_DIR}/manipulation COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/robotiq_2f85 ${CMAKE_CURRENT_BINARY_DIR}/manipulation + COMMAND ${CMAKE_COMMAND} -E copy + ${menagerie_SOURCE_DIR}/skydio_x2/x2.xml + ${CMAKE_CURRENT_BINARY_DIR}/quadrotor/quadrotor.xml COMMAND ${CMAKE_COMMAND} -E copy_directory ${menagerie_SOURCE_DIR}/skydio_x2/assets ${CMAKE_CURRENT_BINARY_DIR}/quadrotor/assets + COMMAND patch -o ${CMAKE_CURRENT_BINARY_DIR}/quadrotor/quadrotor_modified.xml + ${CMAKE_CURRENT_BINARY_DIR}/quadrotor/quadrotor.xml + <${CMAKE_CURRENT_SOURCE_DIR}/quadrotor/quadrotor.xml.patch ## Cube solve task # copy cube model from MuJoCo COMMAND ${CMAKE_COMMAND} -E copy @@ -97,7 +163,7 @@ add_custom_target( COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/manipulation/merge_panda_robotiq.py ${CMAKE_CURRENT_BINARY_DIR}/manipulation/panda_robotiq.xml - COMMENT "Copying menagerie assets into binary directory") + COMMENT "Copying Menagerie and dm_control assets into binary directory") add_custom_target(copy_resources ALL COMMAND ${CMAKE_COMMAND} -E copy_directory @@ -105,6 +171,6 @@ add_custom_target(copy_resources ALL ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Copying tasks into binary directory") -add_dependencies(copy_menagerie_resources copy_resources) +add_dependencies(copy_model_resources copy_resources) -add_dependencies(libmjpc copy_menagerie_resources) +add_dependencies(libmjpc copy_model_resources) diff --git a/mjpc/tasks/acrobot/acrobot.xml b/mjpc/tasks/acrobot/acrobot.xml deleted file mode 100644 index 4bb92814b..000000000 --- a/mjpc/tasks/acrobot/acrobot.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mjpc/tasks/acrobot/acrobot.xml.patch b/mjpc/tasks/acrobot/acrobot.xml.patch new file mode 100644 index 000000000..1466a34a1 --- /dev/null +++ b/mjpc/tasks/acrobot/acrobot.xml.patch @@ -0,0 +1,28 @@ +diff --git a/acrobot_modified.xml b/acrobot_modified.xml +--- a/acrobot_modified.xml ++++ b/acrobot_modified.xml +@@ -6,22 +6,18 @@ + IEEE control systems 15, no. 1 (1995): 49-55. + --> + +- +- +- +- + + + + + +- + + + +- ++ + + + diff --git a/mjpc/tasks/acrobot/task.xml b/mjpc/tasks/acrobot/task.xml index af2d020ff..3c9900b14 100644 --- a/mjpc/tasks/acrobot/task.xml +++ b/mjpc/tasks/acrobot/task.xml @@ -1,6 +1,7 @@ - + + diff --git a/mjpc/tasks/cartpole/cartpole.xml b/mjpc/tasks/cartpole/cartpole.xml deleted file mode 100644 index 18b778dde..000000000 --- a/mjpc/tasks/cartpole/cartpole.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mjpc/tasks/cartpole/cartpole.xml.patch b/mjpc/tasks/cartpole/cartpole.xml.patch new file mode 100644 index 000000000..742fd0167 --- /dev/null +++ b/mjpc/tasks/cartpole/cartpole.xml.patch @@ -0,0 +1,37 @@ +diff --git a/cartpole_modified.xml b/cartpole_modified.xml +--- a/cartpole_modified.xml ++++ b/cartpole_modified.xml +@@ -1,10 +1,6 @@ +- +- +- +- +- +- diff --git a/mjpc/tasks/cartpole/task.xml b/mjpc/tasks/cartpole/task.xml index 77722aca5..46c2002b6 100644 --- a/mjpc/tasks/cartpole/task.xml +++ b/mjpc/tasks/cartpole/task.xml @@ -1,6 +1,7 @@ - + + diff --git a/mjpc/tasks/hand/right_hand.xml b/mjpc/tasks/hand/right_hand.xml deleted file mode 100644 index d0f50d98b..000000000 --- a/mjpc/tasks/hand/right_hand.xml +++ /dev/null @@ -1,345 +0,0 @@ - - - - diff --git a/mjpc/tasks/hand/task.xml b/mjpc/tasks/hand/task.xml index 9f9ef120f..55d1a813f 100644 --- a/mjpc/tasks/hand/task.xml +++ b/mjpc/tasks/hand/task.xml @@ -47,6 +47,7 @@ + diff --git a/mjpc/tasks/humanoid/humanoid.xml b/mjpc/tasks/humanoid/humanoid.xml deleted file mode 100644 index 1875b3922..000000000 --- a/mjpc/tasks/humanoid/humanoid.xml +++ /dev/null @@ -1,231 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mjpc/tasks/humanoid/humanoid.xml.patch b/mjpc/tasks/humanoid/humanoid.xml.patch new file mode 100644 index 000000000..6375430bd --- /dev/null +++ b/mjpc/tasks/humanoid/humanoid.xml.patch @@ -0,0 +1,386 @@ +diff --git a/humanoid_modified.xml b/humanoid_modified.xml +--- a/humanoid_modified.xml ++++ b/humanoid_modified.xml +@@ -1,202 +1,231 @@ +- +- +- +- ++ + + + +- +- diff --git a/mjpc/tasks/humanoid/stand/stand.cc b/mjpc/tasks/humanoid/stand/stand.cc index 9bf54888f..5f961a092 100644 --- a/mjpc/tasks/humanoid/stand/stand.cc +++ b/mjpc/tasks/humanoid/stand/stand.cc @@ -17,7 +17,6 @@ #include #include -#include "mjpc/task.h" #include "mjpc/utilities.h" diff --git a/mjpc/tasks/humanoid/stand/task.xml b/mjpc/tasks/humanoid/stand/task.xml index be205167a..b44dde25b 100644 --- a/mjpc/tasks/humanoid/stand/task.xml +++ b/mjpc/tasks/humanoid/stand/task.xml @@ -1,6 +1,7 @@ - + + diff --git a/mjpc/tasks/humanoid/tracking/task.xml b/mjpc/tasks/humanoid/tracking/task.xml index a632c1dd5..fceae194a 100644 --- a/mjpc/tasks/humanoid/tracking/task.xml +++ b/mjpc/tasks/humanoid/tracking/task.xml @@ -1,6 +1,7 @@ - + + diff --git a/mjpc/tasks/humanoid/walk/task.xml b/mjpc/tasks/humanoid/walk/task.xml index 99ecd8b44..99b65b701 100644 --- a/mjpc/tasks/humanoid/walk/task.xml +++ b/mjpc/tasks/humanoid/walk/task.xml @@ -1,6 +1,7 @@ - + + diff --git a/mjpc/tasks/panda/panda.xml b/mjpc/tasks/panda/panda.xml deleted file mode 100644 index 4bbb1bbd8..000000000 --- a/mjpc/tasks/panda/panda.xml +++ /dev/null @@ -1,278 +0,0 @@ - - - - diff --git a/mjpc/tasks/panda/panda.xml.patch b/mjpc/tasks/panda/panda.xml.patch new file mode 100644 index 000000000..dd03406ab --- /dev/null +++ b/mjpc/tasks/panda/panda.xml.patch @@ -0,0 +1,177 @@ +diff --git a/panda_modified.xml b/panda_modified.xml +--- a/panda_modified.xml ++++ b/panda_modified.xml +@@ -1,13 +1,12 @@ + + + +- diff --git a/mjpc/tasks/panda/task.xml b/mjpc/tasks/panda/task.xml index 5bc408edf..c14a14592 100644 --- a/mjpc/tasks/panda/task.xml +++ b/mjpc/tasks/panda/task.xml @@ -72,5 +72,6 @@ - + + diff --git a/mjpc/tasks/particle/particle.xml b/mjpc/tasks/particle/particle.xml deleted file mode 100644 index 0ab38f86a..000000000 --- a/mjpc/tasks/particle/particle.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mjpc/tasks/particle/particle.xml.patch b/mjpc/tasks/particle/particle.xml.patch new file mode 100644 index 000000000..524e33530 --- /dev/null +++ b/mjpc/tasks/particle/particle.xml.patch @@ -0,0 +1,57 @@ +diff --git a/particle_modified.xml b/particle_modified.xml +--- a/particle_modified.xml ++++ b/particle_modified.xml +@@ -1,9 +1,5 @@ +- +- +- +- +- +-