红色的框即为碰撞属性,为了简化计算,因此将椭圆形简化为方形
link origin是起始坐标系
必须有父连杆与子连杆。
我使用的是roboware进行建立的。
首先在roboware中的某一个工作区下新建功能包名为simulink,并依赖于urdf xacro。
然后在功能包中新建文件夹,第一个文件夹为urdf,用来放置模型文件。第二个文件夹叫做meshes,用来放置外观纹理,一般是通过三维软件建模完成后,导出并放置在meshes中,第三个为launch文件夹。第四个是config文件夹,功能包的配置文件以及rviz的显示配置文件。
在进行机器人的显示时,一般是固定的文件格式,一般只需要修改第一行以及最后一行即可,严格说是所有涉及到路径的设置的,都需要改正。
新建config文件夹,并将添加一个config文件,编辑config内容,config中的内容不需要自己取编写,可以直接用别人的,或者自己从rviz中导出。
上面建立了一个简单的urdf模型,这个显示出来是一个绿色的圆柱体。
在这个过程中可能会遇到问题,参考:https://blog.csdn.net/maizousidemao/article/details/87621383,内容如下
问题描述
No transform from [base_link] to [base_footprint]
创建URDF模型在rviz中显示时,可以显示模型形状,但不显示颜色,如下图:
问题分析
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。
在进行添加添加左轮轮子的过程中,
是必须要进行添加的,因为涉及到关节与运动并需要在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启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。
按照上面方法进行更改后,显示正确: