V-REP(Virtual Robot Experimentation Platform),是全球领先的机器人及模拟自动化软件平台。V-REP让使用者可以模拟整个机器人系统或其子系统(如感测器或机械结构),通过详尽的应用程序接口(API),可以轻易的整合机器人的各项功能。V-REP可以被使用在远程监控、硬件控制、快速原型验证、控制算法开发与参数调整、安全性检查、机器人教学、工厂自动化模拟及产品展示等各种领域。

  之前用过多体动力学仿真软件ADAMS,现在再来学V-rep感觉很不习惯,界面和操作方式都有很大的差异,毕竟ADAMS是一个成熟的商业软件而V-rep只是一个开源软件。但V-rep好在编程很方便,支持多种编程语言(lua,python,C/C++,MATLAB,java等),还可以和ROS连接。国内的V-rep用户应该不是很多,网上关于V-rep的中文资料也几乎为零,而官方的教程对我这种菜鸟来说又太过高级。所以先自己慢慢摸索吧,下面将自己的学习过程记录下来,以免以后忘记...

  先来研究一下V-rep中的转动关节。为什么想先研究转动关节呢(官方教程里一开始就是各种寻迹、机器人逆解...),可能还是受到ADAMS的影响吧。就像学一门编程语言第一步就是写一个hello world程序一样,ADAMS学习第一步就是建立一个连杆和转动关节来进行运动学、动力学的方针。我一开始在V-rep中按ADAMS的操作方式试过好几次,要么是连杆不转动要么就是一仿真连杆就直接受重力影响直接掉下去。去网上查找解决问题的方法,发现大家讨论的问题都比较高级,相关的细节很少有介绍的。那我就自己动手多试试...

  讲到转动关节先要说一下V-rep中物体姿态角的定义方式。在ADAMS中用户可以自定义姿态角绕坐标轴的旋转顺序,以及是按固定坐标系旋转还是绕自身坐标系旋转。在V-rep中物体姿态以X-Y-Z欧拉角的方式确定(以指定的参考系为初始姿态,然后按X-Y-Z的顺序依次绕自身的坐标轴旋转Alpha,Beta,Gamma角度后得到),参考坐标系有world和Parent frame之分,下面来看看这两者有什么区别。

  先建立一个Plane平面(下图中灰色的正方形),将Plane的坐标系绕自身Z轴旋转90°,然后添加一个Cuboid把它作为Plane的子对象。现在我们选中Cuboid打开其Object orientation对话框,可以看到当选择相对Parent frame时其姿态角位(0,0,-90°),即以Plane的坐标系为基准,绕自身Z轴旋转-90°得到;而选择World时,姿态角位(0,0,0),即Cuboid的姿态与世界坐标系的姿态一致。下图可以说明这一别。

  打开V-rep的帮助找到Joint types and operation那一页,里面写道A joint is used to allow for a relative movement between its parent and its children,即joint是用于连接其父对象和子对象,并限制其父子对象相对运动的。按照ADAMS的方式先建立连杆,再讲旋转关节添加到连杆一端就可以开始愉快的仿真了,而V-rep这样的话连杆会直接掉下去。后来看了一下软件自带的一个齿轮的例子(gearMechanism.ttt),发现V-rep中需要显式的建立一个机架(即为机构上静止不动的部件),而ADAMS默认旋转关节是连着Ground的。下面添加一个平面作为机架,并在dynamic properties对话框中去掉Body is dynamic选项(when enabled, then the shape's position and orientation will be influenced in a dynamic simulation,由于机架固定不动,因此需要去掉该选项)。将连杆和旋转关节建立好放在合适的位置(下图中将旋转关节放在连杆的最左端。如果放在中间且不添加关节驱动力,在重力作用下连杆不会发生转动)。将Joint设为Torque/force mode,在动力学特性对话框中如果勾选Motor enabled,则关节将带动连杆按指定规律运动;如果没有勾选Motor enabled,则关节成为一个自由关节,连杆受重力作用会绕着关节往复摆动。

  另外需要注意的是,根据官方文档:"Non-static shapes will fall (i.e. be influenced by gravity) if they are not otherwise constrained. Dynamic constraints between shapes can be set-up by attaching two shapes together with a dynamically enabled joint. Dynamically enabled joints are joints that are in force or torque mode or that operate in hybrid fashion, and that have a shape as parent object and exactly one child object which must be a non-static shape." 即如果关节没有设置成动力学模式(Torque/force mode)或着在非动力学模式下没有勾选Hybrid operation选项,连杆将不会被约束住,在重力作用下会坠落。

  下面调整视角,添加一个Graph记录连杆在驱动作用下的旋转角度。打开Graph的对话框在Add new data stream to record中添加要测的数据。注意这里要选择absolute gamma-orientation,因为连杆是绕着自身的Z轴在旋转,测量物体选择Cuboid。关节角速度为30°/s,仿真2s后停止,到达60°的位置,Graph记录了连杆转角随时间的变化。

  关节在Torque/force模式下可以设置目标角速度,需要注意的一点是:The target velocity will be instantaneously reached if the maximum torque/force is high enough; otherwise the target velocity is gradually approached. 即如果关节力矩过小,目标速度可能要缓慢才能达到。下面两幅图说明了这种情况。

参考:

1. V-REP User Manual

2. Simulate a rotating object (valve) using joint

V-rep学习笔记:转动关节1的更多相关文章

  1. R语言与机器学习学习笔记

    人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...

  2. 蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)

    长链剖分学习笔记 说到树的链剖,大多数人都会首先想到重链剖分.的确,目前重链剖分在OI中有更加多样化的应用,但它大多时候是替代不了长链剖分的. 重链剖分是把size最大的儿子当成重儿子,顾名思义长链剖 ...

  3. KD-Tree 学习笔记

    这是一篇又长又烂的学习笔记,请做好及时退出的准备. KD-Tree 的复杂度大概是 \(O(n^{1-\frac{1}{k}})\) \(k\) 是维度 由于网上找不到靠谱的证明,咕了. 会证明之后再 ...

  4. 「学习笔记」FFT 快速傅里叶变换

    目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...

  5. CF1147F Zigzag Game & 稳定婚姻问题学习笔记

    CF1147F Zigzag Game 这题太神仙了,不得不记录一下. 我网络流做不动了,DS做不动了,DP做不动了,特别自闭.于是博弈论之神(就是随手切3500博弈的那种) \(\color{bla ...

  6. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

  7. Sass学习笔记之入门篇

    Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...

  8. react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置

    参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...

  9. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  10. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

随机推荐

  1. ubuntu遇到的命令

    sudo passwd root这个命令是给root用户设定密码.su root切换到root用户.sudo cp 文件 /var/www移动文件到一个目录unzip xxx.zip解压zip文件mk ...

  2. 12个滑稽的C语言面试问答——《12个有趣的C语言问答》评析(5)

    前文链接:http://www.cnblogs.com/pmer/archive/2013/09/17/3327262.html A,局部变量的返回地址 Q:下面的代码有问题吗?如果有,如何修改? # ...

  3. 集成Spring事物管理

    什么是事物 事物是访问数据库的一个操作序列,数据库应用系统通过事物集来完成对数据库的存取.事物的正确执行使得数据库从一种状态转换为另一种状态. 事物必须服从ISO/IEC所制定的ACID原则.ACID ...

  4. UIView属性及方法

    @property(nonatomic) CGFloat alpha //设置视图的透明度 //透明度的设置从最小0.0到1.0 ,1.0为完全不透明, //其中这个属性只影响当前视图,并不会影响其子 ...

  5. Java常见编码方式简介

    计算机只能识别二进制数据,早期由来是电信号. 为了方便应用计算机,让它可以识别各个国家的文字. 就将各个国家的文字用数字来表示,并一一对应,形成一张表. ASCII:美国标准信息交换码. 用一个字节的 ...

  6. How To Set Up vsftpd on CentOS 6

    About vsftpd 警告:FTP是天生不安全.如果你必须使用FTP,考虑securing your FTP connection with SSL/TLS.否则,最好use SFTP, a se ...

  7. MySQL之对数据库库表的字符集的更改

    数据字符集修改步骤: 对于已有的数据库想修改字符集不能直接通过 "alter database character set *"或 "alter table tablen ...

  8. python中列表和字典常用方法和函数

    Python列表函数&方法 Python包含以下函数: 序号 函数 1 cmp(list1, list2)比较两个列表的元素 2 len(list)列表元素个数 3 max(list)返回列表 ...

  9. Oracle中左右外连接详解

    数据表的连接有:  1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两 ...

  10. [充电][ios]ios充电接口

    知乎推荐:http://www.zhihu.com/topic/19693633/top-answers 外文教学网站: http://www.raywenderlich.com/ 著作权归作者所有. ...