ubi-agni / mujoco_ros_pkgs

Wrappers, tools and additional API's for using ROS with MuJoCo
54 stars 11 forks source link

Installation instruction #25

Closed zichunxx closed 9 months ago

zichunxx commented 10 months ago

Hi!

This repo is exactly what I've been trying to find and use, thanks for your work.

Is there any basic tutorial or example to install and use this repo? This repo is similar to gazebo_ros_pkgs, but I didn't use the latter. Should I follow the tutorial on gazebo_ros_pkgs first?

Thanks!

zichunxx commented 10 months ago

I have built the latest version of Mujoco from source. When I catkin build this repo, I met the following errors

Errors     << mujoco_ros:make /home/xzc/mujoco_ros_ws/logs/mujoco_ros/build.make.001.log                                                                     
In file included from /usr/local/include/mujoco/mujoco.h:36,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/viewer.h:67,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:53:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp: In function ‘void {anonymous}::UpdateProfiler(mujoco_ros::Viewer*, const mjModel*, const mjData*)’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:286:52: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  286 |  viewer->figconstraint.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                                    ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:286:52: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  286 |  viewer->figconstraint.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                                    ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:286:52: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  286 |  viewer->figconstraint.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                                    ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:286:52: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  286 |  viewer->figconstraint.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                                    ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:314:46: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  314 |  viewer->figcost.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                              ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:314:46: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  314 |  viewer->figcost.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                              ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:314:46: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  314 |  viewer->figcost.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                              ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:314:46: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  314 |  viewer->figcost.linepnt[0] = mjMIN(mjMIN(d->solver_iter, mjNSOLVER), mjMAXLINEPNT);
      |                                              ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:365:89: error: no matching function for call to ‘sqrt(const int [20])’
  365 |                   static_cast<float>(d->nefc), static_cast<float>(mju_sqrt(d->solver_nnz)),
      |                                                                                         ^
In file included from /usr/include/features.h:461,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/os_defines.h:39,
                 from /usr/include/x86_64-linux-gnu/c++/9/bits/c++config.h:528,
                 from /usr/include/c++/9/bits/atomic_base.h:35,
                 from /usr/include/c++/9/atomic:41,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/viewer.h:55,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:53:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:143:1: note: candidate: ‘double sqrt(double)’
  143 | __MATHCALL (sqrt,, (_Mdouble_ __x));
      | ^~~~~~~~~~
In file included from /usr/include/c++/9/cmath:45,
                 from /usr/include/c++/9/math.h:36,
                 from /usr/local/include/mujoco/mujoco.h:31,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/viewer.h:67,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:53:
/usr/include/x86_64-linux-gnu/bits/mathcalls.h:143:1: note:   no known conversion for argument 1 from ‘const int [20]’ to ‘double’
  143 | __MATHCALL (sqrt,, (_Mdouble_ __x));
      | ^
In file included from /usr/include/c++/9/math.h:36,
                 from /usr/local/include/mujoco/mujoco.h:31,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/viewer.h:67,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:53:
/usr/include/c++/9/cmath:475:5: note: candidate: ‘template<class _Tp> constexpr typename __gnu_cxx::__enable_if<std::__is_integer<_Tp>::__value, double>::__type std::sqrt(_Tp)’
  475 |     sqrt(_Tp __x)
      |     ^~~~
/usr/include/c++/9/cmath:475:5: note:   template argument deduction/substitution failed:
/usr/include/c++/9/cmath: In substitution of ‘template<class _Tp> constexpr typename __gnu_cxx::__enable_if<std::__is_integer<_Tp>::__value, double>::__type std::sqrt(_Tp) [with _Tp = const int*]’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:365:89:   required from here
/usr/include/c++/9/cmath:475:5: error: no type named ‘__type’ in ‘struct __gnu_cxx::__enable_if<false, double>’
/usr/include/c++/9/cmath:467:3: note: candidate: ‘constexpr long double std::sqrt(long double)’
  467 |   sqrt(long double __x)
      |   ^~~~
/usr/include/c++/9/cmath:467:20: note:   no known conversion for argument 1 from ‘const int [20]’ to ‘long double’
  467 |   sqrt(long double __x)
      |        ~~~~~~~~~~~~^~~
/usr/include/c++/9/cmath:463:3: note: candidate: ‘constexpr float std::sqrt(float)’
  463 |   sqrt(float __x)
      |   ^~~~
/usr/include/c++/9/cmath:463:14: note:   no known conversion for argument 1 from ‘const int [20]’ to ‘float’
  463 |   sqrt(float __x)
      |        ~~~~~~^~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:366:70: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  366 |                   static_cast<float>(d->ncon), static_cast<float>(d->solver_iter) };
      |                                                                      ^~~~~~~~~~~
      |                                                                      solver_niter
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp: In function ‘void {anonymous}::UpdateInfoText(mujoco_ros::Viewer*, const mjModel*, const mjData*, char (&)[1000], char (&)[1000])’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:496:9: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  496 |  if (d->solver_iter) {
      |         ^~~~~~~~~~~
      |         solver_niter
In file included from /usr/local/include/mujoco/mujoco.h:36,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/viewer.h:67,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:53:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:497:22: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  497 |   int ind = mjMIN(d->solver_iter - 1, mjNSOLVER - 1);
      |                      ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:497:22: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  497 |   int ind = mjMIN(d->solver_iter - 1, mjNSOLVER - 1);
      |                      ^~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:521:30: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘solver_iter’; did you mean ‘solver_niter’?
  521 |                   solerr, d->solver_iter, fps,
      |                              ^~~~~~~~~~~
      |                              solver_niter
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:523:64: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘nstack’; did you mean ‘pstack’?
  523 |                       static_cast<double>(util::as_unsigned(d->nstack) * sizeof(mjtNum)),
      |                                                                ^~~~~~
      |                                                                pstack
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/viewer.cpp:524:58: error: ‘const mjData’ {aka ‘const struct mjData_’} has no member named ‘nstack’; did you mean ‘pstack’?
  524 |                   mju_writeNumBytes(util::as_unsigned(d->nstack) * sizeof(mjtNum)));
      |                                                          ^~~~~~
      |                                                          pstack
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp: In member function ‘bool mujoco_ros::MujocoEnv::setBodyStateCB(mujoco_ros_msgs::SetBodyState::Request&, mujoco_ros_msgs::SetBodyState::Response&)’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp:246:59: error: too few arguments to function ‘void* mj_stackAlloc(mjData*, size_t, size_t)’
  246 |   mjtNum *qpos_tmp = mj_stackAlloc(data_.get(), model_->nq);
      |                                                           ^
In file included from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/common_types.h:39,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/mujoco_env.h:58,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp:37:
/usr/local/include/mujoco/mujoco.h:197:13: note: declared here
  197 | MJAPI void* mj_stackAlloc(mjData* d, size_t bytes, size_t alignment);
      |             ^~~~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp: In member function ‘bool mujoco_ros::MujocoEnv::setGeomPropertiesCB(mujoco_ros_msgs::SetGeomProperties::Request&, mujoco_ros_msgs::SetGeomProperties::Response&)’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp:575:59: error: too few arguments to function ‘void* mj_stackAlloc(mjData*, size_t, size_t)’
  575 |   mjtNum *qpos_tmp = mj_stackAlloc(data_.get(), model_->nq);
      |                                                           ^
In file included from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/common_types.h:39,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/include/mujoco_ros/mujoco_env.h:58,
                 from /home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/callbacks.cpp:37:
/usr/local/include/mujoco/mujoco.h:197:13: note: declared here
  197 | MJAPI void* mj_stackAlloc(mjData* d, size_t bytes, size_t alignment);
      |             ^~~~~~~~~~~~~
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/mujoco_env.cpp: In member function ‘bool mujoco_ros::MujocoEnv::initModelFromQueue()’:
/home/xzc/mujoco_ros_ws/src/mujoco_ros_pkgs/mujoco_ros/src/mujoco_env.cpp:817:63: error: useless cast to type ‘size_t’ {aka ‘long unsigned int’} [-Werror=useless-cast]
  817 |   filecontent_size = static_cast<size_t>(vfs_.filesize[vfs_id]);
      |                                                               ^
make[2]: *** [src/CMakeFiles/mujoco_ros.dir/build.make:76: src/CMakeFiles/mujoco_ros.dir/viewer.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [src/CMakeFiles/mujoco_ros.dir/build.make:128: src/CMakeFiles/mujoco_ros.dir/callbacks.cpp.o] Error 1
cc1plus: all warnings being treated as errors
make[2]: *** [src/CMakeFiles/mujoco_ros.dir/build.make:63: src/CMakeFiles/mujoco_ros.dir/mujoco_env.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:3125: src/CMakeFiles/mujoco_ros.dir/all] Error 2
make: *** [Makefile:141: all] Error 2
cd /home/xzc/mujoco_ros_ws/build/mujoco_ros; catkin build --get-env mujoco_ros | catkin env -si  /usr/bin/make --jobserver-auth=3,4; cd -

.............................................................................................................................................................
Failed     << mujoco_ros:make                   [ Exited with code 2 ]                                                                                       
Failed    <<< mujoco_ros                        [ 4.9 seconds ]                                                                                              
Abandoned <<< mujoco_ros_control                [ Unrelated job failed ]                                                                                     
Abandoned <<< mujoco_ros_pkgs                   [ Unrelated job failed ]                                                                                     
Abandoned <<< mujoco_ros_sensors                [ Unrelated job failed ]                                                                                     
[build] Summary: 1 of 5 packages succeeded.                                                                                                                  
[build]   Ignored:   None.                                                                                                                                   
[build]   Warnings:  None.                                                                                                                                   
[build]   Abandoned: 3 packages were abandoned.                                                                                                              
[build]   Failed:    1 packages failed.                                                                                                                      
[build] Runtime: 5.2 seconds total. 

Is this caused by a mismatch between the versions of Mujoco and mujoco_ros_pkgs?

DavidPL1 commented 10 months ago

Thanks for your appreciation!

Yes, the MuJoCo version and your mujoco_ros_pkgs build seem to be incompatible. I assume you've built the noetic-devel version, which currently only supports MuJoCo 2.3.6. But there is an extra branch running on 2.3.7 right here that should compile just fine with the latest version (though I'd recommend building the release versions of MuJoCo to ensure that there are no compatibility issues).

As for a tutorial: Sadly I cannot offer any in-depth tutorial of any kind, but I can refer you to this demo repo, which contains two example setups.

Don't hesitate to open any new issues if you need some help setting up or configuring, though. That might even put me under the pressure of writing some helpful guides and or tutorials for the community :)

zichunxx commented 10 months ago

Thanks for your response.

For feedback, I've rebuilt Mujoco 2.3.6 and successfully built this repo on the noetic-devel branch. Before that, I tried to build with Mujoco 2.3.7 (the current latest version) and the mj-2.3.7 branch that you mentioned. Some compilation errors still exist.

Thanks for the demo repo, I'll dive into it.

DavidPL1 commented 10 months ago

I tried to build with Mujoco 2.3.7 (the current latest version) and the mj-2.3.7 branch that you mentioned. Some compilation errors still exist.

I think I figured this one out. Could it be that you haven't pulled your MuJoCo repository in a while?

Cause it looks like the 2.3.7 tag was initially referencing the wrong commit. I had a clone on my laptop which I pulled directly at the 2.3.7 release where the 2.3.7 tag would point to dfd463cd, which is a much older commit, where 'mjvSceneState' was not yet included in the code. After pulling, the tag now points to c9246e1f and it compiles just fine.

So make sure you build MuJoCo at c9246e1f and you should have no issues on the mj-2.3.7 branch.

zichunxx commented 10 months ago

Thanks for your patience in reproducing this error!

I have successfully built the mj-2.3.7 branch with Mujoco 2.3.7.