下载mujoco

直接在官方 Github 仓库的 Release 中下载

Github 仓库:https://github.com/google-deepmind/mujoco

解压

tar -zxvf  mujoco-3.3.2-linux-x86_64.tar.gz 

设置环境变量

export MUJOCO_PY_MUJOCO_PATH=~/.mujoco/mujoco-3.3.2
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/.mujoco/mujoco-3.3.2/bin

安装虚拟环境

python -m venv mujoco
conda activate mujoco

安装(python要用3.0版本以上)

pip3 install mujoco

验证安装

#simple_test.py
import mujoco
import numpy as np

print("=" * 60)
print("MuJoCo 基本功能测试")
print("=" * 60)

# 1. 验证导入
print("1. 导入测试... ✓")
print(f"   MuJoCo 版本: {mujoco.__version__}")

# 2. 创建简单模型
print("\n2. 模型创建测试...")
xml = """
<mujoco>
  <visual>
    <headlight ambient="0.3 0.3 0.3"/>
  </visual>
  <worldbody>
    <light name="top" pos="0 0 2"/>
    <geom name="ground" type="plane" size="2 2 0.1" rgba="0.8 0.9 0.8 1"/>
    <body name="ball" pos="0 0 0.5">
      <joint type="free"/>
      <geom type="sphere" size="0.1" rgba="0.8 0.3 0.3 1"/>
    </body>
  </worldbody>
</mujoco>
"""

try:
    model = mujoco.MjModel.from_xml_string(xml)
    data = mujoco.MjData(model)
    print(f"   ✓ 模型创建成功")
    print(f"     自由度: {model.nv}")
    print(f"     几何体: {model.ngeom}")
except Exception as e:
    print(f"   ✗ 模型创建失败: {e}")
    exit(1)

# 3. 模拟测试
print("\n3. 模拟测试...")
for i in range(10):
    mujoco.mj_step(model, data)
print(f"   ✓ 模拟运行成功")
print(f"     球体位置: [{data.qpos[0]:.3f}, {data.qpos[1]:.3f}, {data.qpos[2]:.3f}]")


print("\n" + "=" * 60)
print("✅ MuJoCo 安装成功!所有测试通过")
print("=" * 60)

运行(记得在虚拟环境中运行)

# 确保在虚拟环境中
conda activate mujoco

# 运行测试
python simple_test.py

验证仿真器 simulate

cd mujoco-3.3.2/bin
./simulate ../model/humanoid/humanoid.xml

使用 URDF 文件

mujoco 原生并不支持 urdf 格式的文件,需要将其转换为 xml 后使用

1.获取机器人 urdf 文件

Github 仓库链接:Awesome Robot Descriptions 这里有很多机械臂模型

直接点击 URDF 进入对应的仓库,将整个仓库下载下来,这里为了方便我直接将 aubo_description 这个文件夹拷贝了一份到 mujoco-3.3.2 目录下,当前文件结构如下:

mujoco-3.3.2/
│   ├── aubo_description/
│   ├── bin/
│   ├── include/
│   ├── lib/
│   ├── LICENSE
│   └── model/
├── mujoco_env/
├── sample/
├── simulate/
├── test.py
└── THIRD_PARTY_NOTICES

检查一下 aubo_i5.urdf 文件的link树是否完整:

cd aubo_description/urdf
check_urdf aubo_i5.urdf

2.转换 mesh 文件

2.1使用下面的命令可以直接将 dae 后缀修改为 stl 后缀(机器人模型文件引用的 mesh 文件是 stl 格式,则可以直接跳过)

cd mujoco-3.3.2/aubo_description/meshes
for file in *.dae; do mv "$file" "${file%.DAE}.stl"; done
#如果是大写的DAE就把dae改成DAE

2.2安装依赖库,用python脚本批量修改

import os
import sys
import trimesh

def convert_dae_to_stl(folder_path):
    if not os.path.isdir(folder_path):
        print(f"路径无效:{folder_path}")
        return

    # 获取所有 .DAE 文件(不区分大小写)
    dae_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.dae')]

    if not dae_files:
        print("未找到 .DAE 文件。")
        return

    for dae_file in dae_files:
        # 构建完整路径
        dae_path = os.path.join(folder_path, dae_file)
        # 输出文件名保持原样(仅更改扩展名为 .STL)
        stl_filename = os.path.splitext(dae_file)[0] + '.STL'
        stl_path = os.path.join(folder_path, stl_filename)

        # 如果已存在同名 STL 文件,可选择跳过(避免重复转换)
        if os.path.exists(stl_path):
            print(f"文件已存在,跳过:{stl_filename}")
            continue

        try:
            mesh = trimesh.load(dae_path)
            if mesh.is_empty:
                print(f"跳过空模型:{dae_file}")
                continue

            mesh.export(stl_path)
            print(f"转换成功:{dae_file} -> {stl_filename}")

        except Exception as e:
            print(f"转换失败:{dae_file},错误信息:{e}")

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("用法:python convert.py <文件夹路径>")
    else:
        convert_dae_to_stl(sys.argv[1])

3.修改 urdf 文件

编辑 aubo_i5.urdf 文件

3.1 修改 mesh file 的搜索路径

打开urdf文件后将里面的package://aubo_description/meshes 批量替换成 ../meshes

3.2 修改 .dae 文件后缀为 .stl

urdf文件里的.dae换成.stl

3.3 添加 mujoco mesh重定向信息

在文件末尾处添加以下字段以让mujoco能够找到 mesh 文件(添加的部分一定要在 <robot>...</robot> 标签内):

<robot>
	...
    <mujoco>
        <compiler balanceinertia="true" discardvisual="false" meshdir="../meshes"/>
    </mujoco>
</robot>

4. 运行 urdf 转换命令

cd mujoco-3.3.2/aubo_description/
tree -L 1

├── conv.py
├── meshes
├── README.md
└── urdf

运行转换命令:

./bin/compile aubo_description/urdf/aubo_i5.urdf aubo_description/urdf/aubo_i5.xml

若出现Error: number of faces should be between 1 and 200000 in STL file 'aubo_description/urdf/../meshes_mujoco/base.stl'; perhaps this is an ASCII file?

不能直接通过修改文件后缀的方式,跳回到 2.转换 mesh 文件使用python转换

5.打开仿真器 simulate

cd mujoco-3.3.2
./bin/simulate aubo_description/urdf/aubo_i5.xml

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐