返回列表 发布新帖

人形机器人动力学控制详解(二):浅谈机器人模型描述文件

1549 0
发表于 2024-9-8 14:39:05 | 查看全部 阅读模式
在动力学控制中,除了上一贴说到的动力学模型,我们也需要知道机器人的结构、外形、运动学特性等,尤其是要将一套运动控制算法部署到一台新机器人上时,如何让算法知道被控对象已经被更换了呢?通常采用机器人模型描述文件对机器人的构型进行描述,通过更换算法中描述文件的方式,替换算法被控对象,事实上动力学模型也可以由该文件导出。
1. 什么是模型描述文件模型描述文件是用于描述机器人结构、外形和运动学特性的文件。它通常以XML格式编写,定义了机器人各个部分(如关节、连杆)的属性及其相互之间的连接关系,其中,URDF(Unified Robot Description Format)是一种标准的机器人模型描述语言,它被广泛用于ROS(Robot Operating System)中的机器人描述,URDF文件可通过MATLAB绘制出机器人的外形与结构。
该文件也存在其他的描述形式,在Mujoco仿真中,就需要不同于URDF格式的XML文件进行机器人结构的描述。
2. 为什么要应用模型描述文件模型描述文件为运动学和动力学分析、仿真和可视化提供了基础数据支持。
  • 运动学和动力学分析:提供机器人运动学链的信息,使得开发者可以基于该信息进行运动学求解、控制策略设计等,以Openloong开源动力学控制软件包为例,其中应用Pinocchio库进行机器人运动学和动力学分析,它依赖于URDF文件来获取机器人的结构信息,从而计算机器人动力学、运动学相关参数,Pinocchio库计算得到的正逆运动学、动力学方程、雅可比矩阵、机身惯性张量在后续核心算法中有广泛应用。
  • 机器人仿真:与仿真引擎结合,模型描述文件允许在虚拟环境中进行机器人的仿真和可视化,使开发者可以验证机器人行为。它允许开发者在仿真环境中观察机器人的行为,测试控制算法,并进行调试。
  • 可视化:通过模型描述文件,开发者可以在可视化工具,如Rviz、MATLAB、Mujoco中查看机器人的结构、坐标、惯量等信息,理解机器人各部分之间的关系。这对于调试和开发机器人的控制算法尤为重要。
3. 模型描述文件详解由2我们知道,模型描述文件在动力学控制中有重要作用,模型描述文件一般包括机器人结构、关节、传感器配置等,下面我们以Openloong开源动力学控制软件包为例,详细介绍模型描述文件的各主要部分,由于Openloong算法验证在Mujoco仿真平台上,就以Mujoco要求的XML文件格式进行介绍。
1.  <asset>
为外部资源定义标签,一般用于定义mesh的名称和路径。
  1. <asset>
  2.   <mesh name="base_link" file="base_link.STL"/>
  3.   <mesh name="Link_head_yaw" file="Link_head_yaw.STL"/>
  4.     ...
  5. </asset>
复制代码
2. <worldbody>
包含了整个仿真环境中的所有物体,包括机器人和场景中的固定物体,它是定义物体和几何形状的主要部分。
以下是一个串联系统的示例,该<worldbody>表明,base_link下并联了两个分支,其中一条分支由body1body2串联而成,另外一条分支由body3构成,机器人为浮动基座,因此在base_linkbody下添加自由关节freejoint
  1. <worldbody>
  2.     <body name="base_link" pos="x x x">
  3.         <freejoint name="float_base" />
  4.         <body name="body1" pos="x x x">
  5.             <inertial pos="x x x" quat="x x x" mass="x" diaginertia="x x x"/>
  6.             <joint name="joint1" pos="0 0 0" axis="1 0 0" limited="true" range="x x"/>
  7.             <geom type="mesh" contype="0" conaffinity="0" group="1" density="0" rgba="x x x 1" mesh="body1"/>
  8.             <geom type="mesh" rgba="x x x 1" mesh="body1"/>
  9.             <body name="body2" pos="x x x">
  10.                 ...
  11.                 <joint name="joint2" .../>
  12.                 ...
  13.             </body>
  14.         </body>
  15.         <body name="body3" pos="x x x">
  16.             ...
  17.             <joint name="joint3" .../>
  18.             ...
  19.         </body>
  20.     </body>
  21. </worldbody>
复制代码
其中<inertial>定义一个物体的惯性属性,包括位置、质量和惯性矩阵:pos为惯性参考点相对于物体本地坐标系原点的位置,quat惯性参考点的四元数用于定义其方向和旋转,mass表示物体的质量,diaginertia为物体的对角惯性矩阵,表示物体在三个主要轴上的惯性。
<joint>定义物体之间的关节,用于连接和限制物体的相对运动:name为关节的名称,用于在模型中标识这个关节,pos为节的相对位置(x, y, z),相对于连接的父体,axis为关节的运动轴,表示关节可以围绕这个轴旋转或移动,limited表明是否限制关节的运动范围,range为关节的运动范围,以最小值和最大值表示。
<geom>定义物体的几何形状,用于描述物体的外观和碰撞检测:type定义几何体的类型为网格,表示用自定义网格文件定义形状,contype为碰撞类型,用于定义物体的碰撞分类(影响与其他物体的碰撞行为),conaffinity为碰撞亲和性,用于定义物体与其他物体的碰撞亲和力(影响碰撞的响应),group为碰撞组,用于将物体分组以控制碰撞检测的逻辑,density为几何体的密度(如果定义了density,通常用于计算碰撞体积和质量),rgba为几何体的颜色和透明度(红、绿、蓝、Alpha通道值)。
第二个 <geom> 标签没有碰撞相关属性,主要定义了网格的可视属性:rgba定义了几何体的颜色和透明度,mesh指定使用名为 body1 的网格文件。
3. <contact>
用于定义碰撞相关的参数,exclude表明两个body的碰撞被忽略,一般为了简化机器人的碰撞,机身body之间的碰撞会被忽略。
  1. <contact>
  2.     <exclude name="ex_baselink_waist_pitch" body1="base_link" body2="Link_waist_pitch" />
  3.     <exclude name="ex_waist_pitch_waist_roll" body1="Link_waist_pitch" body2="Link_waist_roll" />
  4.     <exclude name="ex_waist_roll_waist_yaw" body1="Link_waist_roll" body2="Link_waist_yaw" />
  5.       ...
  6. </contact>
复制代码
4. <actuator>
用于定义执行器,以下示例为主动关节设置motor类型的执行器,设置了执行器名称、减速比、限幅等。
  1. <actuator>
  2.     <motor name="M_arm_l_01"  joint="J_arm_l_01" gear="1" ctrllimited="true" ctrlrange="-80 80"/>
  3.     ...
  4. </actuator>
复制代码
5. <sensor>
用于配置传感器,以下范例配置了四元数framequat、速度计velocimeter、角速度计gyro、加速度计accelerometer、力传感器touch等传感器,安装在body标签中已定义好的site处,可根据需要,添加 touchforcetorquejointposjointvelactuatorfrc等传感器。
  1. <sensor>
  2.     <framequat name="baselink-quat" objtype="site" objname="imu" />
  3.     <velocimeter name="baselink-velocity" site="imu" />
  4.     <gyro name="baselink-gyro" site="imu" />
  5.     <accelerometer name="baselink-baseAcc" site="imu" />
  6.     <touch name="lf-touch" site="lf-tc" />
  7.     <touch name="rf-touch" site="rf-tc" />
  8. </sensor>
复制代码


除自由度配置、执行器配置、传感器配置,其他更具体的参数修改可参考Mojoco官方文档
4. 如何导出描述文件3中我们详细描述了xml文件的主要部分,实际应用中XML文件可以由Mujoco根据urdf文件导出,本部分分享下xml文件的导出过程。
准备机器人的URDF文件和mesh文件(STL格式),添加用于mujoco编译的标签:
  1. <mujoco>
  2. <compiler
  3.         meshdir="meshes/"
  4.         balanceinertia="true"
  5.         discardvisual="false" />
  6. </mujoco>
复制代码
切换到mujoco-3.x.x/bin目录,运行指令
  1. ./simulate
复制代码
将urdf文件拖拽进simulate预览界面中,保存xml,注意,mesh文件目录需要对应。
导出后可根据3中的详解和Mujoco官方文档进行适当修改,可参考青龙XML文件




回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2025 OPENLOONG. All Rights Reserved. Powered by Discuz!
  • 关注B站
  • 关注抖音
  • 关注微信公众号
Copyright © 2025 开发者论坛 - OpenLoong 版权所有 All Rights Reserved.
关灯 在本版发帖 返回顶部
快速回复 返回顶部 返回列表