ROS探索总结(六十二)—— 古月私房课 | 如何从零创建一个机器人模型

6489
6
2019年4月1日 11时01分

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:古月私房课 | 如何从零创建一个机器人模型

 

大家好,这里是《ROS机械臂开发:从入门到实战》的第三讲——如何从零创建一个机器人模型,我是主讲人胡春旭。

幻灯片1

本讲我们将从以下三个部分进行讲解。

幻灯片2

首先给大家介绍ROS中URDF建模的原理。

幻灯片3

在建模之前,我们需要了解机器人的组成结构,从控制角度来讲,机器人由控制系统、驱动系统、执行机构和传感系统组成。

幻灯片4

我们可以把机器人想象成人,那么这四个部分就对应于人的大脑、肌肉、手脚和感官,可以组成一个闭环系统,机器人建模其实就是针对这四个部分进行的。

幻灯片5

URDF是一种标准机器人描述文件格式,使用XML文件描述机器人连杆(link)和关节(joint)之间的关系,而且URDF还可以用来描述除机器人以外的模型,比如下图中的桌子。

幻灯片6

link描述机器人某个刚体部分的外观和物理属性,主要包含外观形态、碰撞属性和惯性矩阵三个部分。

幻灯片7

joint描述两个link之间的相对运动关系,一共有6种运动类型,我们常用的是旋转和滑动这两种。

幻灯片8

多个link和joint都需要包含在robot顶层标签中,其中会涉及大量参数的配置和重复模块的使用,这就需要URDF提供一种更加友好的建模方式。

幻灯片9

xcaro文件就是URDF模型解析的进化版本,加入了很多程序化的建模方式。

幻灯片10

比如常量的定义,类似于C程序中的宏定义,可以预先定义好建模过程中需要使用的参数,便于修改。

幻灯片11

我们还可以在URDF中进行数学运算。

幻灯片12

还有宏定义的功能,将重复使用的模块单独提取出来,可多次复用,就像C程序中的函数一样。

幻灯片13

在第二个部分,我们会以一个简单的六轴机器人为例,介绍如何手写一个URDF机械臂模型出来。

幻灯片15

在模型当中,需要包含以下几个部分,重点还是在link和joint的配置上。

幻灯片16

模型创建成功后,就需要在rviz中显示出来,检查是否和我们预想的形态一致。

幻灯片17

以下就是我们创建成功的六轴机器人模型,还可以通过tf工具清晰的看到各关节的坐标系动态变化。

幻灯片18

以上主要是让大家熟悉URDF模型语法,在真实场景中,我们使用的机器人模型一般都是比价复杂的。

幻灯片19

这里我们以UR3为例,介绍如何将Solidworks当中的机器人模型转换成URDF格式,需要用到一个小插件——sw_urdf_exporter。

幻灯片20

带入模型之后先使用插件对link和joint做一些配置。

幻灯片21

确认配置后,就可以导出URDF模型的功能包了。

幻灯片22

将功能包放到ROS环境中,会发现自动导出插件的一些小bugs,简单修复后,就可以看到机器人模型啦。

幻灯片23

以上就是本讲的内容概要,详细配置过程和操作视频请见具体课程视频。

幻灯片24

更多精彩,欢迎大家关注“古月居”。

幻灯片27

 

更多内容欢迎关注:

微信公众号:古月居 (guyue_home)

新浪微博:古月春旭

知乎专栏:古月居

发表评论

后才能评论

评论列表(6条)

  • by7qz_1293 2020年8月24日 下午3:16

    您好,我在将solidworks 模型转成urdf的时候遇到了一个错误,Inferring the joint geometry failed for the joint joint1 from link link1 to base_ink failed Check that the mates have not full dfined the compoents in link link1 and that there is exactly one degree of feedom.模式是fusion360 转 step在solidworks里面加载的。这个是模型的地址https://github.com/SkyentificGit/SmallRobotArm/tree/master/Fusion360

  • 安好 2020年5月19日 上午10:42

    古月老师你好 我用的您的sw中导出的ares小车模型 自己没改动过 添加libgazebo_ros_planar_move.so插件 设y轴速度为0.3 z轴转速为0.3 小车在运动过程中一直翻车 您知道什么原因么

  • 安好 2020年5月14日 上午10:37

    古月老师你好 我按照您视频的教程创建了自己的小车 添加了base_footprint link和对应的joint 父link是carbody origin为0 0 0 添加了激光雷达 用roslaunch在gazebo中展示 并运行rosrun rviz rviz想看激光数据 但是运行之后报错说No transform from base_footprint to carbody 而我单独用roslaunch运行rviz查看 又没有这个错 model和tf都正确 您知道这是什么原因么

    • 古月 回复 安好 2020年5月14日 上午11:39

      还是tf的问题,检查base_footprint to carbody的坐标变换,有可能是没有,也有可能是频率不对

    • 安好 回复 古月 2020年5月14日 下午2:24

      古月老师: 你好! 非常感谢您的答复 我是这么设置link和jiont的




      imu link 和joint 我用同样的设置方法 却没有出错 不知道base_footprint这样设置为什么不对 具体的问题描述我给您发了邮件(@hust.edu.cn邮箱) 另外您说的可能是频率不对是指什么 刚接触gazebo 不知道怎么排查

  • 2019年10月23日 下午3:20

    古月老师您好!请问在我的机器人上面插入一个射线雷达传感器的话,发现雷达外形过大,能不能像插入网格文件一样使用scale指令缩放比例,在机器人sdf文件里面修改内?就是不需要再回到雷达模型的sdf文件修改,直接在插入的链接后类似调整比例大小呢?