2.5 用Blender制作机器人的三维模型
在这一节中,我们将设计机器人的3D模型。3D模型主要用来进行三维仿真,采用Blender工具软件进行建模。Blender的版本必须要在V2.6以上,目前我们只在V2.6以上版本中测试过。
Blender软件主界面上的工作空间和用于3D建模的工具栏如图2-14的屏幕截图所示。
我们选择用Blender这个工具的主要原因是,它可以用Python脚本语言进行机器人的3D建模。Blender有一个内置的Python解释器和脚本编辑器,用于代码编写。这里,我们就先不讨论Blender的用户界面了,可以在网上找到详细的教程,可参考下面的链接:http://www.blender.org/support/tutorials/。
下面,我们用Python在Blender中开始为机器人进行3D建模吧!
2.5.1 Blender中的Python脚本语言
Blender软件主要使用C、C++和Python语言。用户可以通过编写自己的Python脚本语言,调用Blender中的所有功能函数。如果你非常精通Blender中Python的API接口,那么可以完全通过编写Python脚本代码构造机器人的3D模型,代替通过人工拖曳工具栏上的工具软件进行建模。
图2-14 Blender软件主界面
Blender使用Python 3.x.Blender版本。Python API大部分都比较稳定,但有些地方的功能仍需要补充和改进。详细的Python API文档可参考:http://www.blender.org/documen-tation/blender_python_api_2_69_7/。
下面,我们开始用Blender中的Python API编写机器人模型的脚本代码。
2.5.2 Blender中的Python API介绍
Blender中的Python API接口能够完成绝大部分的功能,能完成的工作主要有以下几项:
可以编辑Blender中的任何数据,例如场景、网格、单点数据等;
修改用户偏好设置、索引图及界面主题;
创建新的Blender工具;
用Python编写OpenGL命令行,绘制3D视角。
Blender给Python解释器提供了一个bpy模块,这个模块可以导入Python脚本语言中,并访问Blender中的数据、类和函数。Python脚本必须通过这个模块,才能处理Blender中的数据。bpy中我们所用到的Python模块有以下几种:
Context Access(上下文访问):允许从bpy.context脚本访问Blender用户界面功能。
Data Access(数据访问):允许访问Blender内部数据(bpy.data)。
Operators(运算符):允许Python访问调用运算符,其中包括C、Python和Macros的运算符(bpy.ops)。
为了在Blender中切换到脚本编辑状态,需要改变Blender的界面布局。图2-15所示的屏幕截图中用方框标明的选项,可以帮您很容易地切换到脚本编辑的界面状态。
图2-15 脚本编辑状态
在切换到脚本编辑状态之后,在Blender中可以看到一个文本编辑器和Python的控制台窗口。在文本编辑器中,我们可以通过调用Blender的API接口进行代码编写,也可以尝试通过Python控制台进行Python命令操作。单击“新建”(New)按钮,可以创建一个新的Python脚本文件,并命名为robot.py。现在,我们可以仅通过使用Python脚本语言对机器人的3D模型进行建模。接下来的部分包含对机器人进行3D建模的完整脚本设计过程。在运行之前,我们先来讨论一下它的代码编写过程。希望在此之前,你已经从网站上了解过Blender中提供的Python API接口设置。可以把接下来的代码部分成6个Python功能函数,目的是为了设计出机器人的底座、中间层和顶层,机器人的电机和轮子,4个支撑管,最后将它们输出形成STL(STereoLithography,立体平板印刷)格式的3D文件,用于模型的仿真。
2.5.3 机器人建模中的Python脚本
下面,我们来看看在机器人建模过程中,如何一步步编写Python脚本。
1.?在开始编写Python脚本之前,我们必须在Blender中先导入bpy模块。bpy模块包含Blender中所有的功能函数,并且只能通过Blender应用程序进行内部访问:
2.?下面的函数将画出机器人的底座。一个半径为5cm的圆柱面,在它的两侧都削减去一部分,用于机器人电机的连接,连接状态在Blender中可以用布尔型(Boolean)修饰符:
3.?创建两个半径为0.05m的立方体,它们分别位于底座的两边。创建这两个立方体是为了从底座上抠掉这两个立方体。这样,我们会得到一个底座,它的两边有两个空心的立方体。之后,要将之前创建的这两个立方体删除,该过程的代码如下:
4.?绘制机器人底座上的电机和轮子:
5.?绘制轮子,它是由一个半径为0.045m高为0.01m的圆柱体制成的。在轮子生成以后,它可以旋转到合适的角度,放置在底座两边空心的立方体处:
6.?在底座上添加两个虚拟的电机。电机的2D设计尺寸在前面已经提到过。电机大致就是一个圆柱体的形状,通过旋转到合适的角度将其放置在底座上:
7.?在电机上添加一个轴,相当于对电机进行建模。电机的轴也可以看作是一个小的圆柱体,将其旋转合适的角度,插入电机模型中:
8.?在底座上添加两个脚轮。这里我们用圆柱体代替轮子,在仿真的时候,可以把它当作是轮子:
9.?添加一个虚拟的Kinect传感器:
10.?绘制机器人的中间层:
11.?绘制连接底层、中间层和顶层的4个支撑空心管:
12.?将设计好的机器人图纸输出成STL格式文件。在执行脚本命令之前,要更改STL文件的路径:
13.?在文本编辑器中键入代码之后,通过点击“运行脚本”按钮执行该脚本,如
图2-16屏幕截图上的方框所示。输出的3D模型会在Blender的3D视图窗口显示。同时,如果认真查看桌面,能够找到用于仿真的exported.stl文件。
exported.stl文件可以用MeshLab软件打开,MeshLab的屏幕截图如图2-17所示。
图2-16 执行脚本后的屏幕截图
图2-17 MeshLab截图
下载示例代码
你可从华章网站(www.hzbook.com)下载本书的示例代码。