一、基础术语解释刚体Body仿真中的基本运动单元具有质量、惯性、位置、姿态等属性默认不可变形关节Joint约束两个刚体相对运动的组件通过「限制自由度」实现特定运动如铰链关节仅允许旋转自由度DOF刚体在空间的独立运动数量3 平移 3 旋转 6 DOF关节本质是「减少自由度」几何体Geom刚体的碰撞/可视化表征如球、立方体、胶囊体用于计算接触力MJCF/URDF模型描述文件XML 格式定义仿真场景的刚体、关节、约束等所有元素世界坐标系Worldbody仿真世界的全局坐标系所有刚体都直接/间接关联于此二、建模标签介绍建模文件格式为XML格式1、世界根节点mujoco model模型名称 /mujoco2、仿真计算配置compiler节点compiler angleradian/degree autolimitstrue compiler节点中定义的包括angle角度单位/radian(弧度单位)autolimits受力限制等常用的就像上面这样写就行规定角度单位为弧度制受力限制开启。角度单位为弧度制是机器人开发的常用单位制。option节点设置场景中的属性选项option timestep0.002 gravity0 0 -9.81 integratorimplicitfast density1.225 viscosity1.8e-5/timestep代表仿真走一步的时间也就是运行一次之后仿真计算出timestep时长后的世界单位秒。timestep是一定要规定的不然仿真不知道如何计算gravity 重力加速度wind 风在三个方向的速度magnetic0 -0.5 0世界磁场影响磁力传感器density 介质密度水空气等单位kg/m³viscosity介质粘度integrator[Euler/RK4/implicit/implicitfast]积分器默认欧拉用于仿真世界每步就求解计算各个优势见下图影响仿真的精度solver[PGS, CG, Newton]求解器配置默认牛顿iterations100 约束求解器最大迭代次数,按需配置。 求解器其他配置积分器比较3、可视化配置visual节点visual global realtime1/ quality shadowsize16384 numslices28 offsamples4 / headlight diffuse1 1 1 specular0.5 0.5 0.5 active1 / rgba fog0 1 0 1 haze1 0 0 1/ /visualglobal:realtime仿真速度比例在simulate中可以使用大于1的按1计算quality:画面质量shadowsize: 阴影效果数值越大渲染越精细headlight和simulate中自由相机相同方向的光源 diffuse头灯的亮度 specular反射的光的颜色map鼠标影响操作scale渲染缩放rgba:fog 迷雾颜色haze 地平线颜色4、资源配置配置接下来场景中的资源文件asset mesh nametetrahedron vertex0 0 0 1 0 0 0 1 0 0 0 1 / mesh filecard.obj / texture type2d file./king_of_clubs.png / material nameking_of_clubs textureking_of_clubs / hfield nameagent_eval_gym fileagent_eval_gym.png size10 10 1 1 / texture typeskybox file../asset/desert.png gridsize3 4 gridlayout.U..LFRB.D.. / texture nameplane type2d builtinchecker rgb1.1 .1 .1 rgb2.9 .9 .9 width512 height512 markcross markrgb.8 .8 .8 / material nameplane reflectance0.3 textureplane texrepeat1 1 texuniformtrue/ material namebox rgba0 0.5 0 1 emission0/ /asset几何资源 mesh默认长度单位是米meters, m对应的质量单位是千克kgvertex通过坐标点构造几何体file加载obj或者stl模型文件不指定name默认为文件名 scale 缩放默认为以m为单位hfield通过高度图加载几何体高度场通过图片加载 size:缩放纹理/材质资源texture 可以通过加载png对物体进行贴图使用方法texture-materialmaterial 材质可以指定纹理颜色反射发光等skybox texture的类型直接加载即可 天空盒演示texture typeskybox builtingradient rgb11 1 1 rgb20.6 0.8 1 width256 height256/5、worldbody场景中的根节点所有之前配置的属性或者资源文件可以在这里进行配置从而交给mujoco渲染geomtype[plane/hfield/sphere/capsule/ellipsoid/cylinder/box/mesh/sdf]size0 0 0三个参数根据type选择填写pos0 0 0位置priority0碰撞优先级materialxxx材质名rgba0 0 0 0几何体颜色比材质省资源friction1 0.005 0.0001滑动扭矩滚动摩擦系数mass质量单位kg它和密度只能有一个density0密度单位kg/m³它和质量拼了shellinertia[true/false]开了就是质量集中在边缘关了就是均匀密度fromto0 0 0 0 0 0类似旋转通常代替旋转长度只能用于胶囊、盒子、圆柱体和椭球体前三个是point1后三个point2几何体的Z轴正方向为point2-point1quat, axisangle, xyaxes, zaxis, eulerquat:wxyz,isaac gym:xyzweuler:xyz地板(plane)演示texture namegrid type2d builtinchecker width2048 height2048 rgb1.3 .4 .8 rgb2.9 .9 .9 / geom nameground typeplane size100 100 .01 materialgrid /site简易版geom不作为碰撞体积和质量计算只能使用简易几何体适用于在某些小部位安装传感器或者小结构渲染等其属性和geom非常相近body在运动仿真过程中我们要实现整个机器人模型也就是身体骨骼关节拼接出来及对应bodygemo和joint多个body嵌套就是机器人整体整体也是呈树状嵌套。在添加joint之前我们先学习一下mujoco中body的坐标树规则这个和ros的tf树很像可以类比。机器人对于世界有一个坐标机器人每个坐标系都是基于上一个坐标系的相对位置其中body在循环嵌套每一层中的gemo都是对于这一层的body的相对位置每个body的坐标都是对于上一个body的相对位置。这和tf树模式几乎差不多就如下图一样joint定义关节连接将body之间连接在一起使其可以进行活动。这么说吧body中的所有geom为一个整体然后joint是连接这些整体的。就是body和body靠joint活动body中只能有一个joint用来连接当前body和上一层body。再根本一点就是joint对于上一层body是相对静止的当前body与joint是在运动。!-- 支撑柱 -- body namesupport pos0 0 0.1 geom typecylinder mass100 size0.05 0.5 rgba0.2 0.2 0.2 1/ !-- 水平杆 -- body namerotay_am pos0 0 0.51 joint typehinge namepivot pos0 0 0 axis0 0 1 damping0.001 frictionloss0.0 stiffness0.5/ geom typecapsule mass0.01 fromto0 0 0 0.2 0 0 size0.01 rgba0.8 0.2 0.2 0.5/ !-- 摆 -- body namependulum pos0.2 0 0 joint typehinge nameph pos0 0 0 axis1 0 0 damping0.001 frictionloss0.0 / geom typecapsule mass0.005 fromto0 0 0 0 0 -0.3 size0.01 rgba0.8 0.2 0.2 1 / !-- 配重 -- geom typesphere mass0.01 size0.03 pos0 0 -0.3 rgba0.2 0.8 0.2 1 / /body /body /bodyfrictionfriction有三个参数分别是滑动摩擦转动摩擦滚动摩擦系数option椭圆/金字塔cone[pyramidal, elliptic]摩擦力近似计算方法,默认pyramidal计算速度快elliptic效果更好 impratio1 椭圆摩擦的比例更高的数值摩擦力会更硬一些防止打滑不建议在使用pyramidal的时候调大适合机械臂抓取打滑时调整参数actuator是连接控制指令与机器人关节 / 刚体的 驱动桥梁用于将外部控制信号如ctrl数组中的数值转换为仿真中的力 / 扭矩 / 位置约束驱动模型运动如关节旋转、机械臂伸缩。输入控制信号范围通常可通过ctrlrange限制输出力、扭矩或位置 / 速度约束依执行器类型而定常用简洁类型motor最常用输出扭矩驱动关节适用于旋转 / 平移关节position位置伺服执行器驱动关节跟踪目标位置velocity速度伺服执行器驱动关节保持目标速度light 灯光节点节点用于在仿真场景中定义光源核心作用是照亮场景、增强 3D 视觉效果让模型和几何形状的轮廓、细节更清晰可见不影响物理仿真过程仅作用于视觉渲染。通常嵌套在 节点下全局光源也可嵌套在其他 节点下随刚体运动的局部光源。核心作用提供视觉渲染的光照支持无物理仿真相关影响。常用光源类型通过type属性指定默认类型为directional平行光。directional平行光如太阳光无衰减光线沿指定方向均匀照射整个场景。point点光源如灯泡从某一点向所有方向发射光线光线强度随距离衰减。spot聚光灯从某一点向指定方向发射锥形光束仅照亮锥形区域。pos光源的位置适用于point/spot类型directional类型无需指定仅需方向。dir光源的照射方向适用于directional/spot类型格式为x y z。rgba光源的颜色与强度格式为r g b a取值范围[0,1]a通道此处通常对应光照强度。castshadow是否投射阴影true/false默认通常为false开启后视觉效果更真实但略耗渲染性能。!-- 1. 平行光directional模拟太阳光照亮整个场景 -- light namesun_light typedirectional dir-1 -1 -1 !-- 从右上方向左下方照射 -- rgba1 0.9 0.8 1 !-- 暖白色光强度1 -- castshadowtrue/ !-- 开启阴影 --tendon 肌腱tendon用于模拟柔性肌腱 / 绳索 / 缆线的力学行为核心作用是传递力而非直接产生力连接模型中的多个关节、刚体或站点site实现类似人体肌腱、机器人钢缆的联动效果如通过肌腱拉动多个关节协同运动或约束刚体间的相对运动。力学属性柔性为主可设置刚度、阻尼、长度限制等不具备刚体的刚性约束受力时会产生微小变形并传递张力。核心作用传递张力、实现多部件联动、约束部件运动范围不直接驱动模型需配合 actuator 执行器提供驱动力。归属直接在 mujoco 根节点下配置与 、 同级通过 标签定义。常用类型通过type属性指定spatial最常用空间肌腱可连接任意数量的站点site、关节支持复杂空间路径。muscle肌肉肌腱模拟骨骼肌的主动收缩特性可直接接收控制信号产生张力无需额外 motor 执行器。wire线缆肌腱简化版空间肌腱适用于直线传递张力的场景。spatial使用tendon组合关节驱动的时候要使用tendon下面的spatial节点。spatial是类似一种像肌肉一样的驱动方式比如线驱灵巧手等。如下图所示的驱动方式通过每个site来拉住关节驱动。传感器常见有相机传感器关节角度传感器关节速度传感器激光测距传感器等三、核心架构静态模型MjModel存储仿真场景的静态结构一旦加载不再变化内容包括机器人几何形状、关节类型旋转 / 平移 / 球铰等、材质参数密度 / 摩擦系数、约束关节限位 / 力约束、传感器力 / 位置 / 视觉传感器、灯光 / 相机等加载方式从 XML/URDF 文件加载推荐 XMLMuJoCo 原生格式或通过 API 动态构建。动态数据MjData存储仿真过程中的动态状态每一步仿真都会更新内容包括关节位置qpos、关节速度qvel、控制输入ctrl、接触力contact、传感器数据sensordata、物体位姿等是用户交互的核心读取仿真状态、设置控制指令如关节力矩都通过MjData实现。
郑州网站建设
网页设计
企业官网