Your robot may have different components, such as arm, gripper, force sensor. So please check it carefully if you want to this model!
We will create a dual ur5 husky mujoco model based on original dual-ur5-husky reps. For the Gazebo demo and some related setting, you can find old repo and new repo. We use old repo in this tutorial.
Here is the official introduction about URDF in mumjoco here, we can know that urdf is different from mujoco mjcf file.
What we need for the mojuco model is just the stl file and urdf file. So first, download all the needed packages as follows:
mkdir -p ~/dual_ws/src
cd ~/dual_ws/src && catkin_init_workspace
git clone https://github.com/DualUR5Husky/husky
git clone https://github.com/DualUR5Husky/ur_modern_driver
git clone https://github.com/DualUR5Husky/universal_robot
git clone https://github.com/DualUR5Husky/robotiq
git clone https://github.com/DualUR5Husky/husky_simulator
git clone https://github.com/DualUr5Husky/flir_ptu
Some official repos have updated, like universal_robot, robotiq. If you want to control them for the real robot, please update the latest drivers. But for now, we just use the husky repos for modelling.
The dual ur5 husky model in Gazebo:
There are some points you need to notice for mujoco modelling.
For the URDF file, there usually have two types of mesh file: dae file for visualization and stl file for collision. However, from here, we can know that mujoco cannot import .dae
file, so we should convert the .dae
file to .stl
file. You can use MeshLab to convert the format and it is very easy to use.
Then, we should put all the mesh files to a folder that mujoco can find them. P.S. some related questions here: Multiple mesh folders
Here, I create a folder named meshes-mujoco and put all the related mesh files in it (each mesh file must has unique name).
1. add mujoco tags
From the top robot urdf tags, we need to add some mujoco tags. For my robot, the meshdir, balanceinertia, discardvisual tags are needed. For the details of the tags, click here.
Add balanceinertia tag if you get the error:
Error: inertia must satisfy A + B >= C; use 'balanceinertia' to fix
Object name = inertial_link, id = 3
If you want your robot look good, not just simple geometry, add discardvisual tag. The default value is true, so it will discard the visual stl file and change the complex mesh files to the simple convexhull geometry files, like box, cylinder. The reason is that the pysical simulator can only use the simple geometry to calculate or detect collision. See more details here (some meshes ignored when converting urdf to mjcf).
Note that the collision geoms are placed in geom group 0 in default, while visual geoms are placed in geom group 1. You can toggle the rendering of each group pressing '0' and '1' respectively (in the GUI, press "0" and "1", you can see the collision rendering(simple geometry) or visual rendering(beautiful)).
<mujoco>
<compiler
meshdir="../meshes_mujoco/"
balanceinertia="true"
discardvisual="false" />
</mujoco>
2. check urdf file
What's more, do not forget to change the path of mesh file that they can find the files.
If you have the xacro file, you need to convert it to a urdf file first:
rosrun xacro xacro --inorder model.xacro > model.urdf
Then use ROS command to check the urdf file. If there are errors, check your xacro file again.
check_urdf model.urdf
3. visualize the model in rviz (not a must)
roslaunch urdf_tutorial display.launch model:=path/to/your/urdf/file
1. convert
Enter the path ~/mujoco/mujoco200/bin
first and run command below:
$./compile /path/to/model.urdf /path/to/model.xml
Helper function:
$./compile
Usage: compile infile outfile
infile can be in mjcf, urdf, mjb format
outfile can be in mjcf, mjb, txt format
Usually, we use the xml file.
2. test
mujoco200/bin$ ./simulate /path/to/model.xml
Here is the collision version:
The raw xml file only contain basic robot structures, so we must add more mujoco tags. From here get more details.
Add light and some other objects:
The final model is here:
Okay we have got a initial mujoco model. However, if you want to use the model in reinforcement learning or control loop, there are still a lot of works to do. Here are good repos to refer:
dual_ur5_husky_mujoco is open-sourced under the Apache-2.0 license. See the LICENSE file for details.
Please cite the paper in your publications if it helps your research:
@Article{s20030939,
AUTHOR = {Wang, Cong and Zhang, Qifeng and Tian, Qiyan and Li, Shuo and Wang, Xiaohui and Lane, David and Petillot, Yvan and Wang, Sen},
TITLE = {Learning Mobile Manipulation through Deep Reinforcement Learning},
JOURNAL = {Sensors},
VOLUME = {20},
YEAR = {2020},
NUMBER = {3},
ARTICLE-NUMBER = {939},
URL = {https://www.mdpi.com/1424-8220/20/3/939},
ISSN = {1424-8220},
DOI = {10.3390/s20030939}
}