Blender创建物体堆的模型并将模型导入Gazebo

本文介绍了如何使用Blender创建一个物体堆模型,并将其导入Gazebo进行仿真。首先,创建基础场景并设置立方体粒子属性以形成金字塔形堆。接着,添加地面并设置物理属性。然后,给小立方体赋予物理属性,使其能堆叠在地面上。在模拟过程中调整物体状态并应用变换。最后,导出dae格式模型以供Gazebo使用。注意避免物体间碰撞及正确设置刚体属性。
摘要由CSDN通过智能技术生成

1.创建一个常规场景

这里用不到相机和光照,可以把这两个删掉,只保留立方体(不删也没啥影响),再新建一个立方体(shift+a新建网格->立方体),用于待会选这个立方体为渲染对象。
在这里插入图片描述

2.设置立方体的粒子属性

选中立方体,然后点右侧的粒子属性,再点加号创建新的粒子设置。
在这里插入图片描述
设置数量,起始帧和结束点都设置成0,在里面发射源选择体积,分布可以是抖动,也可以选栅格,选择栅格后可以通过改分辨率来调整数量,下面也可以加旋转属性。
在这里插入图片描述
在渲染属性中,将渲染为选成物体,在物体属性中,点吸管工具,选择刚才的另一个立方体,显示发射体取消勾选;
视图显示属性中,显示发射体取消勾选。
在这里插入图片描述
现在得到的结果是这样的:
在这里插入图片描述
选中物体,按Tab进入编辑模式,再按一下数字3,鼠标点击最上方的面,然后按s缩放,使得整体的形状像一个金字塔形。再按Tab就可以回到物体模式。
在这里插入图片描述

3.添加地面

shift+a添加网格->平面,添加一个平面,当做地面,让所有小立方体能够落到这个平面上形成堆。添加平面后,移动平面放到物体堆的下方,按s将平面放大。
在这里插入图片描述

选中平面,按下图所示,先选物理属性,然后点刚体。
在这里插入图片描述
将刚体类型改成被动。
在这里插入图片描述

4.给小立方体添加物理属性

为了后面选物体方面操作,先在右上角场景集合处新建集合,可以按键盘上的c,然后可以双击重命名。
在这里插入图片描述
选中模型中的小立方体后,点右侧的修改器属性,点击实例独立化,紧接着按m,将这些独立化的立方体移动到新建的集合中,删除原来的cube。
在这里插入图片描述
右键点击这个新建的集合,然后选择物体,和刚才对平面的操作类似,选择物理属性,点击刚体,这里的类型选为活动项表面响应中将摩擦调到最大,动力中将阻尼变换旋转都调到0.5左右,否则物体会停不下来。
在这里插入图片描述
点左上角的物体,依次选刚体->从活动项复制,然后按空格,可以看到小立方体掉落在平面上,在感觉已经到了自己想要的形状时,就可以再次按空格来暂停模拟。
在这里插入图片描述
这时如果拖动下方的帧,会回到原来未掉落的状态,可以选任意一帧进行应用,步骤如下:拖动帧进度条,找到想要的状态,然后再通过集合选中所有的小立方体,点击左上角物体,选择刚体->应用变换,然后再点左上角的物体,这次选择刚体->移除,现在拖动帧进度条已经不会再变了。最后可以删除平面,以及创建的另外一个立方体。
在这里插入图片描述
现在,一个简单的物体堆就做好了,如果要更复杂的,可以多做几次,多次让另外的小立方体掉落,就可以做成比较大的堆。另外,还可以加入别的形状的物体,只要在吸管工具那里选择不同的物体就行了。

5.导出模型

Gazebo中一般用dae格式的模型比较方便。这里为了保险起见,可以把所有的小立方体合并成一个物体。按一下a,可以全选所有模型,然后右键,选择合并,就成了一个整体。最后点左上角文件,选择导出dae就行了。
在这里插入图片描述
将dae模型导入Gazebo后就可以进行仿真了,这种模型可以用来用作SLAM中激光雷达和视觉摄像头的扫描,进行三维重建等仿真实验。

  • 要注意的几个点:
    1.在缩放物体时,注意不要让物体之间有碰撞,否则模拟的时候会炸开
    2.作为渲染参照的物体,进行缩放后,要按ctrl+a应用变换后才会起作用

参考视频:B站

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
创建地铁站模型的脚本涉及到很多具体的细节,因此下面给出的是一个基本的脚本框架,需要结合具体的场景进行修改和完善。 首先在 Blender创建一个地铁站场景,包括地铁站建筑、地铁轨道、车站设施等。 然后打开 Scripting 界面,创建一个新的 Python 文件,并导入必要的库: ```python import bpy import bmesh from mathutils import Vector, Matrix ``` 接下来定义一些常量和变量,例如地铁轨道的位置和大小、车站设施的位置等。这些需要根据实际场景进行修改。 ```python TRACK_LOCATION = Vector((0, 0, 0)) # 地铁轨道的位置 TRACK_SIZE = Vector((10, 5, 0.1)) # 地铁轨道的大小 PLATFORM_LOCATION = Vector((0, 0, 0.2)) # 车站平台的位置 PLATFORM_SIZE = Vector((10, 2, 0.1)) # 车站平台的大小 ``` 然后创建地铁轨道的函数: ```python def create_track(track_location, track_size): # 创建一个立方体 bpy.ops.mesh.primitive_cube_add(location=track_location) cube = bpy.context.object cube.scale = track_size # 应用一个 Subdivision Modifier modifier = cube.modifiers.new(name="Subdivision", type='SUBSURF') modifier.levels = 2 modifier.render_levels = 2 # 创建一个材质并应用到立方体上 material = bpy.data.materials.new(name="TrackMaterial") material.diffuse_color = (0.1, 0.1, 0.1) cube.data.materials.append(material) ``` 接着创建车站平台的函数: ```python def create_platform(platform_location, platform_size): # 创建一个平面 bpy.ops.mesh.primitive_plane_add(location=platform_location) plane = bpy.context.object plane.scale = platform_size # 创建一个材质并应用到平面上 material = bpy.data.materials.new(name="PlatformMaterial") material.diffuse_color = (0.9, 0.9, 0.9) plane.data.materials.append(material) ``` 最后在脚本中调用这些函数即可: ```python # 创建地铁轨道 create_track(TRACK_LOCATION, TRACK_SIZE) # 创建车站平台 create_platform(PLATFORM_LOCATION, PLATFORM_SIZE) ``` 完成上述步骤后,运行脚本即可在场景中创建地铁站模型。当然,这只是一个基础的脚本框架,实际使用中还需要根据具体需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值