V-rep学习笔记:转动关节1
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的更多相关文章
- R语言与机器学习学习笔记
人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经网络由大量的人工神经元联结进行计算.大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自 ...
- 蒟蒻的长链剖分学习笔记(例题:HOTEL加强版、重建计划)
长链剖分学习笔记 说到树的链剖,大多数人都会首先想到重链剖分.的确,目前重链剖分在OI中有更加多样化的应用,但它大多时候是替代不了长链剖分的. 重链剖分是把size最大的儿子当成重儿子,顾名思义长链剖 ...
- KD-Tree 学习笔记
这是一篇又长又烂的学习笔记,请做好及时退出的准备. KD-Tree 的复杂度大概是 \(O(n^{1-\frac{1}{k}})\) \(k\) 是维度 由于网上找不到靠谱的证明,咕了. 会证明之后再 ...
- 「学习笔记」FFT 快速傅里叶变换
目录 「学习笔记」FFT 快速傅里叶变换 啥是 FFT 呀?它可以干什么? 必备芝士 点值表示 复数 傅立叶正变换 傅里叶逆变换 FFT 的代码实现 还会有的 NTT 和三模数 NTT... 「学习笔 ...
- CF1147F Zigzag Game & 稳定婚姻问题学习笔记
CF1147F Zigzag Game 这题太神仙了,不得不记录一下. 我网络流做不动了,DS做不动了,DP做不动了,特别自闭.于是博弈论之神(就是随手切3500博弈的那种) \(\color{bla ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- Sass学习笔记之入门篇
Sass又名SCSS,是CSS预处理器之一,,它能用来清晰地.结构化地描述文件样式,有着比普通 CSS 更加强大的功能. Sass 能够提供更简洁.更优雅的语法,同时提供多种功能来创建可维护和管理的样 ...
- react-native学习笔记--史上最详细Windows版本搭建安装React Native环境配置
参考:http://www.lcode.org/react-native/ React native中文网:http://reactnative.cn/docs/0.23/android-setup. ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
随机推荐
- 【NOIP模拟赛】秦时明月
秦时明月 (sword.cpp/c/pas) [问题描述] 卫庄与盖聂又要论剑了,因为渊虹和鲨齿都是天下名剑,论剑容易互相损伤,太过可惜,于是两位换了两把木剑.因为木剑质地不匀,剑的每一段都有一个 ...
- mysql笔记03 查询性能优化
查询性能优化 1. 为什么查询速度会慢? 1). 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减 ...
- 鸟哥的linux私房菜学习记录之bash
当你对计算机输入一个指令时,bash会将指令传送给核心kernel,核心再去调用相关的程序,启动硬件. 如果直接让用户操作操作系统,可能会造成系统的崩溃,所以操作系统通过应用程序来让用户操作系统即壳程 ...
- redis make test报错 Test replication partial resync: ok psync
更改 tests/integration/replication-psync.tcl 文件: vi tests/integration/replication-psync.tcl 把对应报错的那段代码 ...
- Java String类中的intern()方法
今天在看一本书的时候注意到一个String的intern()方法,平常没用过,只是见过这个方法,也没去仔细看过这个方法.所以今天看了一下.个人觉得给String类中加入这个方法可能是为了提升一点点性能 ...
- centos6.5-64bit安装htop
首先启用 EPEL Repository: yum -y install epel-release 启用 EPEL Repository 後, 可以用 yum 直接安裝 Htop: yum -y in ...
- 怎么使用Docker搭建PHP开发环境呢?
在Docker流行之前,要搭建开发环境通常有两种选择:一种是使用wamp.xampp.mamp等集成开发环境安装包,另外一种就是使用普通虚拟机来安装linux服务器,然后通过下载一键安装包(如:lnm ...
- NSDictionary to jsonString || 对象转json格式
-(NSString*)DataTOjsonString:(id)object { NSString *jsonString = nil; NSError *error; NSData *jsonDa ...
- 使用 Bootstrap Typeahead 组件
Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,功能很强大,但是,使用上并不太方便.这里我们将介绍一下这个组件的使用. 第一,简单使用 首先,最简单 ...
- vi复制文字
可以对文字使用标记,在光标处使用 ma 将该行标记为a,可用`a (反引号)定位到该标记a位置,用'a (单引号)定位到该行行首. d$删除光标位置到行尾,y$取光标位置到行尾.d和y也可配合标记使用 ...