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>

[参考链接]

1. URDF与Xacro的语法比较

2. Xacro文件详述

3. URDF 结构详解

4. URDF初级

5. URDF 链接标签详解

6. 创客智造的一个完整机器人的分步阐述URDF

Author: Ian
星期二, 09. 七月 2019 11:03上午

ROS中URDF的学习以及与Xacro的比较的更多相关文章

  1. ROS学习笔记七:在ROS中使用USB摄像头

    下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...

  2. ROS中的3D建模机器人(三)

    一.利用xacro理解机器人建模 当我们创建复杂的机器人模型时,URDF的灵活性将会降低,URDF缺少的主要特性是简单的.可重用性,模块化和可编程性. URDF是一个单独的文件我们不能在它里面包含其他 ...

  3. ROS中3D机器人建模(一)

    一,机器人建模的ROS软件包 *urdf : 机器人建模最重要的ros软件包是urdf软件包.这个软件包包含一个用于统一机器人描述格式(URDF)的C++解析器,它是一个表示机器人模型的XML文件,还 ...

  4. ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)

    ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub    ...

  5. ROS中利用V-rep进行地图构建仿真

    V-rep中显示激光扫描点  在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...

  6. ROS中发布激光扫描消息

    激光雷达工作时会先在当前位置发出激光并接收反射光束,解析得到距离信息,而后激光发射器会转过一个角度分辨率对应的角度再次重复这个过程.限于物理及机械方面的限制,激光雷达通常会有一部分“盲区”.使用激光雷 ...

  7. PHP中的Libevent学习

    wangbin@2012,1,3 目录 Libevent在php中的应用学习 1.      Libevent介绍 2.      为什么要学习libevent 3.      Php libeven ...

  8. JS中childNodes深入学习

    原文:JS中childNodes深入学习 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <ti ...

  9. 将ROS中的/sensor_msgs/NavSatFix数据导入google earth显示轨迹

    将ros中的gps_msg数据导入google earth显示轨迹 [TOC] 1. 获取GPS数据 将ros中发布的gps topic输出到文本中 rostopic echo -p /gpsData ...

随机推荐

  1. Windows 10开发基础——VS2015 Update1新建UWP项目,XAML设计器无法加载的解决

    这次,我们来解决一个问题...在使用Visual Studio 2015 Update 1的时候,新建一个UWP的项目,XAML设计器就会崩,具体异常信息如下图: 解决方法如下:下面圈出的那个路径就按 ...

  2. Win10《芒果TV》商店版更新v3.2.1:优化手机版卡顿,修复推送故障

    此版本是小版本更新,主要是修复上一版本发布后暴露的部分体验问题,以免进一步扩大影响,小幅修复后更新上线. 芒果TV UWP V3.2.1更新内容清单: 1.优化和修复列表预加载机制的本地保存丢失导致的 ...

  3. UWP入门(九)-- 枚举和查询文件和文件夹

    原文:UWP入门(九)-- 枚举和查询文件和文件夹 核心 API 所在的命名空间: Windows.Storage Windows.Storage.Streams Windows.Storage.Pi ...

  4. 初涉Delphi Socket编程

    不是第一次接触socket编程了,但以前都是看别人的依葫芦画瓢,也不知道具体的原理. 新的项目,有了新的开始,同时也需要有新的认识. Delphi 中带有两套TCP Socket组件: Indy So ...

  5. <iOS小技巧>UIview指定设置控件圆角

      一.用法:   众所周知,设置控件的圆角使用layer.cornerRadius属性即可,但是这样设置成的结果是4个边角都是圆角类型.   利用班赛尔曲线画角:   //利用班赛尔曲线画角 UIB ...

  6. 在C#中创建文件快捷方式

    创建快捷方式对于绝大多数 Windows 用户来说都是小菜一碟了,然而,这项工作却为程序员带来不少麻烦..NET 没有提供简便直接的创建快捷方式的方法,那么在 .NET 中我们如何为应用程序创建快捷方 ...

  7. SpringBoot启动访问JSP页面,直接进入页面或者访问不到,报404,并且加载tomcat插件tomcat-embed-jasper也不行

    这个问题花费了两天的时间,解决路径: 我用的是SpringBoot1.5.2,SpringMVC和Spring,tomcat启动插件都是默认的版本,Spring是4.3.7,jdk是1.7.0_80, ...

  8. 【Netty整理01-快速入门】Netty简单使用Demo(已验证)

    多处摘抄或手打,为了十积分厚着脸皮标为原创,惭愧惭愧~本篇文章用于快速入门搭建一个简单的netty 应用,如想稍微深入系统的了解,请参照本人下一篇博客,链接: 参考地址: 官方文档:http://ne ...

  9. 【粗略版】Linux deploy手机上创建自己的服务器

    偶尔看见了一篇安卓手机z安装linux的文章,正好自己有一个旧手机,心里有个大胆的想法. 简单来说,就是把旧手机安装linux然后装上容器,尝试部署一个简单项目,下面会记录下过程: 首先了解下这个软件 ...

  10. 【记录】mybatis中获取常量类中数据

    部分转载,已注明来源: 1.mybatis中获取常量类中数据 <update id="refuseDebt"> UPDATE dt_debt a SET         ...