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