首先介绍本篇博客的背景:要进行双臂机器人的规划和协作控制方法的仿真,但是双臂机器人的机械结构可能会发生变化,为了实现调整机械臂结构后仍可以方便快捷的进行算法仿真的要求,打算使用描述性文件对机械臂结构进行建模,然后通过描述性文件将机械臂模型导入至V-rep软件。
具体来说机器人3维模型导入至V-rep仿真软件的过程如下图所示:
(这里假设机器人的机械结构图是由Solidworks绘制)
所以,为了较方便的实现调整机器人机械结构的需求,从结构图到导入至V-rep仿真软件中可以有两种方法:
下面详细介绍整个导入过程,以及每个步骤中遇到的一些问题和解决办法。主要内容包括以下几部分:
PS:
机器人的机械结构图通常使用SolidWorks或者其他的3维制图软件进行绘制,绘制好的工程通常包括零件文件和装配体文件,3维制图软件提供了将原始结构图文件转换为其他文件的功能。
在仿真软件中导入的机器人模型主要包含机器人的结构参数、动力学参数和外形等属性。而SolidWorks中的装配结构图文件细节较多、文件较大,需要经过简化后才能导入仿真软件,最终使仿真软件中的计算效率和速度更快。
通常将装配结构图导出成STL文件或者DAE文件来表征机器人的外形,STL文件相对原始的装配结构图是经过简化的,也就说STL文件在外形方面的信息丢失比较多,所以通常从装配结构图可以导出至STL文件,但是从STL文件反向得到装配图是比较困难的。
在SolidWorks导出STL文件可以直接进行,具体细节就不讲了。
SolidWorks提供了URDF插件,可以直接将装配结构图导出成URDF文件,导出的文件结构如下:
在urdf
文件夹下就是urdf源文件,在meshes
文件夹下是导出的包络图文件,通常是STL文件或者DEA文件。
前面讲到设置好机器人的STL文件并编写好对应的URDF文件后,只需要通过修改STL文件就可以实现快速的对机器人机械进行调整。STL文件的调整可以使用Magics软件,该软件可以非常方便的对STL文件中的形状进行编辑,包括拉伸、剪切、布尔操作等等。
URDF是常用的通过描述性文件对机器人的结构进行建模的方法,通过便签化的文本文件来描述机器人的机械结构、动力学参数、外形和颜色等特征。而xacro是URDF的升级版,可以在xacro中使用各种宏,利用xacro可以简化urdf文件,使urdf文件变得可读性强且优雅。但在使用时都是将xacro文件先解析为urdf文件后再使用,从SolidWorks直接导出的URDF文件其实是以xacro形式导出的。所以这里需要先解决xacro到urdf的转换问题。
从xacro到urdf的转换有两种方法:
3.1
章节主要是记录了自己在使用这种方法过程中的一些尝试,所以3.1
章节可以跳过。将xacro文件转换为urdf文件,一种方式使用ROS的工具包进行,需要安装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
git clone https://github.com/ros/xacro.git
sudo python setup.py install
sudo apt-get install ros-kinetic-xacro
xacro2urdf解析器是自己在另一个开源转换代码xacro的基础上迁移过来的,而开源转换代码xacro是从ROS软件包中抽离出来可以单独运行的xacro解析器。
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文件的例子。
URDF相关的知识这里不打算细讲,相关的知识可以在一下网站进行学习:
V-rep中提供了通过URDF导入机器人模型的插件。
尝试导入一个小车的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的格式来写时,其他轮子的颜色就正常了。而在ROS下,这种写法是可以的。这可能是因为V-rep的URDF解析器没有把情况考虑周全。当然也可以导入URDF后在V-REP中设置模型的颜色。
的rpy
表示绕轴 x , y , z x,y,z x,y,z分别旋转的角度(弧度制),这里的1.5表示绕y轴旋转差不多 90 ° 90\degree 90°。
属性
是fixed
,导入V-rep后是用于连接刚性物体的力传感器模块。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文件导入的机械臂模型。可以看到从外形上看区别不大,内置的模型细节更多一些。其他方面的差异:
在4.2
中导入的ABB 4600机械臂它的
和
标签属性均有外部的STL文件或DEA文件来定义,如果不使用外部文件,直接使用URDF默认支持的长方体、圆柱体和球体等形状来定义也是可以的。在xacro2urdf解析器代码仓库中提供了使用URDF内置几何体表征
和
标签属性的模型文件test_abb_4600_voxel*.urdf,具体实现是简单粗暴的直接把
和
标签属性中的STL部分替换成内置的几何体,导入至V-rep中,对比的效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eajY7gxL-1592535862449)(./urdf_pics/5_pics.png)]
左边是使用URDF内置几何体的机械臂模型,右边是通过STL文件定义
和
标签属性的模型,虽然使用几何体基本可以表征机械臂的
和
标签属性,但是不太美观。所以这种方式只是一种尝试。
PS: V-rep在windows下的URDF中设置
属性时路径的设置问题:需要使用绝对路径,示例:
<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>
box,cylinder,sphere
默认的
是其几何中心
D-H参数是表征机械臂机械结构的参数,通过修改D-H参数的确可以表征不同结构的机械臂,但是通过修改D-H参数来达到快速调整机械臂机械臂结构的需求,这种想法在逻辑上是不太合适的,因为通常是先根据性能需求设计好机械臂,然后才能得到机械臂的D-H参数,而不是先设计好D-H参数,再生成机械臂。
不过D-H参数和URDF中的几何参数之间从原理上的确是可以相互转换的,也就是说理论上,只要知道了机械臂的D-H参数,这个机械臂的骨架结构是可以绘制出来的,但是更多的外形信息是无法知道的。从D-H参数生成机器人的URDF文件,这方面的研究在网上主要找到以下两个:
该部分内容请看博客通过D-H参数快速导入机械臂模型至V-rep中
写在最后,本篇博客主要是记录自己在将机器人3维模型导入至V-rep仿真软件过程中的各种尝试,由于是各种尝试,所以内容会看起比较杂乱,因为这篇博客并不是所谓的教程,只是一篇笔记。此外,以上所有内容主要是讲如何导入模型至V-rep中,而想要使用导入的模型进行仿真,还需要对导入的模型进行相关属性的设置,包括各种仿真参数的设置等等,以及一些控制脚本的编写等,这些之后有时间再去写。欢迎针对博客中的内容进行交流~
参考博客:
形状的设置问题
导入后模型默认为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形状通常是父节点。
设置response形状的属性为dynamic,并且把基座设置为"Set to dynamic if gets parent"