ROS中URDF的学习以及与Xacro的比较
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 链接标签详解
ROS中URDF的学习以及与Xacro的比较的更多相关文章
- ROS学习笔记七:在ROS中使用USB摄像头
下面是一些USB摄像头的驱动(大多数摄像头都支持uvc标准): 1 使用软件库里的uvc-camera功能包 1.1 检查摄像头 lsusb ----------------------------- ...
- ROS中的3D建模机器人(三)
一.利用xacro理解机器人建模 当我们创建复杂的机器人模型时,URDF的灵活性将会降低,URDF缺少的主要特性是简单的.可重用性,模块化和可编程性. URDF是一个单独的文件我们不能在它里面包含其他 ...
- ROS中3D机器人建模(一)
一,机器人建模的ROS软件包 *urdf : 机器人建模最重要的ros软件包是urdf软件包.这个软件包包含一个用于统一机器人描述格式(URDF)的C++解析器,它是一个表示机器人模型的XML文件,还 ...
- ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS)
ROS(indigo)机器人操作系统学习资料和常用功能包汇总整理(ubuntu14.04LTS) 1. 网站资源: ROSwiki官网:http://wiki.ros.org/cn GitHub ...
- ROS中利用V-rep进行地图构建仿真
V-rep中显示激光扫描点 在VREP自带的场景中找到practicalPathPlanningDemo.ttt文件,删除场景中多余的物体只保留静态的地图.然后在Model browser→comp ...
- ROS中发布激光扫描消息
激光雷达工作时会先在当前位置发出激光并接收反射光束,解析得到距离信息,而后激光发射器会转过一个角度分辨率对应的角度再次重复这个过程.限于物理及机械方面的限制,激光雷达通常会有一部分“盲区”.使用激光雷 ...
- PHP中的Libevent学习
wangbin@2012,1,3 目录 Libevent在php中的应用学习 1. Libevent介绍 2. 为什么要学习libevent 3. Php libeven ...
- JS中childNodes深入学习
原文:JS中childNodes深入学习 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <ti ...
- 将ROS中的/sensor_msgs/NavSatFix数据导入google earth显示轨迹
将ros中的gps_msg数据导入google earth显示轨迹 [TOC] 1. 获取GPS数据 将ros中发布的gps topic输出到文本中 rostopic echo -p /gpsData ...
随机推荐
- LINQ查询表达式---------into
LINQ查询表达式---------into into 上下文关键字创建一个临时标识符,以便将 group.join 或 select 子句的结果存储到新的标识符 class Program { pu ...
- PostgreSQL在win7上安装详细步骤
原文:PostgreSQL在win7上安装详细步骤 PostgreSQL安装: 一.windows下安装过程 安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程 ...
- C#实现bitmap图像矫正
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 完全卸载mysql免安装版
使用以下命令 reg delete "HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\eventlog\Application\MySQL& ...
- 把滚动箱的样式做如下调整来模拟 TPanel
程序中用 TPanel 做了容器, 需要给它一个背景图片; 发现这竟是个难题! 发现我经常使用的滚动箱控件 TScrollBox, 是一个很好的替代品. 本例需要先添加两个图片资源, 添加方法可以参考 ...
- QT创建窗口程序、消息循环和WinMain函数(为主线程建立了一个QEventLoop,并执行exec函数)
使用QT也有一段时间了,有的时候需要跟踪代码到QT的源码中去查找问题.在这里我将记录一下我跟踪QT源码学习到的一些知识. 我的开发环境是VC6.0+QT4.3.3.QT已经不为VC6.0提供addin ...
- <iOS小技巧> 昵称格式判断
一.使用方式 + 如下代码块功能:判断字体,判断字体输入格式 NSString *firstStr = [name substringToIndex:1]; NSArray *num ...
- Linux用户和权限
用户和用户组管理 linux使用用户和组来限制资源的使用. 在linux上运行任何程序或命令都要以一个具体的用户来运行,这个用户的权限决定了相应的程序能访问的资源和能执行的操作. 用户相关命令 组是用 ...
- java.lang.Integer cannot be cast to java.lang.String
错误原因是类型转换! 说Integer 类型不能转成String类型. 解决办法: 将错误中的(String)强制转换类型修改为 object.toString() toString方法是Ja ...
- 30411MySQL安装与配置_win10
1 下载 1.1下载地址 下载地址 https://downloads.mysql.com/archives/community/ 1.2 选择适合自己的版本并下载 1.3 将下载文件解压至自定义路 ...