前言:很早就想写一篇有关仿真方面的文章了。但是一直觉得这好像没什么好写的。需要的人自己会研究出来,不需要的人,就算把程序交到他手上,他还是觉得需要更多,最好连Paper都帮他写了。但是无论如何都好,还是写一篇介绍,希望对那些有需要但是无从下手的研究生朋友们有点帮助。 本文主要内容来自我的博士论文其中的一个章节,插图是英文的,不好好像没必要翻译成中文。这点英文应该还是很容易懂得。背景知识我就不说了,我们着重了解一下仿真本身。
“仿真的本质就是用计算机来模拟出一个虚拟的模型或者环境。”对于机器人来说,仿真一共有3大块。
环境地图仿真:也就是模拟出一个虚拟的工作环境,机器人在这个环境中进行工作。这也是整个仿真系统中最难得一个部分。很难建立一个和真实世界非常接近的虚拟世界。真实世界中,地板的摩擦力是不同的,风是有阻力的,地板不是绝对水平的,等等。要建立一个非常接近的虚拟世界,是一件很困难的事情。不过幸运的是,机器人的工作环境一般来说都比较结构化(除了那些室外的机器人),很多物理因素可以忽略不计,比如风阻。对于低速的机器人来说,这个因素基本可以忽略。但是地板的摩擦力的变化,这就一定要考虑进去。对于移动机器人来说,工作环境的表示可以用2D表示,也可以用3D表示。2D的表现形式可以由下图表示:蓝色表示障碍物,白色的表示可以自由移动的空间。这张地图在计算机中,其实就是一个2维的像素数组,比如一个像素表示真实世界的10cm,那么100X100像素就可以表示10X10米的工作环境了。而像素的值可以是简单的0和1,用来表示有障碍物还是没有障碍物。也可以是个概率值,用来表示障碍物的真实度。
机器人仿真:机器人仿真包括两个部分,第一是机器人的物理特性,比如形状。第二是机器人的动态特性,比如加速度阿,速度啊,这就需要参考机器人本身的动力学方程。每个机器人都会有这么一个方程式存在,用来描述机器人的运动轨迹和特性。在进行机器人仿真的时候,这个运动方程是一定要找出来的。否则,模拟出来的机器人和实际的机器人会有很大的差异。你的仿真结果的可信度就大大降低了。比如,下图就是两轮差分驱动机器人的动力学方程式了。
![]() 图:差分驱动的机器人的物理模型示意图
![]() 图:差分驱动的机器人的动力学方程式 传感器仿真:这就需要你能够模拟出传感器的特性。其实你不用管传感器的内部是如何工作的,你只要模拟出将传感器放在一个位置上以后,它的返回值是什么就可以了。
![]() 图:仿真的Sick LMS200 激光传感器 以上三大部分的关系可以用下图来表示。在仿真的环境中,仿真传感器将根据传感器的位置返回环境数据,比如(距离和角度),然后将这些数据发送给你的路径规划或者导航控制程序,用来计算出所需要的控制量,比如(机器人的速度和角度),然后这些控制量将会发送给仿真的机器人,用来计算出机器人在执行这些指令以后的状态,比如(虚拟环境中的位置和角度,以及移动速度和旋转角度)。
![]() 图:各个仿真模块之间的关系
其实要编写仿真程序不难,只要理清楚这些关系,找到物理模型以及动力学模型,剩下的就找个编程语言把这些编写出来就好了。用什么编程语言是没有关系的,Matlab也好,C++,Java,C#,甚至basic都是可以的。只要买一本程序的参考书+计算机图形编程方面的书+你足够的耐心和努力。很快你也可以编写出自己的仿真程序了。 |
联系方式:meilan128@hotmail.com |
mail:qdztxc@gamil.com |
Ricky 请你指点,我现在正在做算法方面的研究,不能再仿真上花太多时间,你能不能给我一些马上可以上手的资料,将不尽感谢!! |