mujoco 3.x版本导入urdf/xml文件并仿真显示

我是在Ubuntu22.04下操作的~
想要实现机器人相关控制,你需要正确地安装ROS2、mujoco等~

关于URDF

URDF(Universal Robot Description Format)是一种用于描述机器人模型的标准格式,其实就相当于3维模型~ 常用于仿真。URDF文件(.urdf)通常以XML格式编写,允许定义机器人的链接(links)、关节(joints)、材料(materials)、碰撞(collisions)、视觉(visuals)等属性。
URDF代码结构主要包括<robot><link><joint>等。

因为URDF是XML语法,所以先了解下xml基本语法:

  • 以尖括号(< >)包围的元素,各元素可以是自闭合的(如<mesh/>)或有开始和结束标记(如<link></link>)。元素之间可以嵌套,内容可以是文本、属性或其他子元素。属性通过name-value对的形式书写在开始标签内,详述了元素的特性。而一个基本的URDF文件通常会以<?xml version="1.0"?>作为开头声明文件版本。紧接着是根元素<robot>标签,这个标签有一个属性name,用来指定机器人的名称。

  • <robot>标签内部,可以定义多个<link>标签来表示机器人上的各个部件或关节末端。每个<link>可以包含几何信息,如碰撞体(collision)、可视化模型(visual)等,这些信息通过<geometry>标签及其子标签如<mesh><box><cylinder>等来描述。

  • 此外,<joint>标签用来定义连接不同<link>的关节。每个<joint>标签同样有若干属性,包括定义关节名称的name、描述关节类型的type(如revolute、prismatic等),以及定义关节所连接的父链接和子链接的parentchild属性。关节还可以定义运动范围限制(limit)、物理属性(如摩擦力friction)等细节,这些都是通过<limit><dynamics>等子标签实现的。

  • xml允许使用注释<!-- -->来标注说明性的文字。

一个简单的机械臂URDF,给大家看下~

<?xml version="1.0"?>
<robot name="simple_arm">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.1 0.1 0.1"/>
            </geometry>
        </visual>
        <collision>
            <geometry>
                <box size="0.1 0.1 0.1"/>
            </geometry>
        </collision>
    </link>
    
    <link name="link1">
        <visual>
            <geometry>
                <cylinder radius="0.02" length="0.5"/>
            </geometry>
        </visual>
        <collision>
            <geometry>
                <cylinder radius="0.02" length="0.5"/>
            </geometry>
        </collision>
    </link>
    
    <joint name="joint1" type="revolute">
        <parent link="base_link"/>
        <child link="link1"/>
        <origin xyz="0 0 0.25" rpy="0 0 0"/>
        <axis xyz="0 0 1"/>
        <limit lower="0" upper="1.57" effort="10" velocity="1"/>
    </joint>
</robot>

URDF网上资料很多,具体细节就不赘述了~

MuJoCo导入URDF模型的步骤:

mujuco3.x版本以上支持直接导入urdf,对于所导入的urdf/xml,这里有详细介绍:官网xml格式介绍,非常全

  1. 首先在你的工作目录下把你的urdf文件(假设为robot.urdf)拷贝过来~
  2. urdf文件的开头部分,robot标签之后添加<mujoco>标签,如下:
<?xml version="1.0" ?>
<robot name="XXX">
<mujoco>
	<compiler 
	meshdir="meshes/" 
	balanceinertia="true" 
	discardvisual="false" />
</mujoco>

可以看到我们添加了<compiler>标签,它是用于设置内置解析器和编译器的选项,还有一些其他的参数,辛苦整理了一下:

参数类型默认值说明使用示例
autolimits[false, true]true影响关节、肌腱等的限制属性。若为“true”,根据范围属性自动推断限制,反之则需要手动指定。<compiler autolimits="false"/>
boundmass实数0设置每个物体的最小质量下限。可用于修复质量为零的物体。<compiler boundmass="0.1"/>
boundinertia实数0设置每个物体的惯性成分的最小下限。<compiler boundinertia="0.01"/>
settotalmass实数-1若为正值,编译器将缩放所有物体的质量,使总质量等于该值。<compiler settotalmass="5"/>
balanceinertia[false, true]false确保惯性矩阵满足特定条件,遇到不满足条件的模型时将自动调整惯性成分。<compiler balanceinertia="true"/>
strippath[false, true]false (MJCF) / true (URDF)去除文件名中的路径信息,便于跨系统加载模型。<compiler strippath="true"/>
coordinate[local, global]local定义坐标系,注意“global”选项已被移除。<compiler coordinate="local"/>
angle[radian, degree]degree (MJCF) / radian (URDF)定义角度单位。所有角度在最终模型中始终以弧度表示。<compiler angle="degree"/>
fitaabb[false, true]false使用轴对齐边界框(aabb)进行网格拟合;若为“false”,则使用等效惯性盒。<compiler fitaabb="true"/>
eulerseq字符串xyz确定欧拉旋转的顺序,由三个字符(x、y、z, X, Y, Z)组成。<compiler eulerseq="zyx"/>
meshdir字符串可选查找网格和高度场文件的目录。<compiler meshdir="/path/to/meshes"/>
texturedir字符串可选查找纹理文件的目录。<compiler texturedir="/path/to/textures"/>
assetdir字符串可选同时设置meshdirtexturedir<compiler assetdir="/path/to/assets"/>
discardvisual[false, true]false (MJCF) / true (URDF)丢弃所有纯视觉元素,优化模型的计算效率。<compiler discardvisual="true"/>
convexhull[false, true]true为所有网格生成凸包,以加速碰撞检测。<compiler convexhull="false"/>
usethread[false, true]true指定编译器是否以多线程模式运行,当前用于计算执行器的长度范围和加载网格。<compiler usethread="true"/>
fusestatic[false, true]false (MJCF) / true (URDF)控制静态物体与其父物体合并的优化特性,适用于URDF模型。<compiler fusestatic="true"/>
inertiafromgeom[false, true, auto]auto控制是否通过物体附带的几何体自动推断质量和惯性。<compiler inertiafromgeom="true"/>
exactmeshinertia[false, true]false计算网格惯性的算法,若为“true”,则对任意闭合网格几何体精确。<compiler exactmeshinertia="true"/>
alignfree[false, true]false开启后,带自由关节的物体会自动与惯性框对齐,提高稳定性和速度。<compiler alignfree="true"/>
inertiagrouprange整数0 5指定用于推断质量和惯性的几何体组范围。<compiler inertiagrouprange="0 3"/>
  1. 随后新建meshes文件夹,然后把urdf用到的所有模型文件都放入进去如.stl/.dae/.obl/.mtl

注意meshes在同级目录下

  1. 新建一个python文件,添加代码:
import mujoco
import mujoco.viewer as viewer

# viewer.launch()
viewer.launch_from_path("robot.urdf")

运行代码,即可仿真,但是模型一直剧烈抖动,因为没加<actuator>标签~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值