将机器人3维模型导入至V-rep仿真软件的方法小结

相关博客

  • 在V-rep中通过D-H参数自动生成机械臂模型:https://blog.csdn.net/DoctorSRn/article/details/106852312

前言

首先介绍本篇博客的背景:要进行双臂机器人的规划和协作控制方法的仿真,但是双臂机器人的机械结构可能会发生变化,为了实现调整机械臂结构后仍可以方便快捷的进行算法仿真的要求,打算使用描述性文件对机械臂结构进行建模,然后通过描述性文件将机械臂模型导入至V-rep软件。
具体来说机器人3维模型导入至V-rep仿真软件的过程如下图所示:
在这里插入图片描述
(这里假设机器人的机械结构图是由Solidworks绘制)
所以,为了较方便的实现调整机器人机械结构的需求,从结构图到导入至V-rep仿真软件中可以有两种方法:

  • 从Solidworks中的3D装配结构图先导出成STL网格文件,STL网格文件可以使用Magics软件改变其形状,从而实现快速调整机械结构,然后根据STL文件编写机器人的XACRO/URDF文件,再将URDF文件导入V-rep即可。每次直接使用Magics调整STL文件,然后重新导入V-rep,就可实现调整机器人机械结构的需求;
  • 使用Solidworks的URDF插件,可以实现直接从机器人3D装配结构图直接生成URDF文件,然后将URDF文件可以导入V-rep中。每次直接在Solidworks中调整机器人装配结构图,然后重新导出URDF文件,再导入至V-rep中,就可实现调整机器人机械结构的需求。

下面详细介绍整个导入过程,以及每个步骤中遇到的一些问题和解决办法。主要内容包括以下几部分:

PS:

  1. 博客内容可能会出现在自己之后的论文中,不知道论文查重会不会和博客内容进行比对,为了防止之后出现这种情况,博客内容尽量简写了。
  2. 使用环境为:windows 8.1 + V-rep 3.6.1,最新版本的V-rep为3.6.2,之后的V-rep将停止更新,该公司将开放新的仿真平台,听说完全兼容V-rep,还挺期待的。

1.从Solidworks导出STL文件和URDF文件

机器人的机械结构图通常使用SolidWorks或者其他的3维制图软件进行绘制,绘制好的工程通常包括零件文件和装配体文件,3维制图软件提供了将原始结构图文件转换为其他文件的功能。

1.1 从solidworks中导出机器人的STL文件

在仿真软件中导入的机器人模型主要包含机器人的结构参数、动力学参数和外形等属性。而SolidWorks中的装配结构图文件细节较多、文件较大,需要经过简化后才能导入仿真软件,最终使仿真软件中的计算效率和速度更快。
通常将装配结构图导出成STL文件或者DAE文件来表征机器人的外形,STL文件相对原始的装配结构图是经过简化的,也就说STL文件在外形方面的信息丢失比较多,所以通常从装配结构图可以导出至STL文件,但是从STL文件反向得到装配图是比较困难的。
在SolidWorks导出STL文件可以直接进行,具体细节就不讲了。

1.2 从solidworks中导出URDF文件

SolidWorks提供了URDF插件,可以直接将装配结构图导出成URDF文件,导出的文件结构如下:
在这里插入图片描述
urdf文件夹下就是urdf源文件,在meshes文件夹下是导出的包络图文件,通常是STL文件或者DEA文件。

2.使用Magics软件直接编辑STL文件

前面讲到设置好机器人的STL文件并编写好对应的URDF文件后,只需要通过修改STL文件就可以实现快速的对机器人机械进行调整。STL文件的调整可以使用Magics软件,该软件可以非常方便的对STL文件中的形状进行编辑,包括拉伸、剪切、布尔操作等等。

3.使用URDF文件描述机器人机械结构

URDF是常用的通过描述性文件对机器人的结构进行建模的方法,通过便签化的文本文件来描述机器人的机械结构、动力学参数、外形和颜色等特征。而xacro是URDF的升级版,可以在xacro中使用各种宏,利用xacro可以简化urdf文件,使urdf文件变得可读性强且优雅。但在使用时都是将xacro文件先解析为urdf文件后再使用,从SolidWorks直接导出的URDF文件其实是以xacro形式导出的。所以这里需要先解决xacro到urdf的转换问题。
从xacro到urdf的转换有两种方法:

  • 借助ROS中的xacro包实现转换。不推荐这种方法,因为需要安装ROS环境,比较麻烦。3.1章节主要是记录了自己在使用这种方法过程中的一些尝试,所以3.1章节可以跳过。
  • 使用可以独立运行的xacro2urdf解析器实现xacro转换为urdf

将xacro文件转换为urdf文件,一种方式使用ROS的工具包进行,需要安装ROS和相关的软件包;另一种方式借助开源xacro转urdf代码实现

3.1 借助ROS将xacro文件转换为urdf文件

需要使用的工具运行在Linux环境,方便起见,使用腾讯的Cloud Studio作为Linux环境(版本为Ubuntu 16.04.5 LTS)。

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
# 完整版ROS,接近2G
# sudo apt-get install ros-kinetic-desktop

# 核心版ROS,不到1G
sudo apt-get install ros-kinetic-ros-base

sudo rosdep init
rosdep update
#echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
#source ~/.bashrc
# Cloud studio使用zsh
echo "source /opt/ros/kinetic/setup.zsh" >> ~/.zshrc
source ~/.zshrc

sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt-get install python-catkin-pkg
sudo apt-get install liburdfdom-tools

检查urdf文件是否语法合法:check_urdf xxxx.urdf

  • 安装xacro包:
    手动安装xacro包:
    1. 将xacro包clone至本地git clone https://github.com/ros/xacro.git
    2. 进入xacro根目录,进行安装sudo python setup.py install
      自动安装:
      sudo apt-get install ros-kinetic-xacro

3.2 使用可以独立运行的xacro2urdf解析器实现xacro转换为urdf

xacro2urdf解析器是自己在另一个开源转换代码xacro的基础上迁移过来的,而开源转换代码xacro是从ROS软件包中抽离出来可以单独运行的xacro解析器。

  • 由于该代码使用python2编写,当前环境为python3,所以需要先将代码迁移为Python3。主要修改print,sort和异常处理等几部分。可以边运行test_xacro.py边根据报错来修改。
  • 如果python test_xacro.py可以成功运行,则说明代码修改完成。
  • 然后就可以使用xacro.py进行xacro到urdf的转换。使用方法示例:python xacro.py -o ./test_abb_4600.urdf urdf/irb4600_60_205.xacro。可以直接运行python xacro.py获取帮助信息。
  • 要将xacro.py代码和urdf文件夹放置于同一目录

更多信息欢迎访问xacro2urdf解析器的代码仓库,在代码仓库中提供了一个将ABB 4600型机械臂的XACRO文件解析为URDF文件的例子。

4.将机器人通过URDF文件导入至V-rep仿真软件中

URDF相关的知识这里不打算细讲,相关的知识可以在一下网站进行学习:

  • 古月居:http://www.guyuehome.com/372
  • urdf语法规范(非常重要):http://wiki.ros.org/urdf/XML
  • urdf官方教程:http://wiki.ros.org/urdf/Tutorials
  • DH2URDF:https://github.com/AdoHaha/DH2URDF
  • 在线URDF对应机器人3D模型展示:https://mymodelrobot.appspot.com/5629499534213120
  • URDF基本知识:https://blog.csdn.net/sunbibei/article/details/52297524

V-rep中提供了通过URDF导入机器人模型的插件。

4.1 urdf文件导入V-rep例子1

尝试导入一个小车的urdf描述文件,小车urdf文件来自该博客,小车的URDF文件为:

<robot name="test_robot">  
  <link name="base_link">  
    <visual>  
       <geometry>  
         <box size="0.2 .3 .1"/>  
       </geometry>  
       <origin rpy="0 0 0" xyz="0 0 0.05"/>  
       <material name="white">  
         <color rgba="1 1 1 1"/>  
       </material>  
    </visual>  
  </link>  
  
  <link name="wheel_1">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>  
      <material name="black">  
        <color rgba="0 0 0 1"/>  
      </material>  
    </visual>  
  </link>  
  
  <link name="wheel_2">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_3">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <link name="wheel_4">  
    <visual>  
      <geometry>  
        <cylinder length="0.05" radius="0.05"/>  
      </geometry>  
      <origin rpy="0 1.5 0" xyz="-0.1 -0.1 0"/>  
      <material name="black"/>  
    </visual>  
  </link>  
  
  <joint name="joint_base_wheel1" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_1"/>  
  </joint>  
  
  <joint name="joint_base_wheel2" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_2"/>  
  </joint>  
  
  <joint name="joint_base_wheel3" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_3"/>  
  </joint>  
  
  <joint name="joint_base_wheel4" type="fixed">  
    <parent link="base_link"/>  
    <child link="wheel_4"/>  
  </joint>  
</robot> 

将上面的小车URDF文件保存在本地,然后使用V-rep的URDF插件导入后如下图:
在这里插入图片描述

  • 发现只有wheel1是黑色,其他轮子的颜色不对,这是因为wheel1的<material>是完全的,其他三个轮子的<material>属性没有写全,当严格按照wheel1的格式来写时,其他轮子的颜色就正常了。而在ROS下,这种写法是可以的。这可能是因为V-rep的URDF解析器没有把情况考虑周全。当然也可以导入URDF后在V-REP中设置模型的颜色。
  • 另外还有一些ERROR,但是导入的模型是符合urdf文件描述的。
  • urdf文件中<origin rpy="0 1.5 0" xyz="0.1 0.1 0"/>rpy表示绕轴x,y,zx,y,z分别旋转的角度(弧度制),这里的1.5表示绕y轴旋转差不多90°90\degree
  • 关节<joint>属性<type>fixed,导入V-rep后是用于连接刚性物体的力传感器模块。
  • 导入的所有模型没有使能动力学属性。

4.2 urdf文件导入V-rep例子2–导入有STL文件构成的URDF文件

https://github.com/doctorsrn/xacro2urdf/blob/master/abb_irb4600_support/urdf/test_abb_4600_voxel1.urdf
3.2节介绍了xacro2urdf解析器,并给出了一个ABB 4600机械臂URDF文件导出的例子,而V-rep仿真软件中内置了ABB 4600机械臂模型,所以我们将通过URDF导入的机械臂和内置的机械臂模型进行一个简答的对比。
首先在xacro2urdf解析器代码仓库中可找到导出的ABB 4600机械臂的URDF文件test_abb_4600.urdf,使用URDF插件导入V-rep,
导入ABB 4600型机械臂和V-rep中内置的模型对比如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9XVMKKgM-1592535862447)(./urdf_pics/4_pics.png)]
左边是V-rep内置的ABB 4600机械臂模型,右边是通过URDF文件导入的机械臂模型。可以看到从外形上看区别不大,内置的模型细节更多一些。其他方面的差异:

  • 通过URDF直接导入的模型,各个零部件的名字比较长且混乱,需要通过手动修改简化;
  • URDF文件中零件颜色的设置存在一些问题,导致导入的模型颜色有时会不正常;
  • 其他问题。。

4.3 urdf文件导入V-rep例子3–导入有URDF内置几何形状的模型文件

4.2中导入的ABB 4600机械臂它的<collision><visual >标签属性均有外部的STL文件或DEA文件来定义,如果不使用外部文件,直接使用URDF默认支持的长方体、圆柱体和球体等形状来定义也是可以的。在xacro2urdf解析器代码仓库中提供了使用URDF内置几何体表征<collision><visual >标签属性的模型文件test_abb_4600_voxel*.urdf,具体实现是简单粗暴的直接把<collision><visual >标签属性中的STL部分替换成内置的几何体,导入至V-rep中,对比的效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eajY7gxL-1592535862449)(./urdf_pics/5_pics.png)]
左边是使用URDF内置几何体的机械臂模型,右边是通过STL文件定义<collision><visual >标签属性的模型,虽然使用几何体基本可以表征机械臂的<collision><visual >标签属性,但是不太美观。所以这种方式只是一种尝试。

PS: V-rep在windows下的URDF中设置<mesh>属性时路径的设置问题:需要使用绝对路径,示例:

 <link name="right_leg">
     <visual>
       <geometry>
         <mesh filename="c://users//Srn//Desktop//w1.stl"/>
       </geometry>
       <material name="blue"/>
       <origin rpy="0 0 0" xyz="0 0 0"/>
     </visual>
   </link>

4.4 urdf相关知识

  1. ABB公司常用机械臂资料
  • 机械臂URDF模型:https://github.com/ros-industrial/abb
  • 更全的URDF模型:https://github.com/ros-industrial/abb_experimental
  • 不同机械臂型号:https://new.abb.com/products/robotics/zh/industrial-robots
  1. 小知识点
  • urdf中模型位姿默认是竖直向上,旋转和平移变换时都是先旋转再平移
  • urdf中的box,cylinder,sphere默认的<origin>是其几何中心
  • urdf中对导入的mesh进行缩放的写法是:<mesh filename="package://dual_arm/meshes/xjt/collision/base_link.stl" scale="0.1 0.1 0.1"/>
  • meshlab软件可用来查看3D结构,实现stl和dea文件的转换。
  • 导入模型中包含dea或stl等3维模型,如果3D模型较大,导入时就会很慢甚至程序卡死。
  • URDF座标系定义、V-rep座标系定义以及D-H参数座标系定义都存在差异,注意这个点的一些坑。
  1. 其他相关
  • 常用物体3D模型和URDF文件:http://www.ycbbenchmarks.org/

5.其他的一些尝试

5.1 通过修改D-H参数来达到快速调整机械臂机械臂结构的需求

D-H参数是表征机械臂机械结构的参数,通过修改D-H参数的确可以表征不同结构的机械臂,但是通过修改D-H参数来达到快速调整机械臂机械臂结构的需求,这种想法在逻辑上是不太合适的,因为通常是先根据性能需求设计好机械臂,然后才能得到机械臂的D-H参数,而不是先设计好D-H参数,再生成机械臂。
不过D-H参数和URDF中的几何参数之间从原理上的确是可以相互转换的,也就是说理论上,只要知道了机械臂的D-H参数,这个机械臂的骨架结构是可以绘制出来的,但是更多的外形信息是无法知道的。从D-H参数生成机器人的URDF文件,这方面的研究在网上主要找到以下两个:

5.2 通过D-H参数快速导入机械臂模型至V-rep中

该部分内容请看博客通过D-H参数快速导入机械臂模型至V-rep中

------The End------------


写在最后,本篇博客主要是记录自己在将机器人3维模型导入至V-rep仿真软件过程中的各种尝试,由于是各种尝试,所以内容会看起比较杂乱,因为这篇博客并不是所谓的教程,只是一篇笔记。此外,以上所有内容主要是讲如何导入模型至V-rep中,而想要使用导入的模型进行仿真,还需要对导入的模型进行相关属性的设置,包括各种仿真参数的设置等等,以及一些控制脚本的编写等,这些之后有时间再去写。欢迎针对博客中的内容进行交流~

模型导入V-rep后的后续处理

参考博客:

  • https://blog.csdn.net/weixin_34378045/article/details/85881945
  • https://blog.csdn.net/weixin_34218579/article/details/85882238
  1. 形状的设置问题
    导入后模型默认为Compound convex shapes:
    在这里插入图片描述
    这种形状不适合快速进行动力学仿真,可以通过[Menu bar --> Edit -->Morph Selection into convex shapes]将其转化为convex shapes来提高仿真计算速度。
    如果是符合形状,可以使用[Menu bar --> Edit -->Morph Selection into its convex decomposition shapes] 将其转化为Compound convex shape来提高仿真计算速度。
    不同形状的速度参考官方文档
    将原始形状可以作为visual层用于可视化,将生成的convex形状用于动力学仿真,并可以隐藏。通常将用于动力学仿真的convex形状的dynamic属性先设置为Body is respondable,但Body is dynamic先不勾选,在需要动力学仿真时再勾选。
    注意: 用于可视化的形状和用于动力学仿真的convex形状在文件结构上属于同一层,且convex形状通常是父节点。

  2. 设置response形状的属性为dynamic,并且把基座设置为"Set to dynamic if gets parent"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章