URDF与xacro
什么是URDF¶
全称为 Unified Robot Description Format ,翻译为中文为 统一机器人描述性格式
那么这里我们可以确定,**URDF**是用来描述机器人的,通过一些特定的格式将机器人具体的描述出来,供计算机进行理解操作。
URDF描述规范¶
- 用一个文件描述一个机器人模型
- 文件的后缀为
.urdf
- 文件的内容格式为
xml
格式 - xml根节点为
robot
通过创建一个hello.urdf
文件我们来认知一下URDF的基本规范:
<?xml version="1.0"?>
<robot name="hello"><link name="base_link"><visual><geometry><cylinder length="0.6" radius="0.2"/></geometry></visual></link>
</robot>
连杆介绍
什么是link¶
link 我们称之为连杆。在官方介绍中,用a rigid body
描述link
。
a rigid body
:僵硬的躯体。意思是不可移动的,固定的。
在URDF描述性语言中,link是用来描述物理特性的。
- 描述视觉显示
- 描述碰撞属性
- 描述物理惯性
我们用xml格式来表达连杆如下:
<link name="my_link"><visual></visual><collision></collision><inertial></inertial>
</link>
visual视觉显示
<visual><origin xyz="0 0 0" rpy="0 0 0" /><geometry><box size="1 1 1" /></geometry><material name="Cyan"><color rgba="0 1.0 1.0 1.0"/></material>
</visual>
geometry形状¶
box盒装
<box size="1 1 1" />
cylinder圆柱状
<cylinder length="0.6" radius="0.2"/>
sphere球状
<sphere radius="1" />
mesh指向对应的文件¶
origin位置姿态
<origin xyz="0 0 0" rpy="0 0 0" />
material材质¶
<material name="blue"><color rgba="0 0 1.0 1.0"/>
</material>
通用启动的launch文件
<launch><arg name="model" default="geometry_box.urdf"/><arg name="gui" default="true" /><arg name="rvizconfig" default="$(find demo_urdf)/rviz/urdf.rviz" /><param name="robot_description" command="$(find xacro)/xacro --inorder $(find demo_urdf)/urdf/$(arg model)" /><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 $(arg rvizconfig)" required="true" />
</launch>
启动: 仿真
roslaunch demo_tf config.launch mode:=geometry_box.urdf 后面参数自己改,不传的话默认geometry_box.urdf
----------------------------------------------------
link 代码:
*.文件
<?xml version="1.0" encoding="UTF-8" ?>
<robot name="box"><!-- 写法2 纹理2 --><material name="mycolor"><!-- [0, 255]rgba取值是[0,1]blue: 0 0 255 255--><color rgba="0.8 0.4 0 1"/></material><!-- link --><link name="base"><!-- visual --><visual><!-- 位置和姿态 位置 :xyz="0 0 0"姿态 rpy是弧度值: 3.14/2=1.57/2=0.785--><origin xyz="0 0 0" rpy="0.785 0.785 0.785" /><!-- 形状 --><geometry><!-- size 用来描述长宽高(x, y, z) --><box size="1 2 3"/><!-- 圆柱体 半径和高度 单位米 --><!--<cylinder length="0.6" radius="0.2" />--><!-- 球体 半径单位米 --><!--<sphere radius="1"/>--><!-- 纹理文件 加载已经创建好的 3d模型文件--><!-- <mesh filename="package://demo_urdf/meshes/bowl.dae"/>--><!--<mesh filename="package://demo_urdf/meshes/cft.dae"/>--></geometry><!--写法1 纹理 1 --><material name="blue"><!-- [0, 255]rgba取值是[0,1]取值 需要的值/255blue: 0 0 255 255--><color rgba="0 0 1 0.5"/></material><!-- 写法2 纹理2 --><!--<material name="mycolor"/>--></visual></link><!-- link --><link name="link2"><visual><origin xyz="0 0 0.5"/><geometry><box size="0.3 0.3 1"/></geometry><material name="c2"/></visual></link><!-- 连接点 fixed 固定 --><joint name="joint1" type="fixed"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/></joint><!-- 连接点 revolute 旋转--><joint name="joint1" type="revolute"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/>
<!-- 0 1 0 对应 x y z ,表示按y轴旋转 --><axis xyz="0 1 0"/><limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" /></joint><!-- 连接点 continuous旋转,没有旋转弧度限制可以一直旋转--><joint name="joint1" type="continuous"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/>
<!-- 0 1 0 对应 x y z ,表示按y轴旋转 --><axis xyz="0 1 0"/><!-- <limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" />--></joint><!-- 连接点 prismatic 滑动--><joint name="joint1" type="prismatic"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/>
<!-- 0 1 0 对应 x y z ,表示按y轴旋转 --><axis xyz="0 0 1"/><!-- 限定范围limit主要是限制child的旋转的范围。lower和upper限制了旋转的弧度范围effort限制的是转动过程中的受力范围.(正负value值,单位为牛或N)velocity限制了转动时的速度,单位为米/秒或m/s--><limit effort="30" velocity="1.0" lower="-1.5" upper="1.5" /></joint></robot>
连接点代码:
<?xml version="1.0" encoding="UTF-8" ?>
<robot name="box"><material name="c1"><color rgba="0.8 0.4 0 0.8"/></material><material name="c2"><color rgba="0 0 1 0.8"/></material><!-- link --><link name="base"><visual><geometry><box size="0.2 0.2 0.6"/></geometry><material name="c1"/></visual></link><!-- link --><link name="link2"><visual><origin xyz="0 0 0.5"/><geometry><box size="0.3 0.3 1"/></geometry><material name="c2"/></visual></link><!-- 连接点 fixed 固定 --><joint name="joint1" type="fixed"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/></joint><!-- 连接点 revolute 旋转--><joint name="joint1" type="revolute"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/><axis xyz="0 1 0"/><limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" /></joint><!-- 连接点 continuous旋转,没有旋转弧度限制可以一直旋转--><joint name="joint1" type="continuous"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/><!-- 0 1 0 对应 x y z ,表示按y轴旋转 --><axis xyz="0 1 0"/><!-- <limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" />--></joint><!-- 连接点 prismatic 滑动--><joint name="joint1" type="prismatic"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/><axis xyz="0 0 1"/><!-- 限定范围limit主要是限制child的旋转的范围。lower和upper限制了旋转的弧度范围effort限制的是转动过程中的受力范围.(正负value值,单位为牛或N)velocity限制了转动时的速度,单位为米/秒或m/s--><limit effort="30" velocity="1.0" lower="-1.5" upper="1.5" /></joint>
</robot>
xacro 代码:
<?xml version="1.0" encoding="UTF-8" ?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="box"><!-- xacrovariable--><!-- base box all properties --><xacro:property name="box_size_x" value="0.2" /><xacro:property name="box_size_y" value="0.5" /><xacro:property name="box_size_z" value="0.3" /><!-- link --><link name="base"><!-- visual --><visual><geometry><box size="${box_size_x * 2} ${box_size_y + 0.4} ${box_size_z / 2}"/></geometry></visual></link></robot>
<?xml version="1.0" encoding="UTF-8" ?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="box"><material name="c1"><color rgba="0.8 0.4 0 0.8"/></material><material name="c2"><color rgba="0 0 1 0.8"/></material><xacro:macro name="mylink" params="name size color xyz:='0 0 0'"><link name="${name}"><visual><origin xyz="${xyz}"/><geometry><box size="${size}"/></geometry><material name="${color}"/></visual></link></xacro:macro><!-- link -->
<!-- <link name="base">-->
<!-- <visual>-->
<!-- <geometry>-->
<!-- <box size="0.2 0.2 0.6"/>-->
<!-- </geometry>-->
<!-- <material name="c1"/>-->
<!-- </visual>-->
<!-- </link>--><xacro:mylink name="base" size="0.2 0.2 0.6" color="c1"/><!-- link -->
<!-- <link name="link2">-->
<!-- <visual>-->
<!-- <origin xyz="0 0 0.5"/>-->
<!-- <geometry>-->
<!-- <box size="0.3 0.3 1"/>-->
<!-- </geometry>-->
<!-- <material name="c2"/>-->
<!-- </visual>-->
<!-- </link>--><xacro:mylink name="link2" size="0.3 0.3 1" xyz="0 0 0.5" color="c2"/><joint name="joint1" type="revolute"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/><axis xyz="0 1 0"/><!-- 限定范围limit主要是限制child的旋转的范围。lower和upper限制了旋转的弧度范围effort限制的是转动过程中的受力范围.(正负value值,单位为牛或N)velocity限制了转动时的速度,单位为米/秒或m/s--><limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" /></joint></robot>
<?xml version="1.0" encoding="UTF-8" ?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="box"><material name="c1"><color rgba="0.8 0.4 0 0.8"/></material><material name="c2"><color rgba="0 0 1 0.8"/></material><xacro:macro name="MyColor" params="name"><material name="${name}"><xacro:if value="${name=='red'}"><color rgba="1.0 0 0 1.0"/></xacro:if><xacro:if value="${name=='green'}"><color rgba="0 1.0 0 1.0"/></xacro:if><xacro:if value="${name=='blue'}"><color rgba="0 0 1.0 1.0"/></xacro:if><xacro:if value="${name=='white'}"><color rgba="1.0 1.0 1.0 1.0"/></xacro:if></material></xacro:macro><!-- link --><link name="base"><visual><origin xyz="0 0 0" rpy="0.785 0.785 0.785"/><geometry><box size="0.5 1 1.5"/></geometry><xacro:MyColor name="white"/></visual></link></robot>
已整理的xacro 通用d代码模板
*.xacro 文件
<?xml version="1.0" encoding="UTF-8" ?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="box"><material name="c1"><color rgba="0.8 0.4 0 0.8"/></material><material name="c2"><color rgba="0 0 1 0.8"/></material><xacro:macro name="MyColor" params="name"><material name="${name}"><xacro:if value="${name=='red'}"><color rgba="1.0 0 0 1.0"/></xacro:if><xacro:if value="${name=='green'}"><color rgba="0 1.0 0 1.0"/></xacro:if><xacro:if value="${name=='blue'}"><color rgba="0 0 1.0 1.0"/></xacro:if><xacro:if value="${name=='white'}"><color rgba="1.0 1.0 1.0 1.0"/></xacro:if></material></xacro:macro><!-- <xacro:macro name="mylink" params="name size color xyz:='0 0 0'">--><!-- <link name="${name}">--><!-- <visual>--><!-- <origin xyz="${xyz}"/>--><!-- <geometry>--><!-- <box size="${size}"/>--><!-- </geometry>--><!-- <material name="${color}"/> --><!-- </visual>--><!-- </link>--><!-- </xacro:macro>--><xacro:macro name="mylink" params="name size colorname xyz:='0 0 0'"><link name="${name}"><visual><origin xyz="${xyz}"/><geometry><box size="${size}"/></geometry><!-- <material name="${color}"/> --><xacro:MyColor name="${colorname }"/></visual></link></xacro:macro><!--<xacro:mylink name="base" size="0.2 0.2 0.6" color="c1"/>--><!-- <xacro:mylink name="link2" size="0.3 0.3 1" xyz="0 0 0.5" color="c2"/>--><xacro:mylink name="base" size="0.2 0.2 0.6" color="red"/><xacro:mylink name="link2" size="0.3 0.3 1" xyz="0 0 0.5" color="blue"/><joint name="joint1" type="revolute"><origin xyz="0 0 0.3" rpy="0 0 0"/><parent link="base"/><child link="link2"/><!-- 0 1 0 对应 x y z ,表示按y轴旋转 --><axis xyz="0 1 0"/><!-- 限定范围limit主要是限制child的旋转的范围。lower和upper限制了旋转的弧度范围effort限制的是转动过程中的受力范围.(正负value值,单位为牛或N)velocity限制了转动时的速度,单位为米/秒或m/s--><limit effort="30" velocity="1.0" lower="-3.1415926" upper="3.1415926" /></joint></robot>
配置默认使用xml打开urdf文件;
ps: 项目第一次创建时就可以选择xml打开,但是你第一次选择的是txt默认打开的话需要在这个设置里把它改过来
4.1 删除默认txt文件打开
4.2添加默认xml文件方式打开urdf文件
报这个错误时: Could not find the GUI, install the 'joint_state_publisher_gui' package
安装:
sudo apt install ros-melodic-joint-state-publisher-gui
URDF与xacro相关推荐
- urdf与xacro的使用方法 机械臂模型仿真示例
为什么要创建机器人的三维模型,原因在于机器人机器人仿真工具可以帮助我们体现发现设计中的一些关键错误. 而模型仿真的含义,在于我们创建的是机器人模型,因此不一定和实际机器人长得一模一样.但因为是仿真,所 ...
- ROS1云课→16机器人模型从urdf到xacro
ROS1云课→15主题与坐标系 补充: 2020:ROS机器人URDF建模_zhangrelay的博客-CSDN博客 2022:URDF机器人模型ROS1&2案例(noetic+galacti ...
- 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解
一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...
- urdf、xacro、sdf三种文件的转换
sdf和urdf的转换在网上找到了一个教程,但是插件的GitHub链接404了 其他都显示无法转换,目前我还不知道办法 urdf和xacro: 自己写的: 有一个超级简单的办法,但并不符合我们用xac ...
- ROS学习笔记13 —— SolidWorks、urdf、xacro及sdf间的转换
SolidWorks转urdf 预处理工作: 将close loop joint拆成open loop joint 使用sw2urdf生成相应的urdf 检查生成的urdf 利用urdf_tutori ...
- 以阿克曼转向车为例对URDF和XACRO文件进行解读
最近我在古月学院购买了在Gazebo中实现阿克曼转向车的仿真课程,课程资料的阿克曼小车的XACRO文件在Gazebo里加载的时候报了三个错误,在这之前,我没接触过URDF或XACRO文件,本篇文 ...
- ROS 机器人描述--URDF和XACRO
1. 关于URDF的一些杂谈 URDF(Unified Robot Description Format), 是一种特殊的xml文件格式, 作为机器人的一种描述文件, 在ROS里面大量使用. 接触RO ...
- 关于urdf转xacro
URDF(Unified Robot Description Format),一般是利用solidworks建模之后,导出来的模型文件[关于怎么导出可自行上网查,教程很多],后缀为.urdf.在导出后 ...
- 机器人URDF文件和xacro文件介绍
1. 关于URDF的一些杂谈 URDF(Unified Robot Description Format), 是一种特殊的xml文件格式, 作为机器人的一种描述文件, 在ROS里面大量使用. 接触RO ...
最新文章
- 【栈】日志分析(BSOJ2981)
- VS2010中:error C2471: 无法更新程序数据库
- JSP页面Table的数据拼接
- 第十一届蓝桥杯大赛软件赛省赛第二场 C/C++ 大学B组
- 我常用的10个Python实用小Trick
- mac 10.13 配置 php,MacOS10.13.6 升级后 PHP7.3配置
- 关于PHP在企业级开发领域的访谈——企业级开发,PHP准备好了吗?
- static Member Function
- iOS ASI--POST请求
- 1036: 谭浩强C语言(第三版)习题1.6
- c语言谭浩强第七章例题
- 在头条号和西瓜视频发布视频,播放量20万,却是零收益?
- 可可英语奇文老师 中高级词汇记忆方法(免费下载)
- 列出一些既好玩又能提高英语水平的电脑游戏
- 2020/2/23如何高效使用Axure绘制原型图
- 网盘限速怎么办? 小编来支招!
- Python3《机器学习实战》学习笔记(三):决策树实战篇
- java计算机毕业设计家庭理财管理系统源码+数据库+系统+lw文档+mybatis+运行部署
- C++音乐播放器:MCI库的使用
- 杭电网安复试上机编程题