创建一个urdf机器人_ROS学习笔记十一:创建URDF 文件并在RVIZ中查看模型

Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构、关节、自由度等的XML格式文件。

一、创建第一个URDF文件

将要创建的URDF文件描述的是一种最常见的移动机器人,它有四个轮子、一个带有抓取器的手臂。

为了打好基础,我们先做一个带有四个轮子的机器人底座。在 chapter7_tutorials/robot1_description/urdf 文件夹创建一个新文件并命名为robot1.urdf,其内容如下:

二、常见标签说明

连接(link)标签

标签

功能

连接的可视化、碰撞和惯性属性设置

设置连接的可视化属性

设置连接的碰撞计算属性

设置连接的惯性属性

输入模型的形状。提供box、cylinder、sphere等形态

设置相对于连接相对坐标系的移动和旋转

设置连接的颜色和纹理

连接重量(单位:kg)的设置

关节(joint)标签

标签

功能

与连接的关系和关节类型的设置

关节的父连接

关节的子连接

将父连接坐标系转换为子连接坐标系

设置旋转轴

设置关节的速度、力和半径(仅当关节是revolute或prismatic时)

transmission标签

是与ROS-CONTROL一起运行所必须的标签,它输入关节与舵机之间的命令接口。

标签

功能

设置关节和舵机之间的变量

设置力的传递方式的形状

设置关节信息设置

设置硬件接口

设置舵机信息

设置舵机与关节之间的齿轮比

注:这里的起点位置是相对与父连杆的位置,并不是绝对坐标。另外连接又称连杆。

三、解释文件格式

如你在代码中所见,有两种用于描述机器人几何结构的基本字段:连接(link)和关节(joint)。

第一个连接的名字是base_link(基本连接),这个名字在文件中必须唯一:

link name:定义连接名称为base_link

visual:让定义的物体结构可见

geometry:定义几何形状(圆柱体、立方体、球体和网格)为box,尺寸为0.2*0.3*0.1

origin:rpy-起点位置无位移,xyz-绕z轴旋转

material:定义材质(颜色和纹理),这里只定义了颜色为rgba="1 1 1 1"

然后使用以下代码定义关节:

joint name:定义关节名称为base_to_wheel1,类型为固定关节

parent link:父连接是base_link

child link:子连接是wheel_1

origin:起点位置相对父连接无位移

关节类型

fiexd:固定关节,不允许运动的特殊关节

continuous:转动关节,可以绕单轴无线旋转

revolute:旋转关节,类似于continuous,但旋转角度有限

prismatic:滑动关节,沿某一轴线移动的关节,带有位置极限

floating:浮动关节,允许进行平移、旋转运动

planar:平面关节,允许在平面正交方向上平移或者旋转

四、检查URDF语法

ROS为用户提供了一个检查URDF语法的命令:

check_urdf robot1.urdf

如果一切正常,将会有如下显示:

robot name is: Robot1

---------- Successfully Parsed XML ---------------

root Link: base_link has 4 child(ren)

child(1): wheel1

child(2): wheel2

child(3): wheel3

child(4): wheel4

如果你希望以图形的方式来查看它,那么可以使用urdf_to_graphiz命令工具:

$ urdf_to_graphiz robot1.urdf

此命令将生成两个文件:robot1.gv 和 robot1.pdf。可以使用 evince 打开:

evince robot1.pdf

显示如下:

五、在rviz里查看3D模型

新建launch文件

在robot1_description/launch文件夹下新建display.launch文件,代码如下:

运行launch文件

$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf"

注:把文件直接拖进终端就可以直接显示文件位置信息。

显示如下:

默认状态下画面中什么都没有,此时需要做出调整。在左下角的add按钮中添加RobotModel,然后将Fixed Frame选为base_link。

六、添加基座臂、连接臂和夹持臂

补充urdf文件

在前增添以下代码:

运行launch文件

$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf"

显示如下:

七、使机器人模型运动

最常用的关节是转动关节。例如,我们在 arm_1_to_arm_base 上使用的就是,其代码如下所示:

旋转转动轴来运动。

limit 标签用于选择以下属性:effort(关节所承受的最大力),lower(赋值给关节的下限,旋转关节的单位是弧度,移动关节的单位是米),upper(赋值给关节的上限),velocity(强制关节的最大速度)。

要判断关节的轴或转动限值是否合适,有一种好的办法就是使用 joint_state_publisher GUI 运行 rviz(加上了gui:=true):

$ roslaunch robot1_description display.launch model:="`rospack find robot1_description`/urdf/robot1.urdf" gui:=true

joint_state_publisher GUI 运行界面显示如下:

urdf文件中每一个axis对应一个调节器,joint_state_publisher应该是ros中自带的调节joint的功能,所以直接调用就可以。另外界面中的每个滑块都能控制一个关节。

八、物理属性和碰撞属性

如果你想要在 gazebo 或者其他仿真软件上进行机器人仿真,就需要添加物理属性和碰撞属性。这意味着我们需要设定几何尺寸来计算可能的碰撞,例如设定重量我们才能够计算惯性等。

你需要保证模型文件中的所有连接都有这些参数,否则就无法对这些机器人进行仿真。

在下面的代码中,你会看到我们向名为 base_link 的连接添加这两个属性:

...

对于其他的连接也要这么做。记住,要为所有连接添加 collision 和 inertial 属性,因为如果你不这样做的话,gazebo 将无法使用这些模型。

你能够在 robot1_description/urdf/robot1_physics.urdf 中查看带有所有参数的完整文件。

参考:

ROS学习笔记十:URDF详解

Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.URDF语法规范 参见 ...

Robot Operating System (ROS)学习笔记---创建简单的机器人模型smartcar

搭建环境:XMWare  Ubuntu14.04  ROS(indigo) 转载自古月居  转载连接:http://www.guyuehome.com/243 一.创建硬件描述包 已创建catkin_ ...

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

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

springmvc学习笔记---idea创建springmvc项目

前言: 真的是很久没搞java的web服务开发了, 最近一次搞还是读研的时候, 想来感慨万千. 英雄没落, Eclipse的盟主地位隐隐然有被IntelliJ IDEA超越的趋势. Spring从2. ...

java 学习笔记之 流、文件的操作

ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import ...

python3.4学习笔记(十一) 列表、数组实例

python3.4学习笔记(十一) 列表.数组实例 #python列表,数组类型要相同,python不需要指定数据类型,可以把各种类型打包进去#python列表可以包含整数,浮点数,字符串,对象#创建 ...

Go语言学习笔记十一: 切片(slice)

Go语言学习笔记十一: 切片(slice) 切片这个概念我是从python语言中学到的,当时感觉这个东西真的比较好用.不像java语言写起来就比较繁琐.不过我觉得未来java语法也会支持的. 定义切片 ...

Django:学习笔记(2)——创建第一个应用

Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

Java NIO 学习笔记(四)----文件通道和网络通道

目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

随机推荐

spark streaming kafka example

// scalastyle:off println package org.apache.spark.examples.streaming import kafka.serializer.String ...

使用Sonatype Nexus搭建Maven私服后如何添加第三方JAR包?

Sonatype Nexus简介 登录Nexus后,点击右侧的“Repositories”,显示当前Nexus所管理的Repository: 默认情况下Nexus为我们创建了以下主要的Reposito ...

SQL Server日期函数总结

获得一个月的天数:首先到得一个月最后一天的日期,通过 SQL Server 日期函数 day() 取得日期中的“天 ”部分 获得 2008 年 2 月份的天数:select day(cast('200 ...

ORA-02287: 此处不同意序号

ORA-02287: 此处不同意序号 insert into gls_vchitem     (viid,      yr,      km)     select gls_vchitem_seq.n ...

JSON-C结构简介、使用

官方站点介绍http://www.json.org JSON (JavaScript Object Notation) is a lightweight data-interchange format ...

Jmeter - foreach控制器之嵌套使用

有需求如下: 对某分类列表分别上传随机个数的附件内容 由此想到可以使用jmeter自带的foreach控制器来实现,编写代码如下: 如图:两层循环,第一层由上方beashell获取大类列表,如下: 生 ...

第2章KNN算法笔记_函数classify0

知识点笔记目录 K-近邻算法(KNN)思想: 1,计算未知样本与所有已知样本的距离 2,按照距离递增排序,选前K个样本(K<20) 3,针对K个样本统计各个分类的出现 ...

@media 针对不同的屏幕尺寸设置不同的样式

@media screen and (max-width: 800px) {    #yanandownload .close input {    margin-right: 40px ;    } ...

HihoCoder1338 A Game (区间DP)

题目大意: 两个人轮流从一个序列中取数,他们都面临同样的二选一决策:是拿走最左边的数,还是拿走最右边的数?问先手最多能够得到的分数是多少. 解题分析: 一道比较经典的DP,因 ...

Fibonacci Heaps

Mergeable heapsA mergeable heap is any data structure that supports the following five operations,in ...

你可能感兴趣的:(创建一个urdf机器人)