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)下载本书的示例代码。

机器人系统设计与制作:Python语言实现2.5 用Blender制作机器人的三维模型相关推荐

  1. 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?

    这是最全面的回答!一篇文章让你彻底了解少儿编程和机器人编程的区别! 虽然都带有"编程"二字,但少儿编程和机器人编程还是有本质区别的,有哪些不一样呢? 偷懒的家长可以直接看下面这张表 ...

  2. 机器人编程与python语言的区别_少儿编程和机器人编程的区别有哪些?

    少儿编程和机器人编程是目前市面上较为流行的少儿编程培训课程,对孩子逻辑思维的培养非常有益,随着家长对孩子教育的重视,如今少儿编程和机器人编程受到了广大家长的关注,究竟少儿编程和机器人编程的区别有哪些呢 ...

  3. python数控机器人_科研一角|Python语言在人工智能加工中心机器人方面的应用

    原标题:科研一角|Python语言在人工智能加工中心机器人方面的应用 科研一角|Python语言在人工智能加工中心机器人方面的应用 (一)Python在智能机器人编程技术中的应用 用Python编写的 ...

  4. 制作html语言网站全攻略,(网页制作HTML代码全攻略.doc

    (网页制作HTML代码全攻略 网页制作HTML代码全攻略 第一章:HTML 语言的结构 html文件是标准的ASCII文件,它看起来象是加入了许多被称为标注(tag)的特殊字符串的普遍文本文件.从结构 ...

  5. 机器人系统设计与制作:Python语言实现2.1 服务机器人的设计需求

    摘要 服务机器人的机械设计 本书的主要目的是通过设计和构建机器人,并使用Python语言对它进行编程实现来学习机器人技术.我们先来看看如何从零开始对机器人的机械结构进行设计.我们将要设计搭建的是一种服 ...

  6. python机器人编程与操作_【教程免费下载】机器人系统设计与制作:Python语言实现-问答-阿里云开发者社区-阿里云...

    前言 本书包含12章,主要介绍如何从零开始构建自主移动的机器人,并使用Python进行编程.本书所提到的机器人是用于家庭.宾馆.餐厅的服务机器人,我们将按照顺序介绍如何一步一步构建它.书中从机器人的基 ...

  7. ROS学习(六)机器人系统设计

    ROS学习(六) 机器人系统设计 机器人的定义与组成 机器人系统构建 URDF机器人建模 机器人系统设计 查看指针中的具体成员变量 show turtlesim/Pose 机器人的定义与组成 执行机构 ...

  8. (渲染大赛作品)Blender制作幕后:机械动力(一)

    介绍 大家好,我叫Robert Kouts,来自澳大利亚,今年16岁,是一名自学成才的3D艺术家和程序员. 在这篇文章中,我将展示我参加第三届3D渲染挑战赛的作品的制作动画过程,这个作品使用Blend ...

  9. 机器人系统设计与制作:Python语言实现2.4 用LibreCAD生成机器人的二维CAD图

    2.4 用LibreCAD生成机器人的二维CAD图 我们来看看LibreCAD的主界面,如图2-3的屏幕截图所示. 图2-3 LibreCAD主界面图 左边的CAD工具栏是绘制模型必不可少的组件,图2 ...

最新文章

  1. 数据与程序分离——程序中那些表的事儿
  2. C++ 与 G++的区别
  3. 很好的开源项目ranet-uilibrary-olap
  4. 分布式数据库数据一致性的原理、与技术实现方案
  5. uni-app微信小程序uni.navigateTo跳转无效问题;记录一次uni-app页面跳转无效,来回跳转问题;wx.navigateTo ,跳转超过10次怎么点不动的解决办法。
  6. 怎样将Embedding融入传统机器学习框架?
  7. 7宗命案,潜逃23年,大数据还是认出了她
  8. 002A demo of the Spectral Co-Clustering algorithm
  9. 查看php 加载.dll,无法加载PHP_OCI8.DLL的解决
  10. 流程图外部数据内部数据图形_数据治理工具:基于SQL图形化数据血缘系统的实现和使用...
  11. tensorflow实现余弦cosine相似度
  12. AVL树原理理解:旋转与平衡
  13. 如何点击单选框 radio 后面的文字,选中单选框
  14. 基于点云的骨骼感知三维人体形状重建
  15. python 读取pdf图片_Python提取PDF第一页为封面图片【批量提取】
  16. 最新国外虚拟主机对比评论国外虚拟主机购买指南
  17. 卡尔曼滤波最完整公式推导
  18. web常见的 HTTP 5xx 状态汇总
  19. Vue中视频组件vue-video-player
  20. 草根大牛论道“下一代软件研发” 开启软件转型讨论大潮

热门文章

  1. 番茄工作法总结-第一章:一次只做一件事
  2. 番茄工作方法以及番茄工作表
  3. 计算机配置太低,安装Win10系统电脑配置太低怎么办
  4. 辽宁省冰雪旅游发展现状及开发策略分析
  5. Win10改Win7后USB没有被驱动
  6. 宝塔Linux面板的安装配置以及基本使用教程(超详细)
  7. 谈PLM和ERP的差异比较
  8. 中国移动宽带服务器注册灯一直闪怎么回事,中国移动光猫注册灯一直闪
  9. 洛谷P3009-[USACO11JAN]Profits S(DP-最大子段和)
  10. 看张亚飞《.Net for Flash FMS》的笔记