零.前言

在学习这一节之前,至少得明白如何创建一个工作空间,如何编译工作空间,如何运行工作空间里的文件(把工作空间的环境目录添加到环境里)。如果有不会的,请看鄙人的ROS学习记录3。
本节默认工作空间已创好,且添加到环境目录中。且基于ubuntu18.04 ROS Melodic

一.URDF的定义

1.1 概念

官方wiki文档地址: urdf/Tutorials
人体骨架是怎样构成的?各块骨头间有关节来使得两块骨头可以旋转。
在美术中,我们构建一个人体是通过如何构建的?用近似圆形的关节连接椭圆组成的骨骼
那么在我们ROS中的URDF文件它也有这两种元素:关节joint骨骼link

  • link定义一个机器人模型的形状。
  • joint定义两个link间的连接关系,以及运动方式。
    他们之间的关系看起来是这样的:

1.2 创建

urdf使用xml语言实现,这是一种标记语言,你可以简单的理解为:<xxx参数开始>xxx参数内容</xxx参数结束>,通过参数左右的标识,来让其他程序读取某些参数。xml语言是一种树形结构,也就是某些参数里面,可以包含其他的内容的参数。
那么我们看看一个基础的模型结构:

<robot name="learn_urdf"><link name="link1" /><link name="link2" /><joint name="joint1" type="fixed"><parent link="link1"/><child link="link2"/></joint>
</robot>

为了方便观察,我对上述代码做了合理的缩进,当然你写代码的时候也应该养成这种习惯。

  • 首先,最外层(未缩进)叫robot元素,他的名字是?立花泷learn_urdf
  • 最外层里面的元素(一重缩进)均为robot的子元素,分别是link1link2joint1
  • joint1还有一个参数,类型是fixed,这个后面讲。他有两个子元素(两重缩进),分别是parentchild,且该两元素分别指向了一个link

所以根据我们学过的生物可以知道,关节的部分组成是:关节头——关节腔——关节窝。
ROS机器人的组成是parent-link——joint——child-link

现在我们就因该为这个机器人添加更多的细节了。

<?xml version="1.0"?>
<robot name="visualize_urdf">  <link name="base_link">  <visual>  <geometry>  <box size="1 1 1"/>  </geometry>  <origin rpy="0 0 0" xyz="0 0 0"/>  </visual>  </link><link name="head">  <visual>  <geometry>  <box size="0.5 0.5 0.5"/>  </geometry>  <origin rpy="0 0 0" xyz="0 0 0.75"/>  </visual>  </link>  <joint name="neck" type="fixed">  <parent link="base_link"/>  <child link="head"/>  </joint>
</robot>

现在,link里多了一些尺寸参数,后面会讲它们的作用。得益于xml的特性,我们可以大概知道我们两个link间的参数含义:

  • < visual>可视化,因该是机器人的外观参数
  • < geometry>几何学,那因该是机器人的几何(物理尺寸)了
  • < origin>起源,虽然不知道是啥,但是后面看起来像坐标,那因该就是该link的坐标咯

接下来就是我们通过Rviz来查看机器人了。

1.3 可视化

安装ros新手包(版本不同的需要自己改下述命令的ros版本号):

sudo apt-get install ros-melodic-urdf-tutorial

ros新手包里为我们写好了一个节点,我们可以直接通过该节点来运行、可视化我们的urdf
首先在任意路径下创建urdf文件visual.urdf,写入上一节内容,然后在该目录下运行:

roslaunch urdf_tutorial display.launch model:=visual.urdf

然后就可以看到由两个box构成的机器人了。

二.URDF的进阶选项

好了熟悉了URDF以后,接下来就是URDF各种参数的讲解了。
这里是官方页面:urdf/XML,我只画个表格展示下结构,具体的定义请查询该网页。

2.0 ros中的坐标轴

在ros中,我们的xyz三个距离坐标轴可用右手表示,x是前,y是左,z是上(xyz均为正半轴时):

rpy三个角度坐标表示:

  • 绕 X轴 旋转,称之为 横滚角,使用roll表示
  • 绕 Y轴 旋转,称之为 俯仰角,使用pitch表示
  • 绕 Z轴 旋转,称之为 航向角,使用yaw表示

在Rviz中,红色为x,绿色为y,蓝色为z(xyz均为正)

再补充一下,xyz的单位是米,rpy的单位是弧度,用小数近似代替π。

2.1 base_link

base_link是极为特殊的一种link,因为机器人的坐标变换或其他操作等需要指定一个参考点,那么就得规定,每个机器人必须包含一个固定名称的节点。于是产生了base_link。形如电脑必须要有一个C盘。
link与其它link参数相同,但必须有且仅为一个。

2.2 link

link长这样

 <link name="my_link"><inertial><origin xyz="0 0 0.5" rpy="0 0 0"/><mass value="1"/><inertia ixx="100"  ixy="0"  ixz="0" iyy="100" iyz="0" izz="100" /></inertial><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><collision><origin xyz="0 0 0" rpy="0 0 0"/><geometry><cylinder radius="1" length="0.5"/></geometry></collision></link>

表格式:

<link> name="必须"
<inertial> <origin> xyz="0 0 1"
rpy="0 0 0"
<mass> value="1"
<inertia> ixx="100" ixy="0" ixz="0" iyy="100" iyz="0" izz="100"
<visual> name="eg.name"
<orgin> xyz="0 0 1"
rpy="0 0 0"
<geometry>
必须
<box size= "1 1 1" /> 长 宽 高,原点在中心
<cylinder size= "1 1" />半径 高,原点在中心
<sphere size= "1" />半径, 原点在球心
<mesh> 文件,暂时用不到,除非你会用其他东西建模
<material name = "可空"/> <color rgba= "0 1 1 1" /> RGBalpha, 范围[0,1]
<mesh> 文件,暂时用不到,除非你会用其他东西建模
<collision name = "可空"/> <origin> xyz="0 0 1"
rpy="0 0 0"
<geometry> 同上,通过设置比<可视>更简洁的碰撞模型
可以提高仿真的效率

2.3 joint

joint长这样

 <joint name="my_joint" type="floating"><origin xyz="0 0 1" rpy="0 0 3.1416"/><parent link="link1"/><child link="link2"/><calibration rising="0.0"/><dynamics damping="0.0" friction="0.0"/><limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" /><safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" /></joint>
<joint> name = "必须" type = "以下六种"
revolute:一种沿轴旋转的铰链关节,具有由上下限指定的限制范围
continuous:一种绕轴旋转且没有上下限的连续铰链接头
prismatic:一种沿轴滑动的滑动关节,具有由上下限指定的限制范围
fixed:这不是一个真正的关节,因为它不能移动。所有的自由度都被锁定。这种类型的关节不需要轴,校准,动力学,限制或安全控制器
floating:这个关节允许所有6个自由度的运动
planar:这个关节允许在垂直于轴的平面上运动。
<origin xyz="0 0 1" rpy="0 0 0"/>
<parent link="link_name"/>
必须
<child link="link_name"/>
必须
<axis xyz="1 0 0"/> 默认1 0 0
<calibration rising="0.0" falling="0.0"/> 一般不用,具体值看官网
<dynamics damping="0.0" friction="0.0"/> 用于gazebo仿真
<limit lower="0.0" upper="0.0" effort(必须)="1" velocity(必须)="1"/> 只有revolute prismatic才是必填,限制一些物理属性
<safety_controller soft_lower_limit ="0.0" soft_upper_limit ="0.0" k_position="0" k_velocity(必须)="1"/> 指定一些机器人关节的活动

joint的参数细节并不好说明,最好去wiki上查看这些说明与例子。

三.可活动模型

小tips:关闭rviz或gazebo这些带界面的工具时,彻底退出因该在终端里使用ctrl-c去关闭,而不是点击窗口的x,则否会出现节点关闭失败,无法重新运行的情况
根据刚才学到的一些细节,我们创建一个可以活动的迫击炮模型:

gedit mortar.urdf
roslaunch urdf_tutorial display.launch model:=mortar.urdf
<?xml version="1.0"?>
<robot name="mortar_urdf">  <link name="base_link">  <visual>  <geometry>  <box size="0.8 1 0.2"/>  </geometry>  <origin  xyz="0 0 0" rpy="0.2 0 0"/>  <material name="yellow"><color rgba="0.5 0.5 0.5 1"/></material></visual></link><link name="barrel">  <visual>  <geometry>  <cylinder radius="0.05" length="0.8"/>  </geometry>  <origin xyz="0.2 0 0.225" rpy="0 1.57 0"/><material name="yellow"><color rgba="0.7 0.2 0.5 1"/></material></visual>  </link><link name="wheel_left">  <visual>  <geometry>  <cylinder radius="0.2" length="0.1"/>  </geometry>  <origin xyz="0 0 0" rpy="0 -1.57 0"/>  </visual>  </link> <link name="wheel_right">  <visual>  <geometry>  <cylinder radius="0.2" length="0.1"/>  </geometry>  <origin xyz="0 0 0" rpy="0 1.57 0"/>  </visual>  </link> <joint name="neck" type="prismatic"><origin xyz="0 0.4 0" rpy="0 -0.2 1.57"/><limit effort="30" velocity="1.0" lower="-0.2" upper="0" /><parent link="base_link"/>  <child link="barrel"/>  </joint><joint name="axis_left" type="continuous"><origin xyz="0.45 0.2 0" rpy="0 0 0"/><parent link="base_link"/>  <child link="wheel_left"/>  </joint> <joint name="axis_right" type="continuous"><origin xyz="-0.45 0.2 0" rpy="0 0 0"/><parent link="base_link"/>  <child link="wheel_right"/>  </joint>
</robot>

通过调节关节的运动状态,可以伸缩枪管和转动左右轮:

四.总结

至此,urdf的基础已经很透彻了,接下来会讲roslaunch的使用,urdf更高级的传感器用法——雷达、摄像头。

ROS学习记录9——urdf文件的创建与使用相关推荐

  1. Webots+ROS学习记录(4)——六轮全地形移动机器人

    Webots+ROS学习记录(4)--六轮全地形移动机器人 有了以上经验,可以创造出一个全地形的移动机器人如图1 第一步,创建robot节点,并给robot节点编写相应参数 注意,这里的机身不能再使用 ...

  2. ROS学习记录(二)阿克曼转向车运动学模型及在gazebo中搭建仿真环境

    前言:该篇是ROS学习记录的第二篇,如果还没关注过之前文章的读者,如有需要可以通过下方传送门去看之前的文章: ROS学习记录(一) Plugin插件 这两天关注了古月老师的公众号,看到了其中一篇课程推 ...

  3. ROS学习记录 | 便于回顾

    ROS学习记录 | 便于回顾 ROS环境搭建 ROS部分基础知识 ROS环境搭建 step1 创建工作空间目录结构 mkdir catkin_ws cd catkin_ws mkdir src cd ...

  4. ros学习记录:Gazebo加载速度慢,长时间停在“Preparing your world”

    前言 ros学习记录笔记,一个小白的自留地,欢迎大佬批评指正~ 一.问题描述 Gazebo加载速度慢,长时间停在"Preparing your world" 二.解决办法 1.下载 ...

  5. 【ROS学习记录】2021/7/2 Gazebo+rviz仿真(一)

    [ROS学习记录]2021/7/2 Gazebo+rviz进行turtlebot2仿真问题记录 ##小插曲 今天ubuntu挂载u盘一直读取失败所以做了一些令人窒息的操作,晚上开机就进入了initra ...

  6. 【ros学习】14.urdf、xacro机器人建模与rviz、gazebo仿真详解

    一.起因 学校的这学期课程是ros机器人开发实战,我们学习小组也要搞一个自己的机器人模型,我们组又叫葫芦组,所以我就做了个葫芦形状的机器人,虽说有点丑,本来想用maya建模再导入的,奈何不太懂maya ...

  7. ros学习记录1 Hello World 使用c++

    声明:整个学习是我跟着奥特学园进行的,不是原创,只是记录自己的学习过程 步骤 创建命名空间 mkdir -p catkin_ws/src //其中前者是工作空间的名称,后者为存放源码的位置 cd ./ ...

  8. ROS学习记录(一)

    这段时间准备学习ROS,写个博客记录下,方便查阅. 这些知识大部分都是ROS官网教程的复现. 1.创建ROS工作空间 运行命令: mkdir -p ~/catkin_ws/src (创建一个文件夹) ...

  9. ROS学习-记录和回放数据

    本博客将介绍怎么使用ROS系统来记录数据到一个.bag文件中,然后回放数据,在运行系统中产生类似的效果. 记录数据(创建一个bag文件) 从一个运行的ROS系统中记录topic数据,并存储到bag文件 ...

最新文章

  1. 无法解析的外部符号 __imp____glutInitWithExit@12
  2. 深入了解Token认证的来龙去脉
  3. 《从零开始学ASP.NET CORE MVC》:ASP.NET Core 中的 Main方法(5)
  4. 【树莓派学习笔记】六、启用摄像头、实时视频、录像和截图
  5. project 模板_施工进度横道图不会做?18份计划模板收藏好,输入参数迅速成图...
  6. C++多态相关关问题及虚表剖析
  7. latex公式在括号中编辑(多行公式)
  8. python创建文件对象的函数_Python 文件对象常用内建方法
  9. bash取得相应行的数据
  10. Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
  11. Oracle11g64位安装
  12. Matlab的循环语法
  13. pgloader mysql_pgloader 学习(四)一些简单操作例子
  14. qq系统软件测试计划,软件测试设计报告案例——qq空间.doc
  15. 检测屏幕.html,15款html5响应式网站跨屏幕测试工具
  16. java导出用什么_Java导出Excel
  17. SVG格式图片的放大
  18. Linux服务器的配置和数据迁移方案
  19. 【渝粤题库】陕西师范大学200791 软件工程
  20. 从bam文件的内容来学习Phred quality score /QUAL/Cigar/等常用概念

热门文章

  1. windows服务器的流量监控工具-DU Meter
  2. 弘辽科技:回首京东发展史,为占下沉市场,刘强东重出江湖
  3. 阿里云云服务器ECS简单使用
  4. 网页设计中的灰色调配色技巧
  5. 如何利用单反拍摄VR全景照片?
  6. 外汇交易员必读:使用EA做外汇要注意的细节,尤其第三点
  7. 阿拉丁HASP SRM加密锁(加密狗)
  8. 3月刊特别策划:移动应用排名与开发者的机会
  9. wxpython 控件,对话框,光标,菜单
  10. 文档大小超出上传限制怎么办_压缩PDF大小该怎么操作?压缩PDF的软件有哪些?...