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

简介:

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

相关文章
|
8天前
|
机器学习/深度学习 算法 测试技术
Python中实现多层感知机(MLP)的深度学习模型
Python中实现多层感知机(MLP)的深度学习模型
21 0
|
5天前
|
机器学习/深度学习 数据采集 前端开发
【Python机器学习专栏】模型泛化能力与交叉验证
【4月更文挑战第30天】本文探讨了机器学习中模型泛化能力的重要性,它是衡量模型对未知数据预测能力的关键。过拟合和欠拟合影响泛化能力,而交叉验证是评估和提升泛化能力的有效工具。通过K折交叉验证等方法,可以发现并优化模型,如调整参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
|
5天前
|
机器学习/深度学习 数据可视化 前端开发
【Python机器学习专栏】机器学习模型评估的实用方法
【4月更文挑战第30天】本文介绍了机器学习模型评估的关键方法,包括评估指标(如准确率、精确率、召回率、F1分数、MSE、RMSE、MAE及ROC曲线)和交叉验证技术(如K折交叉验证、留一交叉验证、自助法)。混淆矩阵提供了一种可视化分类模型性能的方式,而Python的scikit-learn库则方便实现这些评估。选择适合的指标和验证方法能有效优化模型性能。
|
5天前
|
机器学习/深度学习 算法 前端开发
【Python机器学习专栏】机器学习中的模型融合技术
【4月更文挑战第30天】模型融合,即集成学习,通过结合多个模型提升预测性能。常见方法包括:Bagging(如Random Forest)、Boosting(如AdaBoost、XGBoost)和Stacking。Python中可使用`scikit-learn`实现,例如BaggingClassifier示例。模型融合是机器学习中的强大工具,能提高整体性能并适应复杂问题。
|
5天前
|
机器学习/深度学习 Python
【Python 机器学习专栏】模型选择中的交叉验证与网格搜索
【4月更文挑战第30天】交叉验证和网格搜索是机器学习中优化模型的关键技术。交叉验证通过划分数据集进行多次评估,如K折和留一法,确保模型性能的稳定性。网格搜索遍历预定义参数组合,寻找最佳参数设置。两者结合能全面评估模型并避免过拟合。Python中可使用`sklearn`库实现这一过程,但需注意计算成本、过拟合风险及数据适应性。理解并熟练应用这些方法能提升模型性能和泛化能力。
|
5天前
|
机器学习/深度学习 数据可视化 TensorFlow
【Python 机器学习专栏】使用 TensorFlow 构建深度学习模型
【4月更文挑战第30天】本文介绍了如何使用 TensorFlow 构建深度学习模型。TensorFlow 是谷歌的开源深度学习框架,具备强大计算能力和灵活编程接口。构建模型涉及数据准备、模型定义、选择损失函数和优化器、训练、评估及模型保存部署。文中以全连接神经网络为例,展示了从数据预处理到模型训练和评估的完整流程。此外,还提到了 TensorFlow 的自动微分、模型可视化和分布式训练等高级特性。通过本文,读者可掌握 TensorFlow 基本用法,为构建高效深度学习模型打下基础。
|
5天前
|
算法 数据挖掘 Python
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
Python贝叶斯MCMC:Metropolis-Hastings、Gibbs抽样、分层模型、收敛性评估
12 2
|
5天前
|
机器学习/深度学习 算法 数据挖掘
【Python 机器学习专栏】Python 中的线性回归模型详解
【4月更文挑战第30天】本文介绍了Python中的线性回归模型,包括基本原理、实现步骤和应用。线性回归假设因变量与自变量间存在线性关系,通过建立数学模型进行预测。实现过程涉及数据准备、模型构建、参数估计、评估和预测。常用的Python库有Scikit-learn和Statsmodels。线性回归简单易懂,广泛应用,但对异常值敏感且假设线性关系。其扩展形式如多元线性、多项式回归和正则化方法能适应不同场景。理解并运用线性回归有助于数据分析和预测。
|
5天前
|
Python
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
Python随机波动性SV模型:贝叶斯推断马尔可夫链蒙特卡洛MCMC分析英镑/美元汇率时间序列数据|数据分享
10 0
|
5天前
|
资源调度 数据可视化 Python
Python随机波动模型Stochastic volatility,SV随机变分推断SVI分析标普500指数时间数据波动性可视化
Python随机波动模型Stochastic volatility,SV随机变分推断SVI分析标普500指数时间数据波动性可视化
12 0