使用urdf文件进行rviz机器人建模

1.完整机器人模型

 

 

2.基本元素

2.1link 连杆

红色的框即为碰撞属性,为了简化计算,因此将椭圆形简化为方形

link origin是起始坐标系

 

2.2joint 关节

必须有父连杆与子连杆。

 

3.机器人建模步骤

 

3.1建立功能包

我使用的是roboware进行建立的。

首先在roboware中的某一个工作区下新建功能包名为simulink,并依赖于urdf xacro。

然后在功能包中新建文件夹,第一个文件夹为urdf,用来放置模型文件。第二个文件夹叫做meshes,用来放置外观纹理,一般是通过三维软件建模完成后,导出并放置在meshes中,第三个为launch文件夹。第四个是config文件夹,功能包的配置文件以及rviz的显示配置文件。

 

3.2launch文件配置

 

                                                           

 

在进行机器人的显示时,一般是固定的文件格式,一般只需要修改第一行以及最后一行即可,严格说是所有涉及到路径的设置的,都需要改正。

 

3.3config文件设置

新建config文件夹,并将添加一个config文件,编辑config内容,config中的内容不需要自己取编写,可以直接用别人的,或者自己从rviz中导出。

 

 

 

3.4新建urdf文件(要和前面的launch文件中的文件名称相同)

 

上面建立了一个简单的urdf模型,这个显示出来是一个绿色的圆柱体。

在这个过程中可能会遇到问题,参考:https://blog.csdn.net/maizousidemao/article/details/87621383,内容如下

问题描述

No transform from [base_link] to [base_footprint]

创建URDF模型在rviz中显示时,可以显示模型形状,但不显示颜色,如下图:

使用urdf文件进行rviz机器人建模_第1张图片

 

问题分析

rviz默认Fixed Frame(固定参考系)为base_footprint,而我的模型中没有base_footprint

 

解决方法

将Fixed Frame改为你自己的机器人主体(基体)名称,一般是base_link

不过这样每次打开都需要改,

所以,可以找到ibot_description/config/ibot.rviz(ibot是我的机器人名称,根据你自己的找到*.rviz就行),打开ibot.rviz,找到Fixed Frame,将值改为base_link,如下图:

 

总结

1.Fixed Frame是用于表示“世界”参考系的参考系。通常是“/map”,或“/world”,或类似的东西,例如你的odometry(里程计)框架。

2.*.rviz是rviz的配置文件,每次打开rviz都要加载相应的*.rviz。

 

4.造轮子实战

 

 

在进行添加添加左轮轮子的过程中,

                   

是必须要进行添加的,因为涉及到关节与运动并需要在rviz中进行显示。

如果不添加就会出现下面这种情况,左轮没办法显示。

但是添加后,还可能会遇到新的错误,python2.7默认只支持ascii编码,因此要对默认设置进行更改。

 

参考https://blog.csdn.net/jueblog/article/details/51123411 ,文章内容如下:

Python2.7编译时报错:

'ascii' codec can't encode characters in position 8-50: ordinal not in range(128)

Python2.7在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。

查询系统默认编码可以在解释器中输入以下命令:

 

Python代码    

>>>sys.getdefaultencoding()  

设置默认编码时使用:

 

Python代码    

>>>sys.setdefaultencoding('utf8')  

 可能会报AttributeError: 'module' object has no attribute 'setdefaultencoding'的错误,执行reload(sys),在执行以上命令就可以顺利通过。

 

此时在执行sys.getdefaultencoding()就会发现编码已经被设置为utf8的了,但是在解释器里修改的编码只能保证当次有效,在重启解释器后,会发现,编码又被重置为默认的ascii了,那么有没有办法一次性修改程序或系统的默认编码呢。

 

有2种方法设置python的默认编码:

 

一个解决的方案在程序中加入以下代码:

 

Python代码    

import sys  

reload(sys)  

sys.setdefaultencoding('utf8')   

 

另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

 

# encoding=utf8

import sys

reload(sys)

sys.setdefaultencoding('utf8')

 

此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。

 

按照上面方法进行更改后,显示正确:

 

 

你可能感兴趣的:(ROS机器人基础)