ROS中URDF的学习以及与Xacro的比较
2024-10-02 05:13:36
1.urdf与Xacro简单比较
"URDF" 是最初也是比较简单的机器人描述文件,它的结构简单明了,容易理解。但是这也导致当机器人模型变得复杂时,urdf的结构描述就变得冗长,无法简洁有效的描述机器人部件;
"Xacro" 的出现在一定程度上有效地解决这种问题。在本质上,Xacro与URDF是等价的,但Xacro格式提供了一些更高级的方式来组织和编辑机器人描述。
2.urdf文件结构与Xacro文件结构
URDF--主要部件
示例如下:定义个robot name, 将其他的部件都放在里面,然后针对每一个关键(joint ), 坐标外观(geometry), 材料(material)分别进行描述。 其中,每个child link是以parent link 为原点的三维坐标系位置(Origin), 若没有parent link的origin则是相对于本身原位置的转换。
<?xml version="<?xml version="1.0"?>
<robot name="test_robot">
<link name="base_link" />
<link name="link2" />
<link name="link3" />
<link name="link4" />
<link name="base_link">
<visual>
<geometry>
<box size="0.25 .16 .05"/>
</geometry>
<origin rpy="0 0 0" xyz="0 0 0"/>
<material name="blue">
<color rgba="0 0 .8 1"/>
</material>
</visual>
</link>
<joint name="joint1" type="continuous">
<parent link="base_link"/>
<child link="link2"/>
<origin xyz="0.3 0 0" rpy="1 0 0" />
</joint>
<joint name="joint2" type="continuous">
<parent link="base_link"/>
<child link="link3"/>
<origin xyz="0 0.3 0" rpy="0 1 0" />
</joint>
<joint name="joint3" type="continuous">
<parent link="base_link"/>
<child link="link4"/>
<origin xyz="0 0 0.3" rpy="0 0 1" />
</joint>
</robot>
其他部件标签如: "Collision", "Axis joint", "Limit"暂略.
Xacro--主要部件
定义宏属性: Constants
<xacro:property name="WIDTH" value="2.0"/>
<xacro:property name="PI" value="3.14159265" />
使用:${PI/2}
Macros: 小模块的定义,方便重用,以及可以使用参数来标识不同的部分
<xacro:macro name="default_link" params="prefix *origin">
<link name="${prefix}_link1" >
<xacro:insert_block name="prigin" />
</link>
</xacro:macro> <xacro:default_link prefix="my">
<origin xyz="0 0 0" rpy="0 0 0" />
</xacro:default_link>
include:很多模型已经定义好分成多个文件,我们可以用include格式将各个部件加进来,并且还可以加入urdf文件。
<xacro:include firename="${find packages}/urdf/***.xarco" />
<xacro:include firename="${find packages}/urdf/***.urdf" />
3.两种不同机器人描述文件的显示方式
URDF
<launch>
<arg name="model" />
<arg name="gui" default="false" />
<param name="robot_description" textfile="$(find basic_3d_visualizer)/urdf/First01learn.urdf" />
<param name="use_gui" value="$(arg gui)"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find basic_3d_visualizer)/urdf/urdf_test.rviz" />
</launch>
Xacro
<launch>
<arg name="model" />
<arg name="gui" default="true" />
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find basic_3d_visualizer)/urdf/First01learn.urdf" />
<param name="use_gui" value="$(arg gui)"/>
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" />
</launch>
[参考链接]
2. Xacro文件详述
3. URDF 结构详解
4. URDF初级
5. URDF 链接标签详解
Author: Ian
星期二, 09. 七月 2019 11:03上午
最新文章
- adb connect 出现timeout的处理方式
- The operation couldn’t be completed. (LaunchServicesError error 0.)
- mysql dba系统学习(6)二进制日志binlog之二
- mybatis,Spring等工具对xml文件正确性的验证
- php Hash Table(二) Hash函数
- 如何让linux定时任务crontab按秒执行
- Net use命令
- Codeforces Round #277 (Div. 2)
- PLSQL往Oracle数据库插入中文后变为问号 和 启动PLSQL时提示NLS_LANG在客户端不能确定的解决办法
- SQL Server2008数据库导入导出兼容性处理
- Contact Form 7邮件发送失败的解决办法
- POJ1094 Sorting It All Out(拓扑排序)
- Java -- WeakHashMap
- 【.NET】Repeater控件简单的数据绑定(有bool,日期,序号)
- Linux下 Unison 实现文件双向同步
- 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的
- python实现:最长子字符串
- JBOSS EAP实战(2)-集群、NGINX集成、队列与安全
- Java设计模式之《适配器模式》及应用场景
- pwnable.kr-fd-witeup
热门文章
- Win8 Metro(C#)数字图像处理--2.63图像指数增强
- C#数据导出Excel详细介绍
- [PowerDesign]将数据库从SQL Server数据库转换为MySQL
- 改善C#程序的建议1:非用ICloneable不可的理由
- InfoPath分别定义New/Edit 表单
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
- C# 设计模式,工厂方法
- 如何在虚拟环境里运行spyder?如解决import tensorflow as tf 出现importError:no module named &#39;tensorflow&#39;
- Ubuntu 配置docker镜像加速器
- C# RESTful API 访问辅助类