ROS机器人建模与仿真(一)——URDF模型的建立和改进

ROS机器⼈建模与仿真(⼀)——URDF模型的建⽴和改进
申明:本系列参考古⽉⼤神教材《ROS机器⼈开发实践》第六章内容,结合⾃⼰学习过程和遇到的问题逐⼀分解,争取能够吃透!欢迎⼤家⼀起讨论!
URDF 是 ROS 中机器⼈模型的描述格式,包含对机器⼈刚体外观、物体属性关节类型等⽅⾯的描述。URDF(Unified Robot Description Format,统⼀机器⼈描述格式)是 ROS 中⼀个⾮常重要的机器⼈模型描述格式,ROS 同时也提供 URDF ⽂件的 C++ 解析器,可以解析 URDF ⽂件中使⽤ XML 格式描述的机器⼈模型。
使⽤版本: ROS Melodic
1 URDF ⽂件中常⽤的标签
1.1 < link > 标签
< link >标签⽤于描述机器⼈某个刚体部分的外观和物理属性,包括尺⼨(size)、颜⾊(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。
机器⼈的 link 结构,基本 URDF 描述语法如下:
<link name="<link name>">
<inertial> ------------</inertial>
<visual>-------------</visual>
<collision>--------- </collision>
</link>
< visual >⽤于描述机器⼈link部分的外观参数,< inertial >标签⽤于描述link的惯性参数,⽽< collision >标签⽤于描述link的碰撞属性。⼀般来说,检测碰撞的link区域⼤于外观可视的区域,也就是说有⼀定的安全空间
1.2 < joint >标签
< joint >标签⽤于描述机器⼈关节的运动学和动⼒学属性,包括关节运动的位置和速度限制。机器⼈关节的主要作⽤是连接两个刚体link,这两个link分别称为 parent link 和 child link。
< joint >标签的描述语法如下:
<joint name="<name of the joint>">
<parent link="parent_link"/>
<child  link="child_link"/>
<calibration ----/>
<dynamics damping----/>
<limit effort----/>
</joint>
其中必须指定joint的parent link 和 child link,还可以设置关节的其他属性。
< calibration > : 关节的参考位置,⽤来校准关节的绝对位置
< dynamics > : ⽤于描述关节的物理属性,例如阻尼值、物理经摩擦⼒等,经常在运动学仿真中⽤到。
< limit > : ⽤于描述运动的⼀些极限值,包括关节运动的上下限位置、速度限制、⼒矩限制等。
< mimic > : ⽤于描述该关节与已有关节的关系。
< safety_controller > : ⽤于描述安全控制器的参数。
1.3 < robot > 标签化学膨胀螺栓
< robot > 是完整机器⼈模型的最顶层标签,< link > 和 < joint > 标签都必须包含在< robot >标签内。⼀个完整的机器⼈模型由⼀系列的< link > 和 < joint > 组成。
< robot >标签语法如下:
<robot name="<name of the robot>">
<link> -------</link>
<link> -------</link>
<joint>-------</joint>
<joint>-------</joint>
</robot>
1.4 < gazebo >标签
< gazebo >标签⽤于描述机器⼈模型在Gazebo中仿真所需要的参数,包括机器⼈材料的属性、Gzaebo 插件等。该标签不是机器⼈模型必须的部分,只有在 Gazebo 仿真时才需加⼊。
< gazebo >标签的基本语法如下:
<gazebo reference="link_1">
<material> Gazebo/Black</material>
</gazebo>
2 创建⼀个机器⼈URDF 模型
2.1 准备⼯作(创建功能包和⽂件夹)
创建test_mrobot_description功能包,依赖urdf,xacro
在其下创建4个⽂件夹urdf、meshes、launch和config
urdf : ⽤于存放机器⼈模型的 URDF 或 xacro ⽂件
meshes : ⽤于存放URDF中引⽤的模型渲染⽂件
launch : ⽤于存放相关启动⽂件
config : ⽤于存放⽇ rviz 的配置⽂件
2.2 创建 URDF 模型
任务:创建⼀个机器⼈的底盘模型
这个机器⼈底盘模型有7个link和6个joint。7个 link 包括 1 个机器⼈底板、2个电机、2个驱动轮和2个万向轮;6个 joint 负责将驱动轮、万向轮、电机安装到底板上,并设置相应的连接⽅式。
模型⽂件test_mrobot_chassis.urdf
(经过测试,URDF⽂件不能加⼊中⽂字符,写程序时注意将中⽂注释去掉)
<?xml version= "1.0" ?>
<!--申明该⽂件使⽤XML描述-->
<robot name="test_mrobot_chassis">
<!--定义机器⼈的名称-->
<link name="base_link">
<!--定义第⼀个link——底盘-->
<visual>
<!--外观-->
<origin xyz="0 0 0"rpy="0 0 0"/>
<!--申明三维坐标位置和旋转姿态-->
<geometry>
<!--⼏何尺⼨-->
<cylinder length="0.005"radius="0.13"/>
<!--圆柱体⾼0.005 半径0.13-->
</geometry>
<material name="yellow">
<!--定义颜⾊-->
<color  rgba="1 0.4  0 1"/>
</material>
</visual>
</link>
</link>
<joint name="base_left_motor_joint"type="fixed">
<!--关节:连接底盘和左驱动电机,类型为fixed,固定-->
<origin xyz="-0.055 0.075 0"rpy="0 0 0"/>
<parent link="base_link"/>
<!--定义⽗link-->
冲淋房
<child link="left_motor"/>
<!--定义⼦link-->
</joint>
瞄准器<link name="left_motor">
<!--左电机link-->
<visual>
<origin xyz="0 0 0 "rpy="1.5707 0 0"/>
<!--绕X轴倾⾓约为90度-->
<geometry>
<cylinder radius="0.02"length="0.08"/>
</geometry>
<material name="gray">
<color rgba="0.75 0.75 0.75 1"/>
</material>
</visual>
</link>
<joint name="left_motor_wheel_joint"type="continuous"> <!--关节:左轮和左电机,类型为围绕轴进⾏旋转-->
<origin xyz="0 0.0485 0"rpy="0 0 0"/>
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<!--左轮link-->
<visual>
<origin xyz="0 0 0"rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.033"length="0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9 "/>
</material>
</visual>
</link>
<!--右轮与左轮⼏乎相同,注释不再写-->
<joint name="base_right_motor_joint"type="fixed">
<origin xyz="-0.055 -0.075 0"rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_motor"/>
</joint>
<link name="right_motor">
<visual>
<origin xyz="0 0 0"rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.02"length="0.08"/>
</geometry>
<material name="gray">
<color rgba="0.75 0.75 0.75 1"/>
</material>
</visual>
</link>
<joint name="right_motor_wheel_joint"type="continuous">
<joint name="right_motor_wheel_joint"type="continuous">
<origin xyz="0 -0.0485 0"rpy=" 0 0 0"/>
<parent link="right_motor"/>
蜡烛颜料<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0"rpy="1.5707 0 0"/>
<geometry>
<cylinder radius="0.033"length="0.017"/>
</geometry>
<material name="white">
<color rgba=" 1 1 1 0.9"/>
</material>
</visual>
</link>
<!--前万向轮-->
<joint name="front_castor_joint"type="fixed">
<origin xyz="0.1135 0 -0.0165"rpy=" 0 0 0"/>
干墙
<parent link="base_link"/>
<child link="front_castor_link"/>
</joint>
<link name="front_castor_link">
<visual>
<origin xyz=" 0 0 0"rpy="0 0 0"/>
<geometry>
<sphere radius="0.0165"/>
</geometry>
<material name="black">
<color rgba="0 0  0 0.95"/>
</material>
</visual>
</link>
</robot>
URDF提供了⼀些命令⾏⼯具,帮助我们检查、梳理模型⽂件,⾸先在终端安装:
sudo apt-get install liburdfdom-tools
使⽤ check_urdf 命令对 mrobot_chassis.urdf ⽂件进⾏检查,切记:使⽤命令时需要进⼊存放此 .urdf ⽂件的⽂件夹中:
check_urdf test_mrobot_chassis.urdf
check_urdf 的作⽤是解析URDF⽂件,并且显⽰解析过程中发现的错误。如果⼀切正常,会输出如下结果:
固液分离装置还可以使⽤ urdf_to_graphiz 命令查看URDF模型的整体结构:
urdf_to_graphiz test_mrobot_chassis.urdf
执⾏ urdf_to_graphiz 命令后,会在当前⽬录下⽣成⼀个pdf⽂件(另外,还会⽣成⼀个 .gv格式的⽂件,不知道如何打开,有知道的可以讨论下):
2.3 在rviz中显⽰模型
创建⼀个launch⽂件,test_display_mrobot_chassis_urdf.launch ,详细内容如下:
<launch>
<param name="robot_description"textfile="$(find test_mrobot_description)/urdf/test_mrobot_chassis.urdf"/>
<!--设置GUI参数,显⽰关节控制插件-->
<param name="use_gui"value="true"/>
<!--运⾏ joint_state_publisher 节点,发布机器⼈的关节状态-->
<node name="joint_state_publisher"pkg="joint_state_publisher"type="joint_state_publisher"/>
<!--运⾏ robot_state_publisher 节点,发布TF-->
<node name="robot_state_publisher"pkg="robot_state_publisher"type="robot_state_publisher"/>
<!--运⾏rviz可视化界⾯-->
<node name="rviz"pkg="rviz"type="rviz"args="-d $(find test_mrobot_description)/config/mrobot_urdf.rviz"required="true"/>
</launch>
(特别注意,第⼀次打开rviz,配置好插件后,save config as保存 .rviz⽂件,在通过args加载保存好的config⽂件)
joint_state_publisher 和 robot_state_publisher两个节点都是系统⾃带的,joint_state_ publisher可以发布每个joint(除了fixed类型)的状态,⽽且能通过UI 对joint进⾏控制。
robot_state_publisher节点的功能是将机器⼈各个link、joint之间的关系,通过TF 的形式整理成三维姿态信息发布出去。在rviz中,选择TF插件可以显⽰各部分的坐标信息。
3 改进URDF模型
3.1 添加物理和碰撞信息
在之前的模型中,我们仅创建了模型外观的可视化属性,除此之外,还需要添加物理惯性属性和碰撞属性。
惯性参数的设置主要包括质量和惯性矩阵。规则物体可以通过尺⼨、质量等计算得到惯性矩阵。
为了简化,碰撞属性标签< collision >和外观属性标签 < visual >中的内容⼏乎⼀致。
规则物体的惯性矩阵计算公式:(转⾃ :)

本文发布于:2024-09-24 16:25:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/305883.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:机器   模型   关节   描述   属性
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议